2024-12-28 16:30:48 +01:00
package models
2025-07-27 22:25:17 +02:00
import (
"bamort/database"
"fmt"
"gorm.io/gorm"
)
2024-12-29 01:03:36 +01:00
type BamortBase struct {
2024-12-30 07:58:17 +01:00
ID uint ` gorm:"primaryKey" json:"id" `
Name string ` json:"name" `
2024-12-29 01:03:36 +01:00
}
2024-12-29 08:52:04 +01:00
2024-12-29 01:03:36 +01:00
type BamortCharTrait struct {
BamortBase
CharacterID uint ` gorm:"index" json:"character_id" `
2025-08-28 00:46:55 +02:00
UserID uint ` gorm:"index" json:"user_id" `
2024-12-29 01:03:36 +01:00
}
2024-12-29 08:52:04 +01:00
type Magisch struct {
IstMagisch bool ` json:"ist_magisch" `
2024-12-24 19:05:01 +01:00
Abw int ` json:"abw" `
Ausgebrannt bool ` json:"ausgebrannt" `
}
2025-07-27 22:25:17 +02:00
type LookupList struct {
ID uint ` gorm:"primaryKey" json:"id" ` //`gorm:"default:uuid_generate_v3()"` // db func
GameSystem string ` gorm:"column:game_system;index;default:midgard" json:"game_system" `
2025-07-29 19:21:58 +02:00
Name string ` gorm:"type:varchar(255);index" json:"name" `
2025-07-27 22:25:17 +02:00
Beschreibung string ` json:"beschreibung" `
2025-07-29 07:30:51 +02:00
Quelle string ` json:"quelle" ` // Deprecated: Für Rückwärtskompatibilität
SourceID uint ` gorm:"index" json:"source_id,omitempty" ` // Verweis auf strukturierte Quelle
PageNumber int ` json:"page_number,omitempty" ` // Seitenzahl im Quellenbuch
2025-07-27 22:25:17 +02:00
}
2025-07-27 23:31:04 +02:00
type LearnCost struct {
Stufe int ` json:"stufe" `
LE int ` json:"le" `
TE int ` json:"te" `
Ep int ` json:"ep" `
Money int ` json:"money" `
PP int ` json:"pp" `
}
2025-07-27 23:13:04 +02:00
type Skill struct {
2025-07-30 05:40:13 +02:00
ID uint ` gorm:"primaryKey" json:"id" `
GameSystem string ` gorm:"column:game_system;index;default:midgard" json:"game_system" `
2026-01-28 09:20:55 +01:00
GameSystemId uint ` json:"game_system_id,omitempty" `
2025-07-30 05:40:13 +02:00
Name string ` gorm:"type:varchar(255);index" json:"name" `
Beschreibung string ` json:"beschreibung" `
Quelle string ` json:"quelle" ` // Deprecated: Für Rückwärtskompatibilität
SourceID uint ` gorm:"index" json:"source_id,omitempty" ` // Verweis auf strukturierte Quelle
PageNumber int ` json:"page_number,omitempty" ` // Seitenzahl im Quellenbuch
2025-07-27 23:13:04 +02:00
Initialwert int ` gorm:"default:5" json:"initialwert" `
2026-01-04 11:38:13 +01:00
BasisWert int ` gorm:"default:0" json:"basiswert" `
2025-07-27 23:13:04 +02:00
Bonuseigenschaft string ` json:"bonuseigenschaft,omitempty" `
2026-01-12 16:36:35 +01:00
Improvable bool ` json:"improvable" `
InnateSkill bool ` json:"innateskill" `
2025-07-27 23:13:04 +02:00
Category string ` json:"category" `
Difficulty string ` json:"difficulty" `
}
2025-07-27 23:36:47 +02:00
type WeaponSkill struct {
Skill
}
2025-07-27 23:50:19 +02:00
type Spell struct {
2025-08-07 09:41:51 +02:00
ID uint ` gorm:"primaryKey" json:"id" `
GameSystem string ` gorm:"column:game_system;index;default:midgard" json:"game_system" `
2026-01-28 08:51:35 +01:00
GameSystemId uint ` json:"game_system_id,omitempty" `
2025-08-07 09:41:51 +02:00
Name string ` gorm:"type:varchar(255);index" json:"name" `
Beschreibung string ` json:"beschreibung" `
Quelle string ` json:"quelle" ` // Deprecated: Für Rückwärtskompatibilität
SourceID uint ` gorm:"index" json:"source_id,omitempty" ` // Verweis auf strukturierte Quelle
PageNumber int ` json:"page_number,omitempty" ` // Seitenzahl im Quellenbuch
Bonus int ` json:"bonus" `
Stufe int ` json:"level" `
AP string ` gorm:"default:1" json:"ap" `
Art string ` gorm:"default:Gestenzauber" json:"art" `
Zauberdauer string ` gorm:"default:10 sec" json:"zauberdauer" `
Reichweite string ` json:"reichweite" ` // in m
Wirkungsziel string ` json:"wirkungsziel" `
Wirkungsbereich string ` json:"wirkungsbereich" `
Wirkungsdauer string ` json:"wirkungsdauer" `
Ursprung string ` json:"ursprung" `
Category string ` gorm:"default:normal" json:"category" ` // spell_school
LearningCategory string ` gorm:"type:varchar(25);index" json:"learning_category" `
2025-07-27 23:50:19 +02:00
}
2025-07-28 18:56:45 +02:00
type Equipment struct {
2025-07-30 05:40:13 +02:00
ID uint ` gorm:"primaryKey" json:"id" `
GameSystem string ` gorm:"column:game_system;index;default:midgard" json:"game_system" `
Name string ` gorm:"type:varchar(255);index" json:"name" `
Beschreibung string ` json:"beschreibung" `
Quelle string ` json:"quelle" ` // Deprecated: Für Rückwärtskompatibilität
SourceID uint ` gorm:"index" json:"source_id,omitempty" ` // Verweis auf strukturierte Quelle
PageNumber int ` json:"page_number,omitempty" ` // Seitenzahl im Quellenbuch
Gewicht float64 ` json:"gewicht" ` // in kg
Wert float64 ` json:"wert" ` // in Gold
2025-07-28 18:56:45 +02:00
PersonalItem bool ` gorm:"default:false" json:"personal_item" `
}
type Weapon struct {
Equipment
SkillRequired string ` json:"skill_required" `
Damage string ` json:"damage" `
2025-12-20 00:19:20 +01:00
RangeNear int ` json:"range_near" ` // Range in meters for "Nah" (near)
RangeMiddle int ` json:"range_middle" ` // Range in meters for "Mittel" (medium)
RangeFar int ` json:"range_far" ` // Range in meters for "Fern" (far)
2025-07-28 18:56:45 +02:00
}
2025-07-28 18:56:56 +02:00
type Container struct {
Equipment
Tragkraft float64 ` json:"tragkraft" ` // in kg
Volumen float64 ` json:"volumen" ` // in Liter
}
type Transportation struct {
Container
}
2025-07-28 20:55:07 +02:00
type Believe struct {
2025-07-30 05:40:13 +02:00
ID uint ` gorm:"primaryKey" json:"id" `
GameSystem string ` gorm:"column:game_system;index;default:midgard" json:"game_system" `
Name string ` gorm:"type:varchar(255);index" json:"name" `
Beschreibung string ` json:"beschreibung" `
Quelle string ` json:"quelle" ` // Deprecated: Für Rückwärtskompatibilität
SourceID uint ` gorm:"index" json:"source_id,omitempty" ` // Verweis auf strukturierte Quelle
PageNumber int ` json:"page_number,omitempty" ` // Seitenzahl im Quellenbuch
2026-01-27 08:19:18 +01:00
GameSystemId uint ` json:"game_system_id,omitempty" `
2025-07-28 20:55:07 +02:00
}
2026-01-14 18:52:29 +01:00
// MiscLookup represents miscellaneous lookup values like gender, race, origin, etc.
type MiscLookup struct {
2026-01-28 07:44:17 +01:00
ID uint ` gorm:"primaryKey" json:"id" `
GameSystemId uint ` json:"game_system_id,omitempty" `
Key string ` gorm:"column:key;type:varchar(50);index;not null" json:"key" `
Value string ` gorm:"type:varchar(255);not null" json:"value" `
SourceID uint ` json:"source_id,omitempty" `
PageNumber int ` json:"page_number,omitempty" `
2026-01-14 18:52:29 +01:00
}
2025-07-27 23:13:04 +02:00
func ( object * Skill ) TableName ( ) string {
2025-07-28 18:56:45 +02:00
dbPrefix := "gsm"
2025-07-27 23:13:04 +02:00
return dbPrefix + "_" + "skills"
}
func ( stamm * Skill ) Create ( ) error {
2026-01-28 09:20:55 +01:00
if err := database . DB . AutoMigrate ( & Skill { } ) ; err != nil {
return fmt . Errorf ( "failed to migrate skills: %w" , err )
}
stamm . ensureGameSystem ( )
2026-01-12 16:36:35 +01:00
// Set default values for boolean fields if not explicitly set
// Note: We cannot rely on GORM defaults anymore since they interfere with copying operations
if ! stamm . Improvable && ! stamm . InnateSkill {
// If both are false, set Improvable to true as default (most skills are improvable)
stamm . Improvable = true
}
2025-07-27 23:13:04 +02:00
err := database . DB . Transaction ( func ( tx * gorm . DB ) error {
// Save the main character record
if err := tx . Create ( & stamm ) . Error ; err != nil {
return fmt . Errorf ( "failed to save LookupSkill: %w" , err )
}
return nil
} )
return err
}
func ( stamm * Skill ) First ( name string ) error {
2025-08-30 08:59:45 +02:00
if name == "" {
return fmt . Errorf ( "name cannot be empty" )
}
2026-01-28 09:20:55 +01:00
gs := GetGameSystem ( stamm . GameSystemId , stamm . GameSystem )
2026-01-12 16:36:35 +01:00
// Order by ID to get the record with the lowest ID when multiple categories exist
2026-01-28 09:20:55 +01:00
err := database . DB . Where ( "(game_system=? OR game_system_id=?) AND name = ?" , gs . Name , gs . ID , name ) . Order ( "id ASC" ) . First ( & stamm ) . Error
2025-07-27 23:13:04 +02:00
if err != nil {
// Fertigkeit found
return err
}
return nil
}
func ( object * Skill ) FirstId ( value uint ) error {
2026-01-28 09:20:55 +01:00
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
err := database . DB . First ( & object , "(game_system=? OR game_system_id=?) AND id = ?" , gs . Name , gs . ID , value ) . Error
2025-07-27 23:13:04 +02:00
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Skill ) Select ( fieldName string , value string ) ( [ ] Skill , error ) {
2026-01-28 09:20:55 +01:00
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
2025-07-27 23:13:04 +02:00
var skills [ ] Skill
2026-01-28 09:20:55 +01:00
err := database . DB . Find ( & skills , "(game_system=? OR game_system_id=?) AND " + fieldName + " = ?" , gs . Name , gs . ID , value ) . Error
2025-07-27 23:13:04 +02:00
if err != nil {
return nil , err
}
return skills , nil
}
2025-07-31 10:27:18 +02:00
func SelectSkills ( opts ... string ) ( [ ] Skill , error ) {
fieldName := ""
value := ""
2026-01-28 09:20:55 +01:00
gs := GetGameSystem ( 0 , "midgard" )
2025-07-31 10:27:18 +02:00
if len ( opts ) > 1 {
fieldName = opts [ 0 ]
value = opts [ 1 ]
}
2025-07-27 23:13:04 +02:00
var skills [ ] Skill
if fieldName == "" {
2026-01-28 09:20:55 +01:00
err := database . DB . Find ( & skills , "(game_system=? OR game_system_id=?)" , gs . Name , gs . ID ) . Error
2025-07-27 23:13:04 +02:00
if err != nil {
return nil , err
}
} else {
2026-01-28 09:20:55 +01:00
err := database . DB . Find ( & skills , "(game_system=? OR game_system_id=?) AND " + fieldName + " = ?" , gs . Name , gs . ID , value ) . Error
2025-07-27 23:13:04 +02:00
if err != nil {
return nil , err
}
}
return skills , nil
}
func ( object * Skill ) Save ( ) error {
2026-01-28 09:20:55 +01:00
object . ensureGameSystem ( )
2025-07-27 23:13:04 +02:00
err := database . DB . Save ( & object ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Skill ) Delete ( ) error {
result := database . DB . Delete ( & object , object . ID )
if result . Error != nil {
return result . Error
}
if result . RowsAffected == 0 {
return fmt . Errorf ( "no record found with ID %v" , object . ID )
}
return nil
}
func ( object * Skill ) GetSkillCategories ( ) ( [ ] string , error ) {
var categories [ ] string
2026-01-28 09:20:55 +01:00
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
2025-07-27 23:13:04 +02:00
2026-01-12 16:36:35 +01:00
result := database . DB . Model ( & SkillCategory { } ) .
2026-01-28 09:20:55 +01:00
Where ( "game_system = ?" , gs . Name ) .
2026-01-12 16:36:35 +01:00
Pluck ( "name" , & categories )
2025-07-27 23:13:04 +02:00
if result . Error != nil {
return nil , result . Error
}
return categories , nil
}
2025-07-27 23:36:47 +02:00
func ( object * WeaponSkill ) TableName ( ) string {
2025-07-28 18:56:45 +02:00
dbPrefix := "gsm"
2025-07-27 23:36:47 +02:00
return dbPrefix + "_" + "weaponskills"
}
func ( stamm * WeaponSkill ) Create ( ) error {
2026-01-28 09:20:55 +01:00
if err := database . DB . AutoMigrate ( & Skill { } , & WeaponSkill { } ) ; err != nil {
return fmt . Errorf ( "failed to migrate weapon skills: %w" , err )
}
stamm . ensureGameSystem ( )
2026-01-12 16:36:35 +01:00
// Set default values for boolean fields if not explicitly set
if ! stamm . Improvable && ! stamm . InnateSkill {
stamm . Improvable = true
}
2025-07-27 23:36:47 +02:00
err := database . DB . Transaction ( func ( tx * gorm . DB ) error {
// Save the main character record
if err := tx . Create ( & stamm ) . Error ; err != nil {
return fmt . Errorf ( "failed to save LookupWeaponSkill: %w" , err )
}
return nil
} )
return err
}
func ( stamm * WeaponSkill ) First ( name string ) error {
2025-08-30 08:59:45 +02:00
if name == "" {
return fmt . Errorf ( "name cannot be empty" )
}
2026-01-28 09:20:55 +01:00
gs := GetGameSystem ( stamm . GameSystemId , stamm . GameSystem )
2026-01-12 16:36:35 +01:00
// Order by ID to get the record with the lowest ID when multiple categories exist
2026-01-28 09:20:55 +01:00
err := database . DB . Where ( "(game_system=? OR game_system_id=?) AND name = ?" , gs . Name , gs . ID , name ) . Order ( "id ASC" ) . First ( & stamm ) . Error
2025-07-27 23:36:47 +02:00
if err != nil {
// Fertigkeit found
return err
}
return nil
}
func ( object * WeaponSkill ) FirstId ( value uint ) error {
2026-01-28 09:20:55 +01:00
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
err := database . DB . First ( & object , "(game_system=? OR game_system_id=?) AND id = ?" , gs . Name , gs . ID , value ) . Error
2025-07-27 23:36:47 +02:00
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * WeaponSkill ) Save ( ) error {
2026-01-28 09:20:55 +01:00
object . ensureGameSystem ( )
2025-07-27 23:36:47 +02:00
err := database . DB . Save ( & object ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
2025-07-27 23:50:19 +02:00
func ( object * Spell ) TableName ( ) string {
2025-07-28 18:56:45 +02:00
dbPrefix := "gsm"
2025-07-27 23:50:19 +02:00
return dbPrefix + "_" + "spells"
}
func ( stamm * Spell ) Create ( ) error {
2026-01-28 08:51:35 +01:00
stamm . ensureGameSystem ( )
2025-07-27 23:50:19 +02:00
err := database . DB . Transaction ( func ( tx * gorm . DB ) error {
// Save the main character record
if err := tx . Create ( & stamm ) . Error ; err != nil {
return fmt . Errorf ( "failed to save LookupSpell: %w" , err )
}
return nil
} )
return err
}
func ( stamm * Spell ) First ( name string ) error {
2025-08-30 08:59:45 +02:00
if name == "" {
return fmt . Errorf ( "name cannot be empty" )
}
2026-01-28 08:51:35 +01:00
gs := GetGameSystem ( stamm . GameSystemId , stamm . GameSystem )
err := database . DB . First ( & stamm , "(game_system=? OR game_system_id=?) AND name = ?" , gs . Name , gs . ID , name ) . Error
2025-07-27 23:50:19 +02:00
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Spell ) FirstId ( value uint ) error {
2026-01-28 08:51:35 +01:00
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
err := database . DB . First ( & object , "(game_system=? OR game_system_id=?) AND id = ?" , gs . Name , gs . ID , value ) . Error
2025-07-27 23:50:19 +02:00
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Spell ) Save ( ) error {
2026-01-28 08:51:35 +01:00
object . ensureGameSystem ( )
2025-07-27 23:50:19 +02:00
err := database . DB . Save ( & object ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
2025-07-31 22:49:46 +02:00
// SelectSpells gibt alle Zauber zurück, optional gefiltert nach einem Feld
func SelectSpells ( opts ... string ) ( [ ] Spell , error ) {
fieldName := ""
value := ""
gameSystem := "midgard"
if len ( opts ) > 1 {
fieldName = opts [ 0 ]
value = opts [ 1 ]
}
var spells [ ] Spell
if fieldName == "" {
2026-01-12 16:36:35 +01:00
err := database . DB . Find ( & spells , "game_system=?" , gameSystem ) . Error
2025-07-31 22:49:46 +02:00
if err != nil {
return nil , err
}
} else {
2026-01-12 16:36:35 +01:00
err := database . DB . Find ( & spells , "game_system=? AND " + fieldName + " = ?" , gameSystem , value ) . Error
2025-07-31 22:49:46 +02:00
if err != nil {
return nil , err
}
}
return spells , nil
}
2025-07-27 23:50:19 +02:00
func ( object * Spell ) GetSpellCategories ( ) ( [ ] string , error ) {
var categories [ ] string
2026-01-28 08:51:35 +01:00
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
2025-07-27 23:50:19 +02:00
2026-01-12 16:36:35 +01:00
result := database . DB . Model ( & SpellSchool { } ) .
2026-01-28 08:51:35 +01:00
Where ( "game_system = ? OR game_system_id = ?" , gs . Name , gs . ID ) .
2026-01-12 16:36:35 +01:00
Pluck ( "name" , & categories )
2025-07-27 23:50:19 +02:00
if result . Error != nil {
return nil , result . Error
}
return categories , nil
}
2025-07-28 18:56:45 +02:00
2026-01-28 08:51:35 +01:00
func ( object * Spell ) ensureGameSystem ( ) {
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
if object . GameSystemId == 0 {
object . GameSystemId = gs . ID
}
if object . GameSystem == "" {
object . GameSystem = gs . Name
}
}
2026-01-28 09:20:55 +01:00
func ( object * Skill ) ensureGameSystem ( ) {
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
if object . GameSystemId == 0 {
object . GameSystemId = gs . ID
}
if object . GameSystem == "" {
object . GameSystem = gs . Name
}
}
func ( object * Skill ) BeforeCreate ( tx * gorm . DB ) error {
object . ensureGameSystem ( )
return nil
}
func ( object * Skill ) BeforeSave ( tx * gorm . DB ) error {
object . ensureGameSystem ( )
return nil
}
2026-01-28 08:51:35 +01:00
func ( object * Spell ) BeforeCreate ( tx * gorm . DB ) error {
object . ensureGameSystem ( )
return nil
}
func ( object * Spell ) BeforeSave ( tx * gorm . DB ) error {
object . ensureGameSystem ( )
return nil
}
2025-07-28 18:56:45 +02:00
func ( object * Equipment ) TableName ( ) string {
dbPrefix := "gsm"
return dbPrefix + "_" + "equipments"
}
func ( stamm * Equipment ) Create ( ) error {
gameSystem := "midgard"
stamm . GameSystem = gameSystem
err := database . DB . Transaction ( func ( tx * gorm . DB ) error {
// Save the main character record
if err := tx . Create ( & stamm ) . Error ; err != nil {
return fmt . Errorf ( "failed to save LookupEquipment: %w" , err )
}
return nil
} )
return err
}
func ( stamm * Equipment ) First ( name string ) error {
2025-08-30 08:59:45 +02:00
if name == "" {
return fmt . Errorf ( "name cannot be empty" )
}
2025-07-28 18:56:45 +02:00
gameSystem := "midgard"
err := database . DB . First ( & stamm , "game_system=? AND name = ?" , gameSystem , name ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Equipment ) FirstId ( value uint ) error {
gameSystem := "midgard"
err := database . DB . First ( & object , "game_system=? AND id = ?" , gameSystem , value ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Equipment ) Save ( ) error {
err := database . DB . Save ( & object ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Weapon ) TableName ( ) string {
dbPrefix := "gsm"
return dbPrefix + "_" + "weapons"
}
2025-12-20 00:19:20 +01:00
// IsRanged returns true if the weapon has at least one range value > 0
func ( w * Weapon ) IsRanged ( ) bool {
return w . RangeNear > 0 || w . RangeMiddle > 0 || w . RangeFar > 0
}
2025-07-28 18:56:45 +02:00
func ( stamm * Weapon ) Create ( ) error {
gameSystem := "midgard"
stamm . GameSystem = gameSystem
err := database . DB . Transaction ( func ( tx * gorm . DB ) error {
// Save the main character record
if err := tx . Create ( & stamm ) . Error ; err != nil {
return fmt . Errorf ( "failed to save LookupEquipment: %w" , err )
}
return nil
} )
return err
}
func ( stamm * Weapon ) First ( name string ) error {
2025-08-30 08:59:45 +02:00
if name == "" {
return fmt . Errorf ( "name cannot be empty" )
}
2025-07-28 18:56:45 +02:00
gameSystem := "midgard"
err := database . DB . First ( & stamm , "game_system=? AND name = ?" , gameSystem , name ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Weapon ) FirstId ( id uint ) error {
gameSystem := "midgard"
err := database . DB . First ( & object , "game_system=? AND id = ?" , gameSystem , id ) . Error
if err != nil {
return err
}
return nil
}
func ( object * Weapon ) Save ( ) error {
err := database . DB . Save ( & object ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
2025-07-28 18:56:56 +02:00
func ( object * Container ) TableName ( ) string {
dbPrefix := "gsm"
return dbPrefix + "_" + "containers"
}
func ( stamm * Container ) Create ( ) error {
gameSystem := "midgard"
stamm . GameSystem = gameSystem
err := database . DB . Transaction ( func ( tx * gorm . DB ) error {
// Save the main character record
if err := tx . Create ( & stamm ) . Error ; err != nil {
return fmt . Errorf ( "failed to save LookupContainer: %w" , err )
}
return nil
} )
return err
}
func ( stamm * Container ) First ( name string ) error {
2025-08-30 08:59:45 +02:00
if name == "" {
return fmt . Errorf ( "name cannot be empty" )
}
2025-07-28 18:56:56 +02:00
gameSystem := "midgard"
err := database . DB . First ( & stamm , "game_system=? AND name = ?" , gameSystem , name ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Container ) FirstId ( value uint ) error {
gameSystem := "midgard"
err := database . DB . First ( & object , "game_system=? AND id = ?" , gameSystem , value ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Container ) Save ( ) error {
err := database . DB . Save ( & object ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Transportation ) TableName ( ) string {
dbPrefix := "gsm"
return dbPrefix + "_" + "transportations"
}
func ( stamm * Transportation ) Create ( ) error {
gameSystem := "midgard"
stamm . GameSystem = gameSystem
err := database . DB . Transaction ( func ( tx * gorm . DB ) error {
// Save the main character record
if err := tx . Create ( & stamm ) . Error ; err != nil {
return fmt . Errorf ( "failed to save Lookup: %w" , err )
}
return nil
} )
return err
}
func ( object * Transportation ) FirstId ( value uint ) error {
gameSystem := "midgard"
err := database . DB . First ( & object , "game_system=? AND id = ?" , gameSystem , value ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( stamm * Transportation ) First ( name string ) error {
2025-08-30 08:59:45 +02:00
if name == "" {
return fmt . Errorf ( "name cannot be empty" )
}
2025-07-28 18:56:56 +02:00
gameSystem := "midgard"
err := database . DB . First ( & stamm , "game_system=? AND name = ?" , gameSystem , name ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
func ( object * Transportation ) Save ( ) error {
err := database . DB . Save ( & object ) . Error
if err != nil {
// zauber found
return err
}
return nil
}
2025-07-28 20:55:07 +02:00
func ( object * Believe ) TableName ( ) string {
dbPrefix := "gsm"
return dbPrefix + "_" + "believes"
}
2026-01-28 07:44:17 +01:00
func ( object * Believe ) ensureGameSystem ( ) {
gs := GetGameSystem ( object . GameSystemId , "" )
object . GameSystemId = gs . ID
object . GameSystem = gs . Name
}
func ( object * Believe ) BeforeCreate ( tx * gorm . DB ) error {
object . ensureGameSystem ( )
return nil
}
func ( object * Believe ) BeforeSave ( tx * gorm . DB ) error {
object . ensureGameSystem ( )
return nil
}
2026-01-27 08:19:18 +01:00
func ( object * Believe ) Create ( ) error {
2025-07-28 20:55:07 +02:00
err := database . DB . Transaction ( func ( tx * gorm . DB ) error {
// Save the main character record
2026-01-27 08:19:18 +01:00
if err := tx . Create ( & object ) . Error ; err != nil {
2025-07-28 20:55:07 +02:00
return fmt . Errorf ( "failed to save Lookup: %w" , err )
}
return nil
} )
return err
}
2026-01-28 07:44:17 +01:00
func ( object * Believe ) Save ( ) error {
2026-01-28 05:39:51 +01:00
2026-01-28 07:44:17 +01:00
err := database . DB . Save ( & object ) . Error
2025-07-28 20:55:07 +02:00
if err != nil {
// zauber found
return err
}
return nil
}
2026-01-28 07:44:17 +01:00
func ( object * Believe ) FirstId ( value uint ) error {
2026-01-28 05:39:51 +01:00
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
object . GameSystemId = gs . ID
object . GameSystem = gs . Name
2026-01-28 07:44:17 +01:00
err := database . DB . First ( & object , "(game_system=? OR game_system_id=?) AND id = ?" , object . GameSystem , object . GameSystemId , value ) . Error
2025-07-28 20:55:07 +02:00
if err != nil {
// zauber found
return err
}
return nil
}
2026-01-28 07:44:17 +01:00
func ( object * Believe ) First ( name string ) error {
if name == "" {
return fmt . Errorf ( "name cannot be empty" )
}
2026-01-28 05:39:51 +01:00
gs := GetGameSystem ( object . GameSystemId , object . GameSystem )
object . GameSystemId = gs . ID
object . GameSystem = gs . Name
2026-01-28 07:44:17 +01:00
err := database . DB . First ( & object , "(game_system=? OR game_system_id=?) AND name = ?" , object . GameSystem , object . GameSystemId , name ) . Error
2025-07-28 20:55:07 +02:00
if err != nil {
// zauber found
return err
}
return nil
}
2025-08-09 06:46:16 +02:00
// GetBelievesByActiveSources gibt Glaubensrichtungen nach aktiven Quellen zurück
func GetBelievesByActiveSources ( gameSystem string ) ( [ ] Believe , error ) {
var believes [ ] Believe
2026-01-28 05:39:51 +01:00
gs := GetGameSystem ( 0 , gameSystem )
2026-01-28 21:29:53 +01:00
if gs == nil {
// return empty slice if no valid game system found
return believes , fmt . Errorf ( "No GameSystem ID or Name found for %s" , gameSystem )
}
2026-01-27 08:19:18 +01:00
if gs . ID == 0 {
2026-01-28 05:39:51 +01:00
// return empty slice if no valid game system found
return believes , fmt . Errorf ( "No GameSystem ID or Name found for %s" , gameSystem )
2026-01-27 08:19:18 +01:00
}
2025-08-09 06:46:16 +02:00
err := database . DB .
2026-01-12 16:36:35 +01:00
Joins ( "LEFT JOIN gsm_lit_sources ON gsm_believes.source_id = gsm_lit_sources.id" ) .
2026-01-27 08:19:18 +01:00
Where ( "(gsm_believes.game_system = ? or gsm_believes.game_system_id=?) AND (gsm_lit_sources.is_active = ? OR gsm_believes.source_id IS NULL)" , gs . Name , gs . ID , true ) .
2025-08-09 06:46:16 +02:00
Order ( "gsm_believes.name ASC" ) .
Find ( & believes ) . Error
return believes , err
}
2026-01-14 18:52:29 +01:00
2026-01-28 07:44:17 +01:00
func ( object * MiscLookup ) ensureGameSystem ( ) {
gs := GetGameSystem ( object . GameSystemId , "" )
object . GameSystemId = gs . ID
}
func ( object * MiscLookup ) BeforeCreate ( tx * gorm . DB ) error {
object . ensureGameSystem ( )
return nil
}
func ( object * MiscLookup ) BeforeSave ( tx * gorm . DB ) error {
object . ensureGameSystem ( )
return nil
}
2026-01-14 18:52:29 +01:00
// TableName specifies the table name for MiscLookup
func ( MiscLookup ) TableName ( ) string {
return "gsm_misc"
}
2026-01-28 05:39:51 +01:00
func GetGameSystem ( id uint , name string ) * GameSystem {
gs := & GameSystem { }
if id == 0 && name == "" {
gs . GetDefault ( )
return gs
}
if id == 0 && name != "" {
gs . FirstByCode ( name )
if gs . ID == 0 {
gs . FirstByName ( name )
}
2026-01-28 08:51:35 +01:00
if gs . ID == 0 {
2026-01-28 21:29:53 +01:00
//gs.GetDefault()
return nil
2026-01-28 08:51:35 +01:00
}
2026-01-28 05:39:51 +01:00
return gs
}
gs . FirstByID ( uint ( id ) )
2026-01-28 08:51:35 +01:00
if gs . ID == 0 && name != "" {
gs . Name = name
}
2026-01-28 05:39:51 +01:00
return gs
}