optomization in getting game system
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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)
|
||||
})
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user