From 830b10dc85b298c0ceae20c5f38f76bf9ab1ef96 Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 28 Dec 2024 23:07:04 +0100 Subject: [PATCH] added stammdaten handling --- backend/models/stammdaten.go | 106 ++++++++++++++++++++++++++ backend/stammdaten/importer.go | 19 ++--- backend/tests/stammdaten_test.go | 123 +++++++++++++++++++++++++++++++ 3 files changed, 235 insertions(+), 13 deletions(-) create mode 100644 backend/tests/stammdaten_test.go diff --git a/backend/models/stammdaten.go b/backend/models/stammdaten.go index df58a15..1b5969c 100644 --- a/backend/models/stammdaten.go +++ b/backend/models/stammdaten.go @@ -1,5 +1,12 @@ package models +import ( + "bamort/database" + "fmt" + + "gorm.io/gorm" +) + /*type ImStammFertigkeit struct { ID uint `gorm:"primaryKey" json:"id"` System string `gorm:"index" json:"system"` @@ -24,6 +31,9 @@ type ImStammFertigkeit struct { Initialkeitswert int `json:"initialwert"` Bonuseigenschaft string `json:"bonuseigenschaft,omitempty"` } +type ImStammWaffenFertigkeit struct { + ImStammFertigkeit +} type ImStammZauber struct { ImStamm @@ -33,3 +43,99 @@ type ImStammZauber struct { Reichweite int Wirkungsziel string } + +func (stamm *ImStamm) First(name string) error { + gameSystem := "midgard" + err := database.DB.First(&stamm, "system=? AND name = ?", gameSystem, name).Error + if err != nil { + // zauber found + return err + } + return nil +} + +func (stamm *ImStamm) Create() error { + gameSystem := "midgard" + stamm.System = 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 Stammdaten: %w", err) + } + return nil + }) + + return err +} + +func (stamm *ImStammFertigkeit) First(name string) error { + gameSystem := "midgard" + err := database.DB.First(&stamm, "system=? AND name = ?", gameSystem, name).Error + if err != nil { + // Fertigkeit found + return err + } + return nil +} + +func (stamm *ImStammFertigkeit) Create() error { + gameSystem := "midgard" + stamm.System = 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 Fertigkeit Stammdaten: %w", err) + } + return nil + }) + + return err +} + +func (stamm *ImStammWaffenFertigkeit) First(name string) error { + gameSystem := "midgard" + err := database.DB.First(&stamm, "system=? AND name = ?", gameSystem, name).Error + if err != nil { + // Fertigkeit found + return err + } + return nil +} + +func (stamm *ImStammWaffenFertigkeit) Create() error { + gameSystem := "midgard" + stamm.System = 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 Fertigkeit Stammdaten: %w", err) + } + return nil + }) + + return err +} + +func (stamm *ImStammZauber) First(name string) error { + gameSystem := "midgard" + err := database.DB.First(&stamm, "system=? AND name = ?", gameSystem, name).Error + if err != nil { + // zauber found + return err + } + return nil +} + +func (stamm *ImStammZauber) Create() error { + gameSystem := "midgard" + stamm.System = 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 Zauber Stammdaten: %w", err) + } + return nil + }) + + return err +} diff --git a/backend/stammdaten/importer.go b/backend/stammdaten/importer.go index b6fe662..bec907a 100644 --- a/backend/stammdaten/importer.go +++ b/backend/stammdaten/importer.go @@ -11,11 +11,8 @@ import ( func CheckFertigkeit(fertigkeit *models.ImFertigkeit, autocreate bool) (*models.ImStammFertigkeit, error) { stammF := models.ImStammFertigkeit{} - gameSystem := "none" - if strings.HasPrefix(fertigkeit.ID, "moam") { - gameSystem = "midgard" - } - err := database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error + //err := database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error + err := stammF.First(fertigkeit.Name) if err == nil { // Fertigkeit found return &stammF, nil @@ -36,19 +33,15 @@ func CheckFertigkeit(fertigkeit *models.ImFertigkeit, autocreate bool) (*models. stammF.Bonuseigenschaft = "keine" stammF.Quelle = fertigkeit.Quelle //fmt.Println(stammF) - err = database.DB.Transaction(func(tx *gorm.DB) error { - // Save the main character record - if err := tx.Create(&stammF).Error; err != nil { - return fmt.Errorf("failed to save Fertigkeit Stammdaten: %w", err) - } - return nil - }) + + err = stammF.Create() if err != nil { // Fertigkeit found return nil, err } - err = database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error + //err = database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error + err = stammF.First(fertigkeit.Name) if err != nil { // Fertigkeit found return nil, err diff --git a/backend/tests/stammdaten_test.go b/backend/tests/stammdaten_test.go new file mode 100644 index 0000000..53a1d54 --- /dev/null +++ b/backend/tests/stammdaten_test.go @@ -0,0 +1,123 @@ +package tests + +import ( + "bamort/database" + "bamort/models" + "testing" + + "github.com/stretchr/testify/assert" + "gorm.io/gorm" +) + +func initTestDB4Stammdaten() *gorm.DB { + db := SetupTestDB() + db.AutoMigrate( + &models.ImStammFertigkeit{}, //needed for stammdaten.CheckFertigkeit + &models.ImStammZauber{}, //needed for stammdaten.CheckZauber + &models.ImStammWaffenFertigkeit{}, //needed for stammdaten.CheckWaffenFertigkeit + ) + return db +} + +func TestCreateStammdatenFertigkeiten(t *testing.T) { + // Setup test database + testDB := initTestDB4Stammdaten() + database.DB = testDB // Assign test DB to global DB + stamm := models.ImStammFertigkeit{} + stamm.System = "Midgard" + stamm.Name = "Lesen" + stamm.Beschreibung = "Lesen und Schreiben" + stamm.Quelle = "kod-4711" + stamm.Initialkeitswert = 8 + stamm.Bonuseigenschaft = "In" + err := stamm.Create() + assert.NoError(t, err, "expexted Error does not exist in Fertigkeit Stammdaten") + assert.GreaterOrEqual(t, 1, int(stamm.ID), "exepets an ID to be present") + assert.Equal(t, "midgard", stamm.System) +} + +func TestFindStammdatenFertigkeiten(t *testing.T) { + // Setup test database + TestCreateStammdatenFertigkeiten(t) + stamm := models.ImStammFertigkeit{} + stamm.Name = "Lesen" + + err := stamm.First("Lesen") + assert.NoError(t, err, "expexted Error does not exist in Fertigkeit Stammdaten") + assert.GreaterOrEqual(t, 1, int(stamm.ID), "exepets an ID to be present") + assert.Equal(t, "midgard", stamm.System) + assert.Equal(t, "In", stamm.Bonuseigenschaft) +} + +func TestCreateStammdatenWaffenFertigkeiten(t *testing.T) { + // Setup test database + testDB := initTestDB4Stammdaten() + database.DB = testDB // Assign test DB to global DB + stamm := models.ImStammWaffenFertigkeit{} + stamm.System = "Midgard" + stamm.Name = "Stichwaffen" + stamm.Beschreibung = "Für Dolche und Ochsenzungen" + stamm.Quelle = "kod-4712" + stamm.Initialkeitswert = 5 + stamm.Bonuseigenschaft = "Gs" + err := stamm.Create() + assert.NoError(t, err, "expexted Error does not exist in WaffenFertigkeit Stammdaten") + assert.GreaterOrEqual(t, 1, int(stamm.ID), "exepets an ID to be present") + assert.Equal(t, "midgard", stamm.System) +} + +func TestFindStammdatenWaffenFertigkeiten(t *testing.T) { + // Setup test database + TestCreateStammdatenWaffenFertigkeiten(t) + stamm := models.ImStammWaffenFertigkeit{} + stamm.Name = "Lesen" + + err := stamm.First("Stichwaffen") + assert.NoError(t, err, "expexted Error does not exist in WaffenFertigkeit Stammdaten") + assert.GreaterOrEqual(t, 1, int(stamm.ID), "exepets an ID to be present") + assert.Equal(t, "midgard", stamm.System) + assert.Equal(t, "Stichwaffen", stamm.Name) + assert.Equal(t, "Für Dolche und Ochsenzungen", stamm.Beschreibung) + assert.Equal(t, "Gs", stamm.Bonuseigenschaft) +} + +func TestCreateStammdatenZauber(t *testing.T) { + // Setup test database + testDB := initTestDB4Stammdaten() + database.DB = testDB // Assign test DB to global DB + stamm := models.ImStammZauber{} + stamm.System = "Midgard" + stamm.Name = "Unsichtbarkeit" + stamm.Beschreibung = "werde unsichtbar" + stamm.Quelle = "Ark-4711" + stamm.Stufe = 1 + stamm.AP = 1 + stamm.Reichweite = 0 + stamm.Wirkungsziel = "Zauberer" + stamm.Bonus = 0 + err := stamm.Create() + assert.NoError(t, err, "expexted Error does not exist in Fertigkeit Stammdaten") + assert.GreaterOrEqual(t, 1, int(stamm.ID), "exepets an ID to be present") + assert.Equal(t, "midgard", stamm.System) + assert.Equal(t, "Unsichtbarkeit", stamm.Name) + assert.Equal(t, "werde unsichtbar", stamm.Beschreibung) + assert.Equal(t, 1, stamm.Stufe) +} + +func TestFindStammdatenZauber(t *testing.T) { + // Setup test database + TestCreateStammdatenZauber(t) + stamm := models.ImStammZauber{} + stamm.Name = "lesen" + + err := stamm.First("Unsichtbarkeit") + assert.NoError(t, err, "expexted Error does not exist in Fertigkeit Stammdaten") + assert.GreaterOrEqual(t, 1, int(stamm.ID), "exepets an ID to be present") + assert.Equal(t, "midgard", stamm.System) + assert.Equal(t, "Unsichtbarkeit", stamm.Name) + assert.Equal(t, "werde unsichtbar", stamm.Beschreibung) + assert.Equal(t, 1, stamm.AP) + assert.Equal(t, 0, stamm.Reichweite) + assert.Equal(t, "Zauberer", stamm.Wirkungsziel) + assert.Equal(t, 0, stamm.Bonus) +}