Files
bamort/backend/models/model_character.go
T

230 lines
7.1 KiB
Go
Raw Normal View History

2025-07-28 21:35:29 +02:00
package models
2024-12-30 15:58:05 +01:00
import (
"bamort/database"
"fmt"
"gorm.io/gorm"
)
2024-12-30 16:05:51 +01:00
// Au, Gs, Gw ,In, Ko, Pa, St, Wk, Zt
type Eigenschaft struct {
ID uint `gorm:"index" json:"id"`
CharacterID uint `gorm:"primaryKey" json:"character_id"`
Name string `gorm:"primaryKey" json:"name"`
Value int `json:"value"`
}
2024-12-30 16:11:01 +01:00
type Lp struct {
ID uint `gorm:"primaryKey" json:"id"`
2024-12-30 16:11:01 +01:00
CharacterID uint `gorm:"index" json:"character_id"`
Max int `json:"max"`
Value int `json:"value"`
}
type Ap struct {
ID uint `gorm:"primaryKey" json:"id"`
CharacterID uint `gorm:"index" json:"character_id"`
Max int `json:"max"`
Value int `json:"value"`
}
type B struct {
ID uint `gorm:"primaryKey" json:"id"`
CharacterID uint `gorm:"index" json:"character_id"`
Max int `json:"max"`
Value int `json:"value"`
}
/*
type Gestalt struct {
models.BamortCharTrait
}
*/
type Merkmale struct {
2025-07-28 21:35:29 +02:00
BamortCharTrait
Augenfarbe string `json:"augenfarbe"`
Haarfarbe string `json:"haarfarbe"`
Sonstige string `json:"sonstige"`
Breite string `json:"breite"`
Groesse string `json:"groesse"`
}
type Erfahrungsschatz struct {
2025-07-28 21:35:29 +02:00
BamortCharTrait
2025-07-25 21:02:24 +02:00
ES int `json:"es"` // Erfahrungsschatz
EP int `json:"ep"` // Erfahrungspunkte
}
type Bennies struct {
2025-07-28 21:35:29 +02:00
BamortCharTrait
2025-07-24 07:39:43 +02:00
Gg int `json:"gg"` // Göttliche Gnade
Gp int `json:"gp"` // Glückspunkte
Sg int `json:"sg"` // Schicksalsgunst
}
type Vermoegen struct {
2025-07-28 21:35:29 +02:00
BamortCharTrait
2025-07-24 07:39:43 +02:00
Goldstücke int `json:"goldstücke"` // GS
Silberstücke int `json:"silberstücke"` // SS
Kupferstücke int `json:"kupferstücke"` // KS
}
2024-12-30 15:58:05 +01:00
type Char struct {
2025-07-28 21:35:29 +02:00
BamortBase
2025-07-28 22:08:19 +02:00
Rasse string `json:"rasse"`
Typ string `json:"typ"`
Alter int `json:"alter"`
Anrede string `json:"anrede"`
Grad int `json:"grad"`
Groesse int `json:"groesse"`
Gewicht int `json:"gewicht"`
Glaube string `json:"glaube"`
Hand string `json:"hand"`
Lp Lp `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"lp"`
Ap Ap `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"ap"`
B B `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"b"`
Merkmale Merkmale `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"merkmale"`
Eigenschaften []Eigenschaft `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"eigenschaften"`
Fertigkeiten []SkFertigkeit `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"fertigkeiten"`
Waffenfertigkeiten []SkWaffenfertigkeit `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"waffenfertigkeiten"`
Zauber []SkZauber `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"zauber"`
Spezialisierung database.StringArray `gorm:"type:TEXT" json:"spezialisierung"`
Bennies Bennies `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"bennies"`
Vermoegen Vermoegen `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"vermoegen"`
Erfahrungsschatz Erfahrungsschatz `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"erfahrungsschatz"`
Waffen []EqWaffe `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"waffen"`
Behaeltnisse []EqContainer `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"behaeltnisse"`
Transportmittel []EqContainer `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"transportmittel"`
Ausruestung []EqAusruestung `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"ausruestung"`
Image string `json:"image,omitempty"`
2024-12-30 15:58:05 +01:00
}
2025-01-03 14:03:27 +01:00
type CharList struct {
2025-07-28 21:35:29 +02:00
BamortBase
2025-01-03 14:03:27 +01:00
Rasse string `json:"rasse"`
Typ string `json:"typ"`
Grad int `json:"grad"`
Owner string `json:"owner"`
Public bool `json:"public"`
}
2024-12-30 15:58:05 +01:00
2025-01-18 20:59:35 +01:00
type FeChar struct {
Char
2025-07-28 22:08:19 +02:00
CategorizedSkills map[string][]SkFertigkeit `json:"categorizedskills"`
InnateSkills []SkFertigkeit `json:"innateskills"`
2025-01-18 20:59:35 +01:00
}
func (object *Char) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
return dbPrefix + "_" + "chars"
}
2025-01-18 20:59:35 +01:00
2025-07-24 07:39:43 +02:00
func (object *Char) First(charName string) error {
2024-12-30 15:58:05 +01:00
err := database.DB.
Preload("Lp").
Preload("Ap").
Preload("B").
Preload("Merkmale").
Preload("Eigenschaften").
Preload("Fertigkeiten").
Preload("Waffenfertigkeiten").
Preload("Zauber").
Preload("Bennies").
2025-07-24 07:39:43 +02:00
Preload("Vermoegen").
2024-12-30 15:58:05 +01:00
Preload("Erfahrungsschatz").
Preload("Waffen").
Preload("Behaeltnisse").
Preload("Transportmittel").
Preload("Ausruestung").
2025-07-24 07:39:43 +02:00
First(&object, " name = ?", charName).Error
2024-12-30 15:58:05 +01:00
if err != nil {
// zauber found
return err
}
return nil
}
2025-01-18 20:59:35 +01:00
2025-07-24 07:39:43 +02:00
func (object *Char) FirstID(charID string) error {
2025-01-03 00:03:31 +01:00
err := database.DB.
Preload("Lp").
Preload("Ap").
Preload("B").
Preload("Merkmale").
Preload("Eigenschaften").
Preload("Fertigkeiten").
Preload("Waffenfertigkeiten").
Preload("Zauber").
Preload("Bennies").
2025-07-24 07:39:43 +02:00
Preload("Vermoegen").
2025-01-03 00:03:31 +01:00
Preload("Erfahrungsschatz").
Preload("Waffen").
Preload("Behaeltnisse").
Preload("Transportmittel").
Preload("Ausruestung").
2025-07-24 07:39:43 +02:00
First(&object, charID).Error
2025-01-03 00:03:31 +01:00
if err != nil {
2025-07-24 07:39:43 +02:00
// zauber found
2025-01-03 00:03:31 +01:00
return err
}
return nil
}
2025-01-18 20:59:35 +01:00
2024-12-30 15:58:05 +01:00
func (object *Char) Create() error {
err := database.DB.Transaction(func(tx *gorm.DB) error {
// Save the main character record
if err := tx.Create(&object).Error; err != nil {
return fmt.Errorf("failed to save Lookup: %w", err)
}
return nil
})
return err
}
2025-01-18 20:59:35 +01:00
2025-01-03 00:03:31 +01:00
func (object *Char) Delete() error {
err := database.DB.Transaction(func(tx *gorm.DB) error {
// delete the main character record
//should cascade for all elements
if err := tx.Delete(&object).Error; err != nil {
return fmt.Errorf("failed to delete char: %w", err)
}
return nil
})
2025-01-03 00:03:31 +01:00
return err
}
func (object *Eigenschaft) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
return dbPrefix + "_" + "eigenschaften"
}
func (object *Lp) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
return dbPrefix + "_" + "health"
}
func (object *Ap) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
return dbPrefix + "_" + "endurances"
}
func (object *B) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
return dbPrefix + "_" + "motionranges"
}
func (object *Merkmale) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
return dbPrefix + "_" + "characteristics"
}
func (object *Erfahrungsschatz) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
return dbPrefix + "_" + "experiances"
}
func (object *Bennies) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
return dbPrefix + "_" + "bennies"
}
2025-07-24 07:39:43 +02:00
func (object *Vermoegen) TableName() string {
2025-07-28 21:35:29 +02:00
dbPrefix := "char"
2025-07-24 07:39:43 +02:00
return dbPrefix + "_" + "wealth"
}