2024-12-30 15:58:05 +01:00
|
|
|
package character
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bamort/database"
|
2024-12-30 16:23:05 +01:00
|
|
|
"bamort/equipment"
|
2024-12-30 15:58:05 +01:00
|
|
|
"bamort/models"
|
2024-12-30 17:57:33 +01:00
|
|
|
"bamort/skills"
|
2024-12-30 15:58:05 +01:00
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
)
|
|
|
|
|
|
2025-01-02 17:38:22 +01:00
|
|
|
var dbPrefix = "char"
|
|
|
|
|
|
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 {
|
2025-01-02 17:38:22 +01:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
*/
|
2024-12-30 16:37:30 +01:00
|
|
|
|
|
|
|
|
type Merkmale struct {
|
|
|
|
|
models.BamortCharTrait
|
|
|
|
|
Augenfarbe string `json:"augenfarbe"`
|
|
|
|
|
Haarfarbe string `json:"haarfarbe"`
|
|
|
|
|
Sonstige string `json:"sonstige"`
|
|
|
|
|
Breite string `json:"breite"`
|
|
|
|
|
Groesse string `json:"groesse"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type Erfahrungsschatz struct {
|
|
|
|
|
models.BamortCharTrait
|
|
|
|
|
Value int `json:"value"`
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-30 17:57:33 +01:00
|
|
|
type Bennies struct {
|
|
|
|
|
models.BamortCharTrait
|
|
|
|
|
Gg int `json:"gg"`
|
|
|
|
|
Gp int `json:"gp"`
|
|
|
|
|
Sg int `json:"sg"`
|
|
|
|
|
}
|
|
|
|
|
|
2024-12-30 15:58:05 +01:00
|
|
|
type Char struct {
|
|
|
|
|
models.BamortBase
|
2024-12-30 16:30:56 +01: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"`
|
2024-12-30 16:37:30 +01:00
|
|
|
Merkmale Merkmale `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"merkmale"`
|
2024-12-30 16:30:56 +01:00
|
|
|
Eigenschaften []Eigenschaft `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"eigenschaften"`
|
2024-12-30 17:57:33 +01:00
|
|
|
Fertigkeiten []skills.Fertigkeit `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"fertigkeiten"`
|
|
|
|
|
Waffenfertigkeiten []skills.Waffenfertigkeit `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"waffenfertigkeiten"`
|
|
|
|
|
Zauber []skills.Zauber `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"zauber"`
|
2024-12-30 16:30:56 +01:00
|
|
|
Spezialisierung database.StringArray `gorm:"type:TEXT" json:"spezialisierung"`
|
2024-12-30 17:57:33 +01:00
|
|
|
Bennies Bennies `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"bennies"`
|
2024-12-30 16:37:30 +01:00
|
|
|
Erfahrungsschatz Erfahrungsschatz `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"erfahrungsschatz"`
|
2024-12-30 16:30:56 +01:00
|
|
|
Waffen []equipment.Waffe `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"waffen"`
|
|
|
|
|
Behaeltnisse []equipment.Behaeltniss `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"behaeltnisse"`
|
|
|
|
|
Transportmittel []equipment.Transportation `gorm:"foreignKey:CharacterID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"transportmittel"`
|
|
|
|
|
Ausruestung []equipment.Ausruestung `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-02 17:38:22 +01:00
|
|
|
func (object *Char) TableName() string {
|
|
|
|
|
return dbPrefix + "_" + "chars"
|
|
|
|
|
}
|
2024-12-30 15:58:05 +01:00
|
|
|
func (object *Char) First(name string) error {
|
|
|
|
|
err := database.DB.
|
|
|
|
|
Preload("Lp").
|
|
|
|
|
Preload("Ap").
|
|
|
|
|
Preload("B").
|
|
|
|
|
Preload("Merkmale").
|
|
|
|
|
Preload("Eigenschaften").
|
|
|
|
|
Preload("Fertigkeiten").
|
|
|
|
|
Preload("Waffenfertigkeiten").
|
|
|
|
|
Preload("Zauber").
|
|
|
|
|
Preload("Bennies").
|
|
|
|
|
Preload("Erfahrungsschatz").
|
|
|
|
|
Preload("Waffen").
|
|
|
|
|
Preload("Behaeltnisse").
|
|
|
|
|
Preload("Transportmittel").
|
|
|
|
|
Preload("Ausruestung").
|
|
|
|
|
First(&object, " name = ?", name).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
// zauber found
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
2025-01-03 00:03:31 +01:00
|
|
|
func (object *Char) FirstID(name string) error {
|
|
|
|
|
err := database.DB.
|
|
|
|
|
Preload("Lp").
|
|
|
|
|
Preload("Ap").
|
|
|
|
|
Preload("B").
|
|
|
|
|
Preload("Merkmale").
|
|
|
|
|
Preload("Eigenschaften").
|
|
|
|
|
Preload("Fertigkeiten").
|
|
|
|
|
Preload("Waffenfertigkeiten").
|
|
|
|
|
Preload("Zauber").
|
|
|
|
|
Preload("Bennies").
|
|
|
|
|
Preload("Erfahrungsschatz").
|
|
|
|
|
Preload("Waffen").
|
|
|
|
|
Preload("Behaeltnisse").
|
|
|
|
|
Preload("Transportmittel").
|
|
|
|
|
Preload("Ausruestung").
|
|
|
|
|
First(&object, " id = ?", name).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
// Char not found
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
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-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-02 17:38:22 +01:00
|
|
|
|
2025-01-03 00:03:31 +01:00
|
|
|
return err
|
|
|
|
|
}
|
2025-01-02 17:38:22 +01:00
|
|
|
func (object *Eigenschaft) TableName() string {
|
|
|
|
|
return dbPrefix + "_" + "eigenschaften"
|
|
|
|
|
}
|
|
|
|
|
func (object *Lp) TableName() string {
|
|
|
|
|
return dbPrefix + "_" + "health"
|
|
|
|
|
}
|
|
|
|
|
func (object *Ap) TableName() string {
|
|
|
|
|
return dbPrefix + "_" + "endurances"
|
|
|
|
|
}
|
|
|
|
|
func (object *B) TableName() string {
|
|
|
|
|
return dbPrefix + "_" + "motionranges"
|
|
|
|
|
}
|
|
|
|
|
func (object *Merkmale) TableName() string {
|
|
|
|
|
return dbPrefix + "_" + "characteristics"
|
|
|
|
|
}
|
|
|
|
|
func (object *Erfahrungsschatz) TableName() string {
|
|
|
|
|
return dbPrefix + "_" + "experiances"
|
|
|
|
|
}
|
|
|
|
|
func (object *Bennies) TableName() string {
|
|
|
|
|
return dbPrefix + "_" + "bennies"
|
|
|
|
|
}
|