package item import ( "log" customization "example.com/database/customization" function "example.com/database/function" group "example.com/database/group" itemtag "example.com/database/itemtag" "gorm.io/gorm" ) type Item struct { gorm.Model Name string `gorm:"primaryKey uniqueIndex" json:"name"` Functions []function.Function `gorm:"many2many:item_function_associations" json:"functions"` FlavorText string `json:"flavor_text"` RulesDescription string `json:"rules_description"` PhysrepRequirements string `json:"physrep_requirements"` Tags []itemtag.ItemTag `gorm:"many2many:item_tag_associations" json:"tags"` // Unique Customizations []customization.Customization `gorm:"many2many:item_customization_associations" json:"customizations"` Visibility []group.Group `gorm:"many2many:item_visibility_associations" json:"visibility"` // Unique } func CreateDatabaseItem(db *gorm.DB, item Item) error { result := db.Create(&item) if result.Error != nil { return result.Error } return nil } func GetDatabaseItem(db *gorm.DB, inputItem string) Item { var outputItem Item result := db.Model(&Item{}).Where("name = ?", inputItem).Take(&outputItem) if result.Error != nil { return Item{} } db.Model(&outputItem).Association("Functions").Find(&outputItem.Functions) db.Model(&outputItem).Association("Tags").Find(&outputItem.Tags) db.Model(&outputItem).Association("Customizations").Find(&outputItem.Customizations) db.Model(&outputItem).Association("Visibility").Find(&outputItem.Visibility) return outputItem } func GetDatabaseItems(db *gorm.DB, inputItems []string) []Item { var outputItems []Item for _, inputItem := range inputItems { outputItems = append(outputItems, GetDatabaseItem(db, inputItem)) } return outputItems } func GetAllDatabaseItems(db *gorm.DB) []Item { var outputItems []Item result := db.Find(&outputItems) if result.Error != nil { log.Println(result.Error) } for index, outputItem := range outputItems { outputItems[index] = GetDatabaseItem(db, outputItem.Name) } return outputItems } func UpdateDatabaseItem(db *gorm.DB, item Item) error { result := db.Save(&item) if result.Error != nil { return result.Error } return nil }