From 34c6e3120019255f2be9d6ca0d34335a6b3537f1 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 28 Jan 2026 05:39:51 +0100 Subject: [PATCH] optomization in getting game system --- backend/gsmaster/game_system.go | 20 ++++++++ backend/gsmaster/game_system_test.go | 23 ++++++++++ backend/models/model_game_system.go | 7 +++ backend/models/model_game_system_test.go | 7 +++ backend/models/model_gsmaster.go | 58 +++++++++++++----------- 5 files changed, 89 insertions(+), 26 deletions(-) create mode 100644 backend/gsmaster/game_system.go create mode 100644 backend/gsmaster/game_system_test.go diff --git a/backend/gsmaster/game_system.go b/backend/gsmaster/game_system.go new file mode 100644 index 0000000..1c96f7a --- /dev/null +++ b/backend/gsmaster/game_system.go @@ -0,0 +1,20 @@ +package gsmaster + +import "bamort/models" + +func GetGameSystem(id int, name string) *models.GameSystem { + gs := &models.GameSystem{} + if id == 0 && name == "" { + gs.GetDefault() + return gs + } + if id == 0 && name != "" { + gs.FirstByCode(name) + if gs.ID == 0 { + gs.FirstByName(name) + } + return gs + } + gs.FirstByID(uint(id)) + return gs +} diff --git a/backend/gsmaster/game_system_test.go b/backend/gsmaster/game_system_test.go new file mode 100644 index 0000000..8f6f0fe --- /dev/null +++ b/backend/gsmaster/game_system_test.go @@ -0,0 +1,23 @@ +package gsmaster + +import ( + "testing" + + "bamort/database" + + "github.com/stretchr/testify/assert" +) + +func TestGetGameSystem(t *testing.T) { + // Initialize test DB and migrations + database.SetupTestDB(true) + defer database.ResetTestDB() + t.Run("GetGameSystem", func(t *testing.T) { + gs := GetGameSystem(1, "") + assert.Equal(t, "M5", gs.Code) + gs = GetGameSystem(0, "midgard") + assert.Equal(t, "M5", gs.Code) + gs = GetGameSystem(1, "M5") + assert.Equal(t, "M5", gs.Code) + }) +} diff --git a/backend/models/model_game_system.go b/backend/models/model_game_system.go index 235b9c6..de28ed3 100644 --- a/backend/models/model_game_system.go +++ b/backend/models/model_game_system.go @@ -34,3 +34,10 @@ func (gs *GameSystem) FirstByName(name string) error { } return database.DB.First(gs, "name = ?", name).Error } + +func (gs *GameSystem) FirstByID(id uint) error { + if id == 0 { + return gs.GetDefault() + } + return database.DB.First(gs, "id = ?", id).Error +} diff --git a/backend/models/model_game_system_test.go b/backend/models/model_game_system_test.go index 2fb9f44..bb2a34d 100644 --- a/backend/models/model_game_system_test.go +++ b/backend/models/model_game_system_test.go @@ -65,4 +65,11 @@ func TestGameSystem_Methods(t *testing.T) { err = notFound.FirstByName("NoSuchSystem") assert.Error(t, err) }) + + t.Run("Get By Id", func(t *testing.T) { + var found GameSystem + err := found.FirstByID(1) + assert.NoError(t, err) + assert.Equal(t, "M5", found.Code) + }) } diff --git a/backend/models/model_gsmaster.go b/backend/models/model_gsmaster.go index 486e874..0d31dce 100644 --- a/backend/models/model_gsmaster.go +++ b/backend/models/model_gsmaster.go @@ -642,12 +642,10 @@ func (object *Believe) Create() error { } func (object *Believe) FirstId(value uint) error { - if object.GameSystemId == 0 { - gs := GameSystem{} - gs.FirstByName(object.GameSystem) - object.GameSystemId = gs.ID - object.GameSystem = gs.Name - } + gs := GetGameSystem(object.GameSystemId, object.GameSystem) + object.GameSystemId = gs.ID + object.GameSystem = gs.Name + err := database.DB.First(&object, "(game_system=? OR game_system_id=?) AND id = ?", object.GameSystem, object.GameSystemId, value).Error if err != nil { // zauber found @@ -660,12 +658,10 @@ func (object *Believe) First(name string) error { if name == "" { return fmt.Errorf("name cannot be empty") } - if object.GameSystemId == 0 { - gs := GameSystem{} - gs.FirstByName(object.GameSystem) - object.GameSystemId = gs.ID - object.GameSystem = gs.Name - } + gs := GetGameSystem(object.GameSystemId, object.GameSystem) + object.GameSystemId = gs.ID + object.GameSystem = gs.Name + err := database.DB.First(&object, "(game_system=? OR game_system_id=?) AND name = ?", object.GameSystem, object.GameSystemId, name).Error if err != nil { // zauber found @@ -675,12 +671,10 @@ func (object *Believe) First(name string) error { } func (object *Believe) Save() error { - if object.GameSystemId == 0 { - gs := GameSystem{} - gs.FirstByName(object.GameSystem) - object.GameSystemId = gs.ID - object.GameSystem = gs.Name - } + gs := GetGameSystem(object.GameSystemId, object.GameSystem) + object.GameSystemId = gs.ID + object.GameSystem = gs.Name + err := database.DB.Save(&object).Error if err != nil { // zauber found @@ -692,15 +686,10 @@ func (object *Believe) Save() error { // GetBelievesByActiveSources gibt Glaubensrichtungen nach aktiven Quellen zurück func GetBelievesByActiveSources(gameSystem string) ([]Believe, error) { var believes []Believe - gs := GameSystem{} - //if gameSystem="midgard" it should return recordset id 1 - gs.FirstByName(gameSystem) + gs := GetGameSystem(0, gameSystem) if gs.ID == 0 { - gs.FirstByCode(gameSystem) - if gs.ID == 0 { - // return empty slice if no valid game system found - return believes, fmt.Errorf("No GameSystem ID or Name found for %s", gameSystem) - } + // return empty slice if no valid game system found + return believes, fmt.Errorf("No GameSystem ID or Name found for %s", gameSystem) } err := database.DB. Joins("LEFT JOIN gsm_lit_sources ON gsm_believes.source_id = gsm_lit_sources.id"). @@ -714,3 +703,20 @@ func GetBelievesByActiveSources(gameSystem string) ([]Believe, error) { func (MiscLookup) TableName() string { return "gsm_misc" } + +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) + } + return gs + } + gs.FirstByID(uint(id)) + return gs +}