cpularp-manager-api/src/lib/database/character/character.go
2025-04-28 10:38:15 -07:00

70 lines
2.3 KiB
Go

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
}