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 {
|
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 {
|
2025-07-28 21:35:29 +02:00
|
|
|
BamortCharTrait
|
2024-12-30 16:37:30 +01:00
|
|
|
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
|
2024-12-30 16:37:30 +01:00
|
|
|
}
|
|
|
|
|
|
2024-12-30 17:57:33 +01:00
|
|
|
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 17:57:33 +01:00
|
|
|
}
|
|
|
|
|
|
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
|
|
|
}
|
|
|
|
|
|
2025-01-02 17:38:22 +01:00
|
|
|
func (object *Char) TableName() string {
|
2025-07-28 21:35:29 +02:00
|
|
|
dbPrefix := "char"
|
2025-01-02 17:38:22 +01:00
|
|
|
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-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 {
|
2025-07-28 21:35:29 +02:00
|
|
|
dbPrefix := "char"
|
2025-01-02 17:38:22 +01:00
|
|
|
return dbPrefix + "_" + "eigenschaften"
|
|
|
|
|
}
|
|
|
|
|
func (object *Lp) TableName() string {
|
2025-07-28 21:35:29 +02:00
|
|
|
dbPrefix := "char"
|
2025-01-02 17:38:22 +01:00
|
|
|
return dbPrefix + "_" + "health"
|
|
|
|
|
}
|
|
|
|
|
func (object *Ap) TableName() string {
|
2025-07-28 21:35:29 +02:00
|
|
|
dbPrefix := "char"
|
2025-01-02 17:38:22 +01:00
|
|
|
return dbPrefix + "_" + "endurances"
|
|
|
|
|
}
|
|
|
|
|
func (object *B) TableName() string {
|
2025-07-28 21:35:29 +02:00
|
|
|
dbPrefix := "char"
|
2025-01-02 17:38:22 +01:00
|
|
|
return dbPrefix + "_" + "motionranges"
|
|
|
|
|
}
|
|
|
|
|
func (object *Merkmale) TableName() string {
|
2025-07-28 21:35:29 +02:00
|
|
|
dbPrefix := "char"
|
2025-01-02 17:38:22 +01:00
|
|
|
return dbPrefix + "_" + "characteristics"
|
|
|
|
|
}
|
|
|
|
|
func (object *Erfahrungsschatz) TableName() string {
|
2025-07-28 21:35:29 +02:00
|
|
|
dbPrefix := "char"
|
2025-01-02 17:38:22 +01:00
|
|
|
return dbPrefix + "_" + "experiances"
|
|
|
|
|
}
|
|
|
|
|
func (object *Bennies) TableName() string {
|
2025-07-28 21:35:29 +02:00
|
|
|
dbPrefix := "char"
|
2025-01-02 17:38:22 +01:00
|
|
|
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"
|
|
|
|
|
}
|