diff --git a/backend/character/handlers_test.go b/backend/character/handlers_test.go index e17ad03..50e927c 100644 --- a/backend/character/handlers_test.go +++ b/backend/character/handlers_test.go @@ -1141,8 +1141,8 @@ func TestSearchBeliefs(t *testing.T) { //database.DB.Exec("INSERT OR IGNORE INTO game_systems(code,name,description,is_active,created_at,modified_at) VALUES (?,?,?,?,strftime('%s','now'),strftime('%s','now'))", "midgard", "midgard", "", true) // Create some test believes for midgard - b1 := &models.Believe{GameSystem: "midgard", Name: "TestFaithOne", SourceID: 1} - b2 := &models.Believe{GameSystem: "midgard", Name: "OtherFaith", SourceID: 1} + b1 := &models.Believe{GameSystemId: 1, Name: "TestFaithOne", SourceID: 1} + b2 := &models.Believe{GameSystemId: 1, Name: "OtherFaith", SourceID: 1} err = b1.Create() assert.NoError(t, err) err = b2.Create() diff --git a/backend/character/learn_spell_test.go b/backend/character/learn_spell_test.go index f75f187..adf4178 100644 --- a/backend/character/learn_spell_test.go +++ b/backend/character/learn_spell_test.go @@ -40,7 +40,7 @@ func TestLearnSpell(t *testing.T) { } } else { // Create minimal spell entry if missing - spell = models.Spell{GameSystem: "midgard", Name: "Befestigen", Stufe: 1, Category: "Zauber", LearningCategory: "Zauber"} + spell = models.Spell{GameSystemId: 1, Name: "Befestigen", Stufe: 1, Category: "Zauber", LearningCategory: "Zauber"} _ = spell.Create() } diff --git a/backend/gsmaster/export_import_test.go b/backend/gsmaster/export_import_test.go index 86f0943..adcc8ab 100644 --- a/backend/gsmaster/export_import_test.go +++ b/backend/gsmaster/export_import_test.go @@ -175,10 +175,10 @@ func TestExportImportSources(t *testing.T) { // Create test source source := models.Source{ - Code: "ARK", - Name: "Arkanum", - GameSystem: "midgard", - IsActive: true, + Code: "ARK", + Name: "Arkanum", + GameSystemId: 1, + IsActive: true, } database.DB.Create(&source) @@ -217,9 +217,9 @@ func TestExportImportSkillCategoryDifficulty(t *testing.T) { // Create dependencies source := getOrCreateSource("KOD", "Kodex") skill := models.Skill{ - Name: "Tanzen", - GameSystem: "midgard", - SourceID: source.ID, + Name: "Tanzen", + GameSystemId: 1, + SourceID: source.ID, } if err := skill.Create(); err != nil { t.Fatalf("failed to create skill: %v", err) @@ -274,9 +274,9 @@ func TestExportImportSkillCategories(t *testing.T) { // Create test data source := getOrCreateSource("TEST_SC", "Test Source") category := models.SkillCategory{ - Name: "TestCategory", - GameSystem: "midgard", - SourceID: source.ID, + Name: "TestCategory", + GameSystemId: 1, + SourceID: source.ID, } database.DB.Create(&category) @@ -320,8 +320,8 @@ func TestExportImportSkillDifficulties(t *testing.T) { // Create test data difficulty := models.SkillDifficulty{ - Name: "TestDifficulty", - GameSystem: "midgard", + Name: "TestDifficulty", + GameSystemId: 1, } database.DB.Create(&difficulty) @@ -436,10 +436,10 @@ func TestExportImportAll(t *testing.T) { // Create test data source := getOrCreateSource("TEST_ALL", "Test All Source") - category := models.SkillCategory{Name: "AllCategory", GameSystem: "midgard", SourceID: source.ID} + category := models.SkillCategory{Name: "AllCategory", GameSystemId: 1, SourceID: source.ID} database.DB.Create(&category) - difficulty := models.SkillDifficulty{Name: "AllDifficulty", GameSystem: "midgard"} + difficulty := models.SkillDifficulty{Name: "AllDifficulty", GameSystemId: 1} database.DB.Create(&difficulty) skill := models.Skill{ @@ -453,10 +453,10 @@ func TestExportImportAll(t *testing.T) { } spell := models.Spell{ - Name: "AllSpell", - GameSystem: "midgard", - SourceID: source.ID, - Stufe: 2, + Name: "AllSpell", + GameSystemId: 1, + SourceID: source.ID, + Stufe: 2, } database.DB.Create(&spell) @@ -1159,15 +1159,15 @@ func TestExportImportClassCategoryLearningPoints(t *testing.T) { // Create test data with unique names class := models.CharacterClass{ - Code: "TEST_KRI", - Name: "Test-Krieger", - GameSystem: "midgard", + Code: "TEST_KRI", + Name: "Test-Krieger", + GameSystemId: 1, } database.DB.Create(&class) category := models.SkillCategory{ - Name: "Test-Kampf", - GameSystem: "midgard", + Name: "Test-Kampf", + GameSystemId: 1, } database.DB.Create(&category) @@ -1208,9 +1208,9 @@ func TestExportImportClassSpellPoints(t *testing.T) { // Create test data with unique name class := models.CharacterClass{ - Code: "TEST_MAG", - Name: "Test-Magier", - GameSystem: "midgard", + Code: "TEST_MAG", + Name: "Test-Magier", + GameSystemId: 1, } database.DB.Create(&class) @@ -1250,9 +1250,9 @@ func TestExportImportClassTypicalSkills(t *testing.T) { // Create test data with unique names class := models.CharacterClass{ - Code: "TEST_WAL", - Name: "Test-Waldläufer", - GameSystem: "midgard", + Code: "TEST_WAL", + Name: "Test-Waldläufer", + GameSystemId: 1, } database.DB.Create(&class) @@ -1307,16 +1307,16 @@ func TestExportImportClassTypicalSpells(t *testing.T) { // Create test data with unique names class := models.CharacterClass{ - Code: "TEST_DRU", - Name: "Test-Druide", - GameSystem: "midgard", + Code: "TEST_DRU", + Name: "Test-Druide", + GameSystemId: 1, } database.DB.Create(&class) spell := models.Spell{ - Name: "Test-Heilen", - GameSystem: "midgard", - Stufe: 1, + Name: "Test-Heilen", + GameSystemId: 1, + Stufe: 1, } database.DB.Create(&spell) diff --git a/backend/gsmaster/gsm_model_test.go b/backend/gsmaster/gsm_model_test.go index d992ec5..7733ce7 100644 --- a/backend/gsmaster/gsm_model_test.go +++ b/backend/gsmaster/gsm_model_test.go @@ -117,8 +117,8 @@ func TestSkill_First(t *testing.T) { { name: "existing skill", skill: &models.Skill{ - Name: "Test Skill", - GameSystem: "midgard", + Name: "Test Skill", + GameSystemId: 1, }, findName: "Test Skill", wantErr: false, @@ -173,8 +173,8 @@ func TestSkill_FirstId(t *testing.T) { { name: "existing skill", skill: &models.Skill{ - Name: "Test Skill", - GameSystem: "midgard", + Name: "Test Skill", + GameSystemId: 1, }, findId: 1, wantErr: false, @@ -285,8 +285,8 @@ func TestSkill_Delete(t *testing.T) { { name: "delete existing skill", skill: &models.Skill{ - Name: "Test Skill", - GameSystem: "midgard", + Name: "Test Skill", + GameSystemId: 1, }, wantErr: false, }, @@ -339,12 +339,12 @@ func TestSkill_GetSkillCategories(t *testing.T) { // Note: GetSkillCategories() reads from gsm_skill_categories table, not from skills testCategories := []*models.SkillCategory{ { - Name: "Category1", - GameSystem: "midgard", + Name: "Category1", + GameSystemId: 1, }, { - Name: "Category2", - GameSystem: "midgard", + Name: "Category2", + GameSystemId: 1, }, } diff --git a/backend/gsmaster/learning_costs_enhancement.go b/backend/gsmaster/learning_costs_enhancement.go index fea7b5b..dc5afba 100644 --- a/backend/gsmaster/learning_costs_enhancement.go +++ b/backend/gsmaster/learning_costs_enhancement.go @@ -104,8 +104,8 @@ func linkExistingSpellsToSchools() error { if err := spellSchool.FirstByName(spell.Category); err != nil { // Zauberschule existiert nicht, erstelle sie newSchool := models.SpellSchool{ - Name: spell.Category, - GameSystem: "midgard", + Name: spell.Category, + GameSystemId: 1, } if err := newSchool.Create(); err != nil { log.Printf("Warning: Failed to create spell school %s for spell %s: %v", spell.Category, spell.Name, err) @@ -225,11 +225,12 @@ func findSkillInLearningData(skillName string) (string, string) { func createSkillCategoryLink(skillID uint, skillName, categoryName, difficultyName string) error { // Hole oder erstelle die Kategorie var skillCategory models.SkillCategory + gs := GetGameSystem(0, "midgard") if err := skillCategory.FirstByName(categoryName); err != nil { // Kategorie existiert nicht, erstelle sie skillCategory = models.SkillCategory{ - Name: categoryName, - GameSystem: "midgard", + Name: categoryName, + GameSystemId: gs.ID, } if err := skillCategory.Create(); err != nil { return fmt.Errorf("failed to create skill category %s: %w", categoryName, err) @@ -242,8 +243,8 @@ func createSkillCategoryLink(skillID uint, skillName, categoryName, difficultyNa if err := skillDifficulty.FirstByName(difficultyName); err != nil { // Schwierigkeit existiert nicht, erstelle sie skillDifficulty = models.SkillDifficulty{ - Name: difficultyName, - GameSystem: "midgard", + Name: difficultyName, + GameSystemId: gs.ID, } if err := skillDifficulty.Create(); err != nil { return fmt.Errorf("failed to create skill difficulty %s: %w", difficultyName, err) diff --git a/backend/gsmaster/learning_costs_migration.go b/backend/gsmaster/learning_costs_migration.go index 4868d22..7f2067d 100644 --- a/backend/gsmaster/learning_costs_migration.go +++ b/backend/gsmaster/learning_costs_migration.go @@ -157,13 +157,14 @@ func migrateCharacterClasses() error { "PS": "Priester Streiter", "Sc": "Schamane", } + gs := GetGameSystem(0, "") for code, name := range characterClasses { class := models.CharacterClass{ - Code: code, - Name: name, - SourceID: kodSource.ID, - GameSystem: "midgard", + Code: code, + Name: name, + SourceID: kodSource.ID, + GameSystemId: gs.ID, } // Prüfe ob die Klasse bereits existiert @@ -193,6 +194,7 @@ func migrateSkillCategories() error { "Alltag", "Freiland", "Halbwelt", "Kampf", "Körper", "Sozial", "Unterwelt", "Waffen", "Wissen", "Schilde und Parierwaffen", } + gs := GetGameSystem(0, "") for _, categoryName := range categories { sourceID := kodSource.ID @@ -206,9 +208,9 @@ func migrateSkillCategories() error { } category := models.SkillCategory{ - Name: categoryName, - SourceID: sourceID, - GameSystem: "midgard", + Name: categoryName, + SourceID: sourceID, + GameSystemId: gs.ID, } // Prüfe ob die Kategorie bereits existiert @@ -228,11 +230,12 @@ func migrateSkillCategories() error { // migrateSkillDifficulties erstellt Schwierigkeitsgrade func migrateSkillDifficulties() error { difficulties := []string{"leicht", "normal", "schwer", "sehr schwer"} + gs := GetGameSystem(0, "") for _, difficultyName := range difficulties { difficulty := models.SkillDifficulty{ - Name: difficultyName, - GameSystem: "midgard", + Name: difficultyName, + GameSystemId: gs.ID, } // Prüfe ob die Schwierigkeit bereits existiert @@ -261,6 +264,7 @@ func migrateSpellSchools() error { if err := arkSource.FirstByCode("ARK"); err != nil { return fmt.Errorf("ARK source not found: %w", err) } + gs := GetGameSystem(0, "") schools := map[string]uint{ // Basis-Zauberschulen (Kodex) @@ -279,9 +283,9 @@ func migrateSpellSchools() error { for schoolName, sourceID := range schools { school := models.SpellSchool{ - Name: schoolName, - SourceID: sourceID, - GameSystem: "midgard", + Name: schoolName, + SourceID: sourceID, + GameSystemId: gs.ID, } // Prüfe ob die Schule bereits existiert @@ -371,11 +375,12 @@ func migrateClassSpellSchoolEPCosts() error { // migrateSpellLevelLECosts migriert LE-Kosten pro Zauber-Level func migrateSpellLevelLECosts() error { + gs := GetGameSystem(0, "") for level, leCost := range learningCostsData.SpellLEPerLevel { cost := models.SpellLevelLECost{ - Level: level, - LERequired: leCost, - GameSystem: "midgard", + Level: level, + LERequired: leCost, + GameSystemId: gs.ID, } if err := cost.Create(); err != nil { diff --git a/backend/gsmaster/skill_enhanced_handlers_test.go b/backend/gsmaster/skill_enhanced_handlers_test.go index b380183..1cb0f92 100644 --- a/backend/gsmaster/skill_enhanced_handlers_test.go +++ b/backend/gsmaster/skill_enhanced_handlers_test.go @@ -24,10 +24,10 @@ func getOrCreateSource(code, name string) models.Source { var source models.Source if err := database.DB.Where("code = ?", code).First(&source).Error; err != nil { source = models.Source{ - Code: code, - Name: name, - GameSystem: "midgard", - IsActive: true, + Code: code, + Name: name, + GameSystemId: 1, + IsActive: true, } database.DB.Create(&source) } @@ -39,9 +39,9 @@ func getOrCreateCategory(name string, sourceID uint) models.SkillCategory { var category models.SkillCategory if err := database.DB.Where("name = ? AND game_system = ?", name, "midgard").First(&category).Error; err != nil { category = models.SkillCategory{ - Name: name, - GameSystem: "midgard", - SourceID: sourceID, + Name: name, + GameSystemId: 1, + SourceID: sourceID, } database.DB.Create(&category) } @@ -53,8 +53,8 @@ func getOrCreateDifficulty(name string) models.SkillDifficulty { var difficulty models.SkillDifficulty if err := database.DB.Where("name = ? AND game_system = ?", name, "midgard").First(&difficulty).Error; err != nil { difficulty = models.SkillDifficulty{ - Name: name, - GameSystem: "midgard", + Name: name, + GameSystemId: 1, } database.DB.Create(&difficulty) } diff --git a/backend/importer/exporter_test.go b/backend/importer/exporter_test.go index 506ec03..f0abd2f 100644 --- a/backend/importer/exporter_test.go +++ b/backend/importer/exporter_test.go @@ -25,7 +25,7 @@ func TestExportChar2VTT(t *testing.T) { assert.NoError(t, err, "Expected no error when exporting char") // Basic validations - assert.Equal(t, char.UserID, 1) + assert.Equal(t, char.UserID, uint(1)) assert.Equal(t, char.Name, exportedChar.Name) assert.Equal(t, char.Rasse, exportedChar.Rasse) assert.Equal(t, char.Typ, exportedChar.Typ) diff --git a/backend/importer/importer.go b/backend/importer/importer.go index 2b8ba48..78c9ff2 100644 --- a/backend/importer/importer.go +++ b/backend/importer/importer.go @@ -36,10 +36,10 @@ func lookupSourceID(sourceCode string) (uint, error) { if err := source.FirstByCode(sourceCode); err != nil { // Source not found, create it automatically newSource := models.Source{ - Code: sourceCode, - Name: sourceCode, // Use code as name initially - GameSystem: "midgard", // Default game system - IsActive: true, // Set as active by default + Code: sourceCode, + Name: sourceCode, // Use code as name initially + GameSystemId: models.GetGameSystem(0, "").ID, // Default game system + IsActive: true, // Set as active by default } if createErr := newSource.Create(); createErr != nil { @@ -63,7 +63,8 @@ func ImportChar(char CharacterImport) (*models.Char, error) { func CheckSkill(fertigkeit *Fertigkeit, autocreate bool) (*models.Skill, error) { stammF := models.Skill{} //err := database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error - err := stammF.First(fertigkeit.Name) + gs := models.GetGameSystem(0, "midgard") + err := stammF.FirstwGS(fertigkeit.Name, gs.ID) if err == nil { // Fertigkeit found return &stammF, nil @@ -71,7 +72,7 @@ func CheckSkill(fertigkeit *Fertigkeit, autocreate bool) (*models.Skill, error) if !autocreate { return nil, fmt.Errorf("does not exist in Fertigkeit importer") } - stammF.GameSystem = "midgard" + stammF.GameSystemId = models.GetGameSystem(0, "midgard").ID stammF.Name = fertigkeit.Name if stammF.Name != "Sprache" { stammF.Beschreibung = fertigkeit.Beschreibung @@ -92,7 +93,7 @@ func CheckSkill(fertigkeit *Fertigkeit, autocreate bool) (*models.Skill, error) } //err = database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error - err = stammF.First(fertigkeit.Name) + err = stammF.FirstwGS(fertigkeit.Name, gs.ID) if err != nil { // Fertigkeit found return nil, err @@ -104,7 +105,8 @@ func CheckSpell(zauber *Zauber, autocreate bool) (*models.Spell, error) { stammF := models.Spell{} //err := database.DB.First(&stammF, "system=? AND name = ?", gameSystem, zauber.Name).Error - err := stammF.First(zauber.Name) + gs := models.GetGameSystem(0, "midgard") + err := stammF.FirstwGS(zauber.Name, gs.ID) if err == nil { // zauber found return &stammF, nil @@ -112,7 +114,7 @@ func CheckSpell(zauber *Zauber, autocreate bool) (*models.Spell, error) { if !autocreate { return nil, fmt.Errorf("does not exist in zauber importer") } - stammF.GameSystem = "midgard" + stammF.GameSystemId = models.GetGameSystem(0, "midgard").ID stammF.Name = zauber.Name stammF.Beschreibung = zauber.Beschreibung stammF.AP = "1" @@ -129,7 +131,7 @@ func CheckSpell(zauber *Zauber, autocreate bool) (*models.Spell, error) { } //err = database.DB.First(&stammF, "system=? AND name = ?", gameSystem, zauber.Name).Error - err = stammF.First(zauber.Name) + err = stammF.FirstwGS(zauber.Name, gs.ID) if err != nil { // spell found return nil, err @@ -177,7 +179,7 @@ func ImportCsv2Spell(filepath string) error { // Create spell struct spell := models.Spell{ - GameSystem: "midgard", // Default value + GameSystemId: models.GetGameSystem(0, "midgard").ID, // Default value } // Map CSV fields to struct fields @@ -200,7 +202,8 @@ func ImportCsv2Spell(filepath string) error { } } if idx, exists := fieldMap["game_system"]; exists && idx < len(record) && strings.TrimSpace(record[idx]) != "" { - spell.GameSystem = strings.ToLower(strings.TrimSpace(record[idx])) + //spell.GameSystem = strings.ToLower(strings.TrimSpace(record[idx])) + spell.GameSystemId = models.GetGameSystem(0, strings.ToLower(strings.TrimSpace(record[idx]))).ID } /* if idx, exists := fieldMap["source_id"]; exists && idx < len(record) { @@ -262,7 +265,7 @@ func ImportCsv2Spell(filepath string) error { // Try to find existing spell by name existingSpell := models.Spell{} - err := existingSpell.First(spell.Name) + err := existingSpell.FirstwGS(spell.Name, spell.GameSystemId) if err == nil { // Spell exists, update it diff --git a/backend/importer/importer_test.go b/backend/importer/importer_test.go index f828110..adef72c 100644 --- a/backend/importer/importer_test.go +++ b/backend/importer/importer_test.go @@ -27,9 +27,9 @@ func NoT_estImportCsv2Spell(t *testing.T) { /* // Create test source data testSources := []models.Source{ - {Code: "ARK", Name: "Arkanum", GameSystem: "midgard"}, - {Code: "MYS", Name: "Mysterium", GameSystem: "midgard"}, - {Code: "KOD", Name: "Kodex", GameSystem: "midgard"}, + {Code: "ARK", Name: "Arkanum", GameSystemId: 1}, + {Code: "MYS", Name: "Mysterium", GameSystemId: 1}, + {Code: "KOD", Name: "Kodex", GameSystemId: 1}, } for _, source := range testSources { source.Create() @@ -216,7 +216,7 @@ func NoT_estImportSpellCSVHandler(t *testing.T) { models.MigrateStructure() // Create test source - testSource := models.Source{Code: "ARK", Name: "Arkanum", GameSystem: "midgard"} + testSource := models.Source{Code: "ARK", Name: "Arkanum", GameSystemId: 1} testSource.Create() // Setup Gin in test mode diff --git a/backend/maintenance/skill_migration_test.go b/backend/maintenance/skill_migration_test.go index 6c87eef..0d67de9 100644 --- a/backend/maintenance/skill_migration_test.go +++ b/backend/maintenance/skill_migration_test.go @@ -34,10 +34,10 @@ func TestMigrateSkillCategoriesToRelations(t *testing.T) { // Create a test source - use unique code to avoid conflicts source := models.Source{ - Code: "TSTMIG1", - Name: "Test Migration Source", - GameSystem: "midgard", - IsActive: true, + Code: "TSTMIG1", + Name: "Test Migration Source", + GameSystemId: 1, + IsActive: true, } if err := testDB.Create(&source).Error; err != nil { t.Fatalf("Failed to create test source: %v", err) @@ -177,7 +177,7 @@ func TestMigrateSkillCategoryDifficulty_NoCategory(t *testing.T) { source = models.Source{ Code: "TSTMIG2", Name: "Test Migration Source 2", - GameSystem: "midgard", + GameSystemId: 1, IsActive: true, } if err := testDB.Create(&source).Error; err != nil { diff --git a/backend/models/database_test.go b/backend/models/database_test.go index f3ebd84..85ab956 100644 --- a/backend/models/database_test.go +++ b/backend/models/database_test.go @@ -386,10 +386,10 @@ func TestMigrationWorkflow_StructureIntegrity(t *testing.T) { // Test learning category with a source testSource := &Source{ - Code: "TEST", - Name: "Test Source", - GameSystem: "midgard", - IsActive: true, + Code: "TEST", + Name: "Test Source", + GameSystemId: 1, + IsActive: true, } err = database.DB.Create(testSource).Error assert.NoError(t, err, "Should be able to create a source") diff --git a/backend/models/model_gsmaster.go b/backend/models/model_gsmaster.go index caa18ec..0547158 100644 --- a/backend/models/model_gsmaster.go +++ b/backend/models/model_gsmaster.go @@ -174,12 +174,11 @@ func (stamm *Skill) Create() error { return err } -func (stamm *Skill) First(name string) error { +func (stamm *Skill) FirstwGS(name string, gameSystemId uint) error { if name == "" { return fmt.Errorf("name cannot be empty") } - gs := GetGameSystem(stamm.GameSystemId, stamm.GameSystem) - // Order by ID to get the record with the lowest ID when multiple categories exist + gs := GetGameSystem(gameSystemId, stamm.GameSystem) err := database.DB.Where("(game_system=? OR game_system_id=?) AND name = ?", gs.Name, gs.ID, name).Order("id ASC").First(&stamm).Error if err != nil { // Fertigkeit found @@ -188,6 +187,14 @@ func (stamm *Skill) First(name string) error { return nil } +func (stamm *Skill) First(name string) error { + if name == "" { + return fmt.Errorf("name cannot be empty") + } + gs := GetGameSystem(stamm.GameSystemId, stamm.GameSystem) + return stamm.FirstwGS(name, gs.ID) +} + func (object *Skill) FirstId(value uint) error { 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 @@ -349,11 +356,11 @@ func (stamm *Spell) Create() error { return err } -func (stamm *Spell) First(name string) error { +func (stamm *Spell) FirstwGS(name string, gameSystemId uint) error { if name == "" { return fmt.Errorf("name cannot be empty") } - gs := GetGameSystem(stamm.GameSystemId, stamm.GameSystem) + gs := GetGameSystem(gameSystemId, stamm.GameSystem) err := database.DB.First(&stamm, "(game_system=? OR game_system_id=?) AND name = ?", gs.Name, gs.ID, name).Error if err != nil { // zauber found @@ -362,6 +369,14 @@ func (stamm *Spell) First(name string) error { return nil } +func (stamm *Spell) First(name string) error { + if name == "" { + return fmt.Errorf("name cannot be empty") + } + gs := GetGameSystem(stamm.GameSystemId, stamm.GameSystem) + return stamm.FirstwGS(name, gs.ID) +} + func (object *Spell) FirstId(value uint) error { 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 diff --git a/backend/models/model_gsmaster_test.go b/backend/models/model_gsmaster_test.go index a2f3570..d8945b2 100644 --- a/backend/models/model_gsmaster_test.go +++ b/backend/models/model_gsmaster_test.go @@ -288,15 +288,15 @@ func TestSkill_GetSkillCategories(t *testing.T) { // Create test skill categories in the lookup table cat1 := &SkillCategory{ - GameSystem: "midgard", - Name: "TestCategory1", + GameSystemId: 1, + Name: "TestCategory1", } err := cat1.Create() require.NoError(t, err) cat2 := &SkillCategory{ - GameSystem: "midgard", - Name: "TestCategory2", + GameSystemId: 1, + Name: "TestCategory2", } err = cat2.Create() require.NoError(t, err) @@ -530,15 +530,15 @@ func TestSpell_GetSpellCategories(t *testing.T) { // Create test spell categories in the lookup table (SpellSchool) school1 := &SpellSchool{ - GameSystem: "midgard", - Name: "TestSpellCat1", + GameSystemId: 1, + Name: "TestSpellCat1", } err := school1.Create() require.NoError(t, err) school2 := &SpellSchool{ - GameSystem: "midgard", - Name: "TestSpellCat2", + GameSystemId: 1, + Name: "TestSpellCat2", } err = school2.Create() require.NoError(t, err) @@ -869,8 +869,8 @@ func TestWeapon_IsRanged(t *testing.T) { // Test ranged weapon (has at least one range > 0) rangedWeapon := &Weapon{ Equipment: Equipment{ - GameSystem: "midgard", - Name: "TestArmbrust", + GameSystemId: 1, + Name: "TestArmbrust", }, SkillRequired: "Armbrust", Damage: "2W6", @@ -886,8 +886,8 @@ func TestWeapon_IsRanged(t *testing.T) { // Test melee weapon (all ranges are 0) meleeWeapon := &Weapon{ Equipment: Equipment{ - GameSystem: "midgard", - Name: "TestSchwert", + GameSystemId: 1, + Name: "TestSchwert", }, SkillRequired: "Einhandschwerter", Damage: "1W6+2", diff --git a/backend/models/model_learning_costs_test.go b/backend/models/model_learning_costs_test.go index 6321518..519a1b5 100644 --- a/backend/models/model_learning_costs_test.go +++ b/backend/models/model_learning_costs_test.go @@ -1084,11 +1084,11 @@ func BenchmarkSimple_SourceStruct(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { source := Source{ - Code: "KOD", - Name: "Kodex", - IsCore: true, - IsActive: true, - GameSystem: "midgard", + Code: "KOD", + Name: "Kodex", + IsCore: true, + IsActive: true, + GameSystemId: 1, } _ = source.Code _ = source.Name diff --git a/backend/pdfrender/mapper_test.go b/backend/pdfrender/mapper_test.go index d8c7cc4..7dd5144 100644 --- a/backend/pdfrender/mapper_test.go +++ b/backend/pdfrender/mapper_test.go @@ -199,8 +199,8 @@ func TestMapCharacterToViewModel_Weapons(t *testing.T) { database.DB.Where("name = ?", "Langschwert").Delete(&models.Weapon{}) testWeapon := &models.Weapon{ Equipment: models.Equipment{ - GameSystem: "midgard", - Name: "Langschwert", + GameSystemId: 1, + Name: "Langschwert", }, SkillRequired: "Schwerter", Damage: "1W6", diff --git a/backend/pdfrender/todo_fixes_test.go b/backend/pdfrender/todo_fixes_test.go index 18c374b..3b4b014 100644 --- a/backend/pdfrender/todo_fixes_test.go +++ b/backend/pdfrender/todo_fixes_test.go @@ -147,8 +147,8 @@ func TestWeaponsWithEW(t *testing.T) { database.DB.Where("name = ?", "Schwert").Delete(&models.Weapon{}) testWeapon := &models.Weapon{ Equipment: models.Equipment{ - GameSystem: "midgard", - Name: "Schwert", + GameSystemId: 1, + Name: "Schwert", }, SkillRequired: "Schwerter", Damage: "1W6", diff --git a/backend/pdfrender/weapon_mapper_test.go b/backend/pdfrender/weapon_mapper_test.go index 39332c0..08ee188 100644 --- a/backend/pdfrender/weapon_mapper_test.go +++ b/backend/pdfrender/weapon_mapper_test.go @@ -15,8 +15,8 @@ func TestMapWeapons_WithEWCalculation(t *testing.T) { // Create weapons in gsmaster with skill requirements testSword := &models.Weapon{ Equipment: models.Equipment{ - GameSystem: "midgard", - Name: "Langschwert", + GameSystemId: 1, + Name: "Langschwert", }, SkillRequired: "Schwerter", Damage: "1W6", @@ -25,8 +25,8 @@ func TestMapWeapons_WithEWCalculation(t *testing.T) { testBow := &models.Weapon{ Equipment: models.Equipment{ - GameSystem: "midgard", - Name: "Langbogen", + GameSystemId: 1, + Name: "Langbogen", }, SkillRequired: "Bogen", Damage: "1W6", @@ -141,8 +141,8 @@ func TestMapWeapons_WithDamageCalculation(t *testing.T) { // Create test weapon in gsmaster if it doesn't exist testWeapon := &models.Weapon{ Equipment: models.Equipment{ - GameSystem: "midgard", - Name: "Langschwert", + GameSystemId: 1, + Name: "Langschwert", }, SkillRequired: "Schwerter", Damage: "1W6", @@ -230,8 +230,8 @@ func TestMapWeapons_WithRangedWeaponRanges(t *testing.T) { // Create a ranged weapon in gsmaster with range values testBow := &models.Weapon{ Equipment: models.Equipment{ - GameSystem: "midgard", - Name: "Langbogen", + GameSystemId: 1, + Name: "Langbogen", }, SkillRequired: "Bogen", Damage: "1W6", @@ -258,7 +258,7 @@ func TestMapWeapons_WithRangedWeaponRanges(t *testing.T) { // Create a melee weapon without ranges testSword := &models.Weapon{ Equipment: models.Equipment{ - GameSystem: "midgard", + GameSystemId: 1, Name: "Kurzschwert", }, SkillRequired: "Schwerter", diff --git a/backend/transfer/importer_test.go b/backend/transfer/importer_test.go index 77940b2..7c1be9e 100644 --- a/backend/transfer/importer_test.go +++ b/backend/transfer/importer_test.go @@ -162,16 +162,16 @@ func TestImportCharacterSetsSourceIDDefault(t *testing.T) { }, GSMSkills: []models.Skill{ { - Name: "TestSkill", - GameSystem: "midgard", - SourceID: 0, // Should be set to 1 + Name: "TestSkill", + GameSystemId: 1, + SourceID: 0, // Should be set to 1 }, }, GSMSpells: []models.Spell{ { - Name: "TestSpell", - GameSystem: "midgard", - SourceID: 0, // Should be set to 2 + Name: "TestSpell", + GameSystemId: 1, + SourceID: 0, // Should be set to 2 }, }, }