package character import ( "log" functionset "example.com/database/functionset" inventoryslot "example.com/database/inventoryslot" person "example.com/database/person" role "example.com/database/role" "gorm.io/gorm" ) type Character struct { gorm.Model Name string `gorm:"primaryKey; uniqueIndex" json:"name"` Owners []person.Person `gorm:"many2many:character_owner_associations" json:"owners"` // Unique Roles []role.Role `gorm:"many2many:character_role_associations" json:"roles"` // Unique FunctionSets []functionset.FunctionSet `gorm:"many2many:character_functionset_associations" json:"function_sets"` Inventory []inventoryslot.InventorySlot `gorm:"many2many:character_inventory_associations" json:"inventory"` } func CreateDatabaseCharacter(db *gorm.DB, character Character) error { result := db.Create(&character) if result.Error != nil { return result.Error } return nil } func GetDatabaseCharacter(db *gorm.DB, inputCharacter string) Character { var outputCharacter Character result := db.Model(&Character{}).Where("name = ?", inputCharacter).Take(&outputCharacter) if result.Error != nil { return Character{} } db.Model(&outputCharacter).Association("Owners").Find(&outputCharacter.Owners) db.Model(&outputCharacter).Association("Roles").Find(&outputCharacter.Roles) db.Model(&outputCharacter).Association("FunctionSets").Find(&outputCharacter.FunctionSets) db.Model(&outputCharacter).Association("Inventory").Find(&outputCharacter.Inventory) return outputCharacter } func GetDatabaseCharacters(db *gorm.DB, inputCharacters []string) []Character { var outputCharacters []Character for _, inputCharacter := range inputCharacters { outputCharacters = append(outputCharacters, GetDatabaseCharacter(db, inputCharacter)) } return outputCharacters } func GetAllDatabaseCharacters(db *gorm.DB) []Character { var outputCharacters []Character result := db.Find(&outputCharacters) if result.Error != nil { log.Println(result.Error) } for index, outputCharacter := range outputCharacters { outputCharacters[index] = GetDatabaseCharacter(db, outputCharacter.Name) } return outputCharacters } func UpdateDatabaseCharacter(db *gorm.DB, character Character) error { result := db.Save(&character) if result.Error != nil { return result.Error } return nil }