70 lines
2.3 KiB
Go
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
|
|
}
|