From 490be49808a11a8c65ee6aa6b7684ffefe2756cf Mon Sep 17 00:00:00 2001 From: Ada Werefox Date: Mon, 12 May 2025 09:24:57 -0700 Subject: [PATCH] progress --- src/lib/api/api.go | 33 +++++----- src/lib/database/function/function.go | 8 +-- src/lib/database/functiontag/functiontag.go | 72 +++++++++++++++++---- src/lib/database/group/group.go | 1 - 4 files changed, 82 insertions(+), 32 deletions(-) diff --git a/src/lib/api/api.go b/src/lib/api/api.go index bb1cc29..e893a96 100644 --- a/src/lib/api/api.go +++ b/src/lib/api/api.go @@ -297,7 +297,7 @@ func UpdateObject(context *gin.Context) { case "function": result = function.Update(GlobalDatabase, context) case "function-tag": - // result = functiontag.Create(GlobalDatabase, objectID) + result = functiontag.Update(GlobalDatabase, context) case "inventory-slot": // case "item": @@ -395,8 +395,9 @@ func GetObjects(context *gin.Context) { "functions": function.Get(GlobalDatabase, uintObjectIDs), }) case "function-tags": + objectIDInts := objectIDStringsToInts(context, objectIDs) context.JSON(http.StatusOK, gin.H{ - "function_tags": functiontag.Get(GlobalDatabase, objectIDs), + "function_tags": functiontag.Get(GlobalDatabase, *objectIDInts), }) case "inventory-slot": objectIDInts := objectIDStringsToInts(context, objectIDs) @@ -492,35 +493,35 @@ func DeleteObject(context *gin.Context) { uintObjectIDs := objectIDStringsToInts(context, objectIDs) var result error switch objectType := context.Param("object"); objectType { - case "user": + case "users": // - case "person": + case "persons": // case "groups": log.Println(*uintObjectIDs, objectIDs) result = group.Delete(GlobalDatabase, *uintObjectIDs) - case "character": + case "characters": // - case "role": + case "roles": // - case "tier": + case "tiers": // - case "function-set": + case "function-sets": // - case "function": + case "functions": log.Println(uintObjectIDs) result = function.Delete(GlobalDatabase, *uintObjectIDs) - case "function-tag": - // result = functiontag.Create(GlobalDatabase, objectID) - case "inventory-slot": + case "function-tags": + result = functiontag.Delete(GlobalDatabase, *uintObjectIDs) + case "inventory-slots": // - case "item": + case "items": // - case "item-tag": + case "item-tags": // - case "customization": + case "customizations": // - case "schematic": + case "schematics": // } if result != nil { diff --git a/src/lib/database/function/function.go b/src/lib/database/function/function.go index 739dd5f..e43ad2c 100644 --- a/src/lib/database/function/function.go +++ b/src/lib/database/function/function.go @@ -20,10 +20,10 @@ type Function struct { } type functionParams struct { - Id string `json:"id"` - Name string `json:"name"` - Tags []string `json:"tags"` - Requirements []uint `json:"requirements"` + Id string `json:"id"` + Name string `json:"name"` + Tags []uint `json:"tags"` + Requirements []uint `json:"requirements"` } func (function Function) Create(db *gorm.DB) error { diff --git a/src/lib/database/functiontag/functiontag.go b/src/lib/database/functiontag/functiontag.go index 77988d8..c8ffe16 100644 --- a/src/lib/database/functiontag/functiontag.go +++ b/src/lib/database/functiontag/functiontag.go @@ -1,7 +1,11 @@ package functiontag import ( + "encoding/json" + "errors" + "io" "log" + "strconv" "github.com/gin-gonic/gin" "gorm.io/gorm" @@ -9,18 +13,45 @@ import ( type FunctionTag struct { gorm.Model - Name string `gorm:"primaryKey uniqueIndex" json:"name"` + Name string `gorm:"uniqueIndex" json:"name"` } -func (functionTag *FunctionTag) get(db *gorm.DB, inputFunctionTag string) { - db.Where("name = ?", inputFunctionTag).Take(&functionTag) +type functionTagParams struct { + // ID of the object being modified + ID string + // New fields + Name string +} + +func (params *functionTagParams) validate(context *gin.Context) error { + ID, IDOk := context.GetQuery("id") + if !IDOk { + return errors.New("ID was not included in the request") + } + body, err := io.ReadAll(context.Request.Body) + if err != nil { + log.Println(err) + return err + } + var name functionTagParams + _ = json.Unmarshal(body, &name) + params.ID = ID + params.Name = name.Name + return nil +} + +func (functionTag *FunctionTag) get(db *gorm.DB, inputFunctionTag uint) { + db.Model(&FunctionTag{}).Where("ID = ?", inputFunctionTag).Take(&functionTag) } func (functionTag FunctionTag) update(db *gorm.DB) error { - result := db.Save(&functionTag) + var originalFunctionTag FunctionTag + result := db.Model(&FunctionTag{}).Where("id = ?", functionTag.ID).Take(&originalFunctionTag) if result.Error != nil { return result.Error } + originalFunctionTag.Name = functionTag.Name + db.Save(&originalFunctionTag) return nil } @@ -41,12 +72,21 @@ func (functionTag FunctionTag) delete(db *gorm.DB) error { } func Create(db *gorm.DB, context *gin.Context) error { + body, err := io.ReadAll(context.Request.Body) + if err != nil { + return err + } + var newFunctionTag FunctionTag + err = json.Unmarshal(body, &newFunctionTag) + if err != nil { + return err + } return FunctionTag{ - Name: context.Query("id"), + Name: newFunctionTag.Name, }.create(db) } -func Get(db *gorm.DB, inputFunctionTags []string) *[]FunctionTag { +func Get(db *gorm.DB, inputFunctionTags []uint) *[]FunctionTag { var outputFunctionTags []FunctionTag for _, inputFunctionTag := range inputFunctionTags { var outputFunctionTag FunctionTag @@ -58,22 +98,32 @@ func Get(db *gorm.DB, inputFunctionTags []string) *[]FunctionTag { func GetAll(db *gorm.DB) *[]FunctionTag { var outputFunctionTags []FunctionTag - var outputFunctionTagNames []string - result := db.Model(&FunctionTag{}).Select("name").Find(&outputFunctionTagNames) + var outputFunctionTagIDs []uint + result := db.Model(&FunctionTag{}).Select("id").Find(&outputFunctionTagIDs) if result.Error != nil { log.Println(result.Error) } - outputFunctionTags = *Get(db, outputFunctionTagNames) + outputFunctionTags = *Get(db, outputFunctionTagIDs) return &outputFunctionTags } func Update(db *gorm.DB, context *gin.Context) error { + var params functionTagParams + err := params.validate(context) + if err != nil { + return err + } + uintID, err := strconv.Atoi(params.ID) + if err != nil { + return err + } return FunctionTag{ - Name: context.Query("id"), + Model: gorm.Model{ID: uint(uintID)}, + Name: params.Name, }.update(db) } -func Delete(db *gorm.DB, inputFunctions []string) error { +func Delete(db *gorm.DB, inputFunctions []uint) error { functions := Get(db, inputFunctions) for _, function := range *functions { err := function.delete(db) diff --git a/src/lib/database/group/group.go b/src/lib/database/group/group.go index 22217d5..df509e7 100644 --- a/src/lib/database/group/group.go +++ b/src/lib/database/group/group.go @@ -78,7 +78,6 @@ func Create(db *gorm.DB, context *gin.Context) error { } var newGroup Group err = json.Unmarshal(body, &newGroup) - log.Println(newGroup) if err != nil { return err }