optomization in getting game system

This commit is contained in:
2026-01-28 05:39:51 +01:00
parent c77f5202b6
commit 34c6e31200
5 changed files with 89 additions and 26 deletions
+20
View File
@@ -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
}
+23
View File
@@ -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)
})
}
+7
View File
@@ -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
}
+7
View File
@@ -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)
})
}
+32 -26
View File
@@ -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
}