add space and finish item create/update mutations.
This commit is contained in:
@@ -6,10 +6,12 @@ package resolvers
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"sort"
|
||||
"time"
|
||||
|
||||
"git.aiterp.net/stufflog/server/graph/graphcore"
|
||||
"git.aiterp.net/stufflog/server/internal/generate"
|
||||
"git.aiterp.net/stufflog/server/internal/slerrors"
|
||||
"git.aiterp.net/stufflog/server/models"
|
||||
)
|
||||
@@ -140,10 +142,6 @@ func (r *mutationResolver) CreateItem(ctx context.Context, input *graphcore.Item
|
||||
return nil, errors.New("at least one tag is required")
|
||||
}
|
||||
|
||||
if input.Image != nil {
|
||||
panic("todo: implement image upload")
|
||||
}
|
||||
|
||||
item := models.Item{
|
||||
Name: input.Name,
|
||||
Description: input.Description,
|
||||
@@ -152,11 +150,105 @@ func (r *mutationResolver) CreateItem(ctx context.Context, input *graphcore.Item
|
||||
ImageURL: nil,
|
||||
}
|
||||
|
||||
if input.Image != nil {
|
||||
url, err := r.Upload.UploadImage(
|
||||
ctx,
|
||||
"item-image/"+generate.Generate(16, "I"),
|
||||
input.Image.ContentType,
|
||||
input.Image.Size,
|
||||
input.Image.File,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
item.ImageURL = &url
|
||||
}
|
||||
|
||||
return r.Database.Items().Insert(ctx, item)
|
||||
}
|
||||
|
||||
func (r *mutationResolver) EditItem(ctx context.Context, input *graphcore.ItemEditInput) (*models.Item, error) {
|
||||
panic(fmt.Errorf("not implemented"))
|
||||
user := r.Auth.UserFromContext(ctx)
|
||||
if user == nil {
|
||||
return nil, slerrors.PermissionDenied
|
||||
}
|
||||
|
||||
item, err := r.Database.Items().Find(ctx, input.ItemID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
deleteList := make([]int, 0, len(input.RemoveTags))
|
||||
for _, tag := range input.RemoveTags {
|
||||
for i, tag2 := range item.Tags {
|
||||
if tag == tag2 {
|
||||
deleteList = append(deleteList, i-len(deleteList))
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, index := range deleteList {
|
||||
item.Tags = append(item.Tags[:index], item.Tags[index+1:]...)
|
||||
}
|
||||
for _, tag := range input.AddTags {
|
||||
found := false
|
||||
for _, tag2 := range item.Tags {
|
||||
if tag == tag2 {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
item.Tags = append(item.Tags, tag)
|
||||
}
|
||||
}
|
||||
sort.Strings(item.Tags)
|
||||
|
||||
if input.SetQuantityUnit != nil {
|
||||
item.QuantityUnit = input.SetQuantityUnit
|
||||
}
|
||||
if input.ClearQuantityUnit != nil && *input.ClearQuantityUnit {
|
||||
item.QuantityUnit = nil
|
||||
}
|
||||
|
||||
if input.SetName != nil {
|
||||
item.Name = *input.SetName
|
||||
}
|
||||
if input.SetDescription != nil {
|
||||
item.Description = *input.SetDescription
|
||||
}
|
||||
|
||||
var prevFile *string
|
||||
if input.UpdateImage != nil {
|
||||
url, err := r.Upload.UploadImage(
|
||||
ctx,
|
||||
"item-image/"+generate.Generate(16, "U"),
|
||||
input.UpdateImage.ContentType,
|
||||
input.UpdateImage.Size,
|
||||
input.UpdateImage.File,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
prevFile = item.ImageURL
|
||||
item.ImageURL = &url
|
||||
}
|
||||
|
||||
err = r.Database.Items().Save(ctx, *item)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if prevFile != nil {
|
||||
err := r.Upload.Delete(ctx, *prevFile)
|
||||
if err != nil {
|
||||
log.Printf("Failed to delete %s: %s", *prevFile, err)
|
||||
}
|
||||
}
|
||||
|
||||
return item, nil
|
||||
}
|
||||
|
||||
func (r *mutationResolver) CreateIssue(ctx context.Context, input graphcore.IssueCreateInput) (*models.Issue, error) {
|
||||
|
||||
@@ -40,14 +40,17 @@ input ItemCreateInput {
|
||||
|
||||
"Input for the editItem mutation."
|
||||
input ItemEditInput {
|
||||
"The item to edit."
|
||||
itemId: String!
|
||||
|
||||
"Update the name."
|
||||
setName: String
|
||||
"Update the description."
|
||||
setDescription: String
|
||||
"Add new tags. The tags are added after removeTag tags are removed."
|
||||
addTags: [String]
|
||||
addTags: [String!]
|
||||
"Remove existing tags. If a tag exists both here and in addTags, it will not be removed."
|
||||
removeTags: [String]
|
||||
removeTags: [String!]
|
||||
"Update quantity unit."
|
||||
setQuantityUnit: String
|
||||
"Clear quantity unit."
|
||||
|
||||
Reference in New Issue
Block a user