added import stammdaten

for Ferttigkeit and Zauber
This commit is contained in:
2024-12-28 21:07:10 +01:00
parent 717be22a95
commit dc8316430f
6 changed files with 283 additions and 104 deletions
+3 -3
View File
@@ -14,7 +14,7 @@ type ImAusruestung struct {
BeinhaltetIn *string `json:"beinhaltet_in"`
Bonus int `json:"bonus,omitempty"`
Gewicht float64 `json:"gewicht"`
Magisch ImMagisch `gorm:"foreignKey:ID" json:"magisch"`
Magisch ImMagisch `json:"magisch"`
Wert float64 `json:"wert"`
}
@@ -105,7 +105,7 @@ type ImBehaeltniss struct {
Beschreibung string `json:"beschreibung"`
BeinhaltetIn any `json:"beinhaltet_in"`
Gewicht float64 `json:"gewicht"`
Magisch ImMagisch `gorm:"foreignKey:ID" json:"magisch"`
Magisch ImMagisch `json:"magisch"`
Tragkraft float64 `json:"tragkraft"`
Volumen float64 `json:"volumen"`
Wert float64 `json:"wert"`
@@ -129,7 +129,7 @@ type ImTransportation struct {
Gewicht int `json:"gewicht"`
Tragkraft float64 `json:"tragkraft"`
Wert float64 `json:"wert"`
Magisch ImMagisch `gorm:"foreignKey:ID" json:"magisch"`
Magisch ImMagisch `json:"magisch"`
//Magisch Magisch `gorm:"polymorphic:Item;polymorphicValue:Transportmittel" json:"magisch"`
}
+13 -52
View File
@@ -1,57 +1,5 @@
package models
import (
"bamort/database"
"fmt"
"strings"
"gorm.io/gorm"
)
func CheckFertigkeit(fertigkeit *ImFertigkeit, autocreate bool) (*ImStammFertigkeit, error) {
stammF := ImStammFertigkeit{}
if strings.HasPrefix(fertigkeit.ID, "moam") {
err := database.DB.First(&stammF, "system=? AND name = ?", "midgard", fertigkeit.Name).Error
if err == nil {
// Fertigkeit found
return &stammF, nil
}
if !autocreate {
return nil, fmt.Errorf("does not exist in Fertigkeit Stammdaten")
}
stammF.System = "midgard"
stammF.Name = fertigkeit.Name
stammF.Beschreibung = fertigkeit.Beschreibung
if fertigkeit.Fertigkeitswert < 12 {
stammF.Initialkeitswert = 5
} else {
stammF.Initialkeitswert = 12
}
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
})
if err != nil {
// Fertigkeit found
return nil, err
}
}
err := database.DB.First(&stammF, "system=? AND name = ?", "midgard", fertigkeit.Name).Error
if err != nil {
// Fertigkeit found
return nil, err
}
return &stammF, nil
}
type ImStammFertigkeit struct {
ID uint `gorm:"primaryKey" json:"id"`
System string `gorm:"index" json:"system"`
@@ -61,3 +9,16 @@ type ImStammFertigkeit struct {
Bonuseigenschaft string `json:"bonuseigenschaft,omitempty"`
Quelle string `json:"quelle"`
}
type ImStammZauber struct {
ID uint `gorm:"primaryKey" json:"id"`
System string `gorm:"index" json:"system"`
Name string `json:"name"`
Beschreibung string `json:"beschreibung"`
Bonus int `json:"bonus"`
Quelle string `json:"quelle"`
Stufe int
AP int
Reichweite int
Wirkungsziel string
}
+101
View File
@@ -0,0 +1,101 @@
package stammdaten
import (
"bamort/database"
"bamort/models"
"fmt"
"strings"
"gorm.io/gorm"
)
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
if err == nil {
// Fertigkeit found
return &stammF, nil
}
if !autocreate {
return nil, fmt.Errorf("does not exist in Fertigkeit Stammdaten")
}
stammF.System = "midgard"
stammF.Name = fertigkeit.Name
if stammF.Name != "Sprache" {
stammF.Beschreibung = fertigkeit.Beschreibung
}
if fertigkeit.Fertigkeitswert < 12 {
stammF.Initialkeitswert = 5
} else {
stammF.Initialkeitswert = 12
}
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
})
if err != nil {
// Fertigkeit found
return nil, err
}
err = database.DB.First(&stammF, "system=? AND name = ?", gameSystem, fertigkeit.Name).Error
if err != nil {
// Fertigkeit found
return nil, err
}
return &stammF, nil
}
func CheckZauber(zauber *models.ImZauber, autocreate bool) (*models.ImStammZauber, error) {
stammF := models.ImStammZauber{}
gameSystem := "none"
if strings.HasPrefix(zauber.ID, "moam") {
gameSystem = "midgard"
}
err := database.DB.First(&stammF, "system=? AND name = ?", gameSystem, zauber.Name).Error
if err == nil {
// zauber found
return &stammF, nil
}
if !autocreate {
return nil, fmt.Errorf("does not exist in zauber Stammdaten")
}
stammF.System = "midgard"
stammF.Name = zauber.Name
stammF.Beschreibung = zauber.Beschreibung
stammF.AP = 1
stammF.Stufe = 1
stammF.Wirkungsziel = "Zauberer"
stammF.Reichweite = 15
stammF.Quelle = zauber.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 zauber Stammdaten: %w", err)
}
return nil
})
if err != nil {
// zauber found
return nil, err
}
err = database.DB.First(&stammF, "system=? AND name = ?", gameSystem, zauber.Name).Error
if err != nil {
// zauber found
return nil, err
}
return &stammF, nil
}
+146 -39
View File
@@ -1,17 +1,49 @@
package main
package tests
import (
"bamort/database"
"bamort/models"
"bamort/stammdaten"
"encoding/json"
"fmt"
"os"
"testing"
"github.com/stretchr/testify/assert"
"gorm.io/gorm"
)
func TestImportVTT(t *testing.T) {
func initTestDB4Import() *gorm.DB {
db := SetupTestDB()
db.AutoMigrate(
/*
&models.ImAp{},
&models.ImEigenschaft{},
&models.ImAusruestung{},
&models.ImFertigkeit{},
&models.ImZauber{},
&models.ImWaffenfertigkeit{},
&models.ImWaffe{},
&models.ImMerkmale{},
&models.ImLp{},
&models.ImGestalt{},
&models.ImErfahrungsschatz{},
&models.ImEigenschaften{},
&models.ImBennies{},
&models.ImBehaeltniss{},
&models.ImAp{},
&models.ImB{},
&models.ImTransportation{},
&models.ImMagisch{},
&models.ImCharacterImport{},
*/
&models.ImStammFertigkeit{}, //needed for stammdaten.CheckFertigkeit
&models.ImStammZauber{}, //needed for stammdaten.CheckZauber
)
return db
}
func TestImportVTTStructure(t *testing.T) {
// Setup test database
//testDB := SetupTestDB()
//DB = testDB // Assign test DB to global DB
@@ -42,14 +74,14 @@ func TestImportVTT(t *testing.T) {
assert.Equal(t, 3, len(character.Spezialisierung))
assert.Equal(t, "Kriegshammer", character.Spezialisierung[0])
assert.Equal(t, "Armbrust:schwer", character.Spezialisierung[1])
//fmt.Println(character)
}
func TestImportFertigkeitenStammdaten(t *testing.T) {
func TestImportFertigkeitenStammdatenSingle(t *testing.T) {
// Setup test database
testDB := SetupTestDB()
testDB := initTestDB4Import()
database.DB = testDB // Assign test DB to global DB
// loading file to Modell
fileName := fmt.Sprintf("../testdata/%s", "VTT_Import1.json")
assert.Equal(t, "../testdata/VTT_Import1.json", fileName)
@@ -59,46 +91,121 @@ func TestImportFertigkeitenStammdaten(t *testing.T) {
err = json.Unmarshal(fileContent, &character)
assert.NoError(t, err, "Expected no error when Unmarshal filecontent")
//checke Fertigkeit auf vorhandensein in den Stammdaten
fertigkeit := character.Fertigkeiten[1]
//for _, fertigkeit := range character.Fertigkeiten {
//fmt.Printf("Name: %s, Beschreibung: %s, Wert: %d\n",
// fertigkeit.Name, fertigkeit.Beschreibung, fertigkeit.Fertigkeitswert)
//fmt.Println(fertigkeit)
/* stammF := StammFertigkeit{}
if strings.HasPrefix(fertigkeit.ImportID, "moam") {
err = DB.First(&stammF, "system=? AND name = ?", "midgard", fertigkeit.Name).Error
assert.Error(t, err, "Expected not to find the Fertigkeit Stammdaten in the database")
stammF.System = "midgard"
stammF.Name = fertigkeit.Name
stammF.Beschreibung = fertigkeit.Beschreibung
if fertigkeit.Fertigkeitswert < 12 {
stammF.Initialkeitswert = 5
} else {
stammF.Initialkeitswert = 12
}
stammF.Bonuseigenschaft = "keine"
stammF.Quelle = fertigkeit.Quelle
//fmt.Println(stammF)
err = 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
})
assert.NoError(t, err, "Expected no error saving Fertigkeit Stammdaten in the database")
}
err = DB.First(&stammF, "system=? AND name = ?", "midgard", fertigkeit.Name).Error
fmt.Println(stammF) */
stammF, err := models.CheckFertigkeit(&fertigkeit, false)
stammF, err := stammdaten.CheckFertigkeit(&fertigkeit, false)
assert.Error(t, err, "expexted Error does not exist in Fertigkeit Stammdaten")
if stammF == nil && err != nil {
stammF, err = models.CheckFertigkeit(&fertigkeit, true)
stammF, err = stammdaten.CheckFertigkeit(&fertigkeit, true)
}
assert.NoError(t, err, "Expected to finds the Fertigkeit Stammdaten in the database")
assert.Equal(t, fertigkeit.Name, stammF.Name)
assert.Equal(t, fertigkeit.Beschreibung, stammF.Beschreibung)
assert.Equal(t, fertigkeit.Quelle, stammF.Quelle)
assert.Equal(t, 5, stammF.Initialkeitswert)
assert.Equal(t, "keine", stammF.Bonuseigenschaft)
assert.Equal(t, "midgard", stammF.System)
assert.Equal(t, 1, int(stammF.ID))
//}
// und noch mal
//checke Fertigkeit auf vorhandensein in den Stammdaten
//fertigkeit := character.Fertigkeiten[1]
stammF, err = stammdaten.CheckFertigkeit(&fertigkeit, false)
assert.NoError(t, err, "expexted no Error exist in Fertigkeit Stammdaten")
if stammF == nil && err != nil {
stammF, err = stammdaten.CheckFertigkeit(&fertigkeit, true)
}
assert.NoError(t, err, "Expected to finds the Fertigkeit Stammdaten in the database")
assert.Equal(t, fertigkeit.Name, stammF.Name)
assert.Equal(t, fertigkeit.Beschreibung, stammF.Beschreibung)
assert.Equal(t, fertigkeit.Quelle, stammF.Quelle)
assert.Equal(t, 5, stammF.Initialkeitswert)
assert.Equal(t, "keine", stammF.Bonuseigenschaft)
assert.Equal(t, "midgard", stammF.System)
assert.Equal(t, 1, int(stammF.ID))
}
func TestImportFertigkeitenStammdatenMulti(t *testing.T) {
// Setup test database
testDB := initTestDB4Import()
database.DB = testDB // Assign test DB to global DB
// loading file to Modell
fileName := fmt.Sprintf("../testdata/%s", "VTT_Import1.json")
assert.Equal(t, "../testdata/VTT_Import1.json", fileName)
fileContent, err := os.ReadFile(fileName)
assert.NoError(t, err, "Expected no error when reading file "+fileName)
character := models.ImCharacterImport{}
err = json.Unmarshal(fileContent, &character)
assert.NoError(t, err, "Expected no error when Unmarshal filecontent")
//for index, fertigkeit := range character.Fertigkeiten {
for _, fertigkeit := range character.Fertigkeiten {
fmt.Println(fertigkeit.Name)
stammF, err := stammdaten.CheckFertigkeit(&fertigkeit, true)
assert.NoError(t, err, "Expected to finds the Fertigkeit Stammdaten in the database")
assert.Equal(t, fertigkeit.Name, stammF.Name, "Name should be equal")
if fertigkeit.Name != "Sprache" {
assert.Equal(t, fertigkeit.Beschreibung, stammF.Beschreibung, "Beschreibung should be equal")
} else {
assert.Equal(t, "", stammF.Beschreibung, "Beschreibung should be equal")
}
assert.Equal(t, fertigkeit.Quelle, stammF.Quelle, "Quelle should be equal")
//assert.Equal(t, 5, stammF.Initialkeitswert, "Initialkeitswert should be equal")
assert.Equal(t, "keine", stammF.Bonuseigenschaft, "Bonuseigenschaft should be equal")
assert.Equal(t, "midgard", stammF.System, "System should be equal")
//assert.NotEmpty(t, index+1, int(stammF.ID), "ID should be equal")
}
}
func TestImportZauberStammdatenSingle(t *testing.T) {
// Setup test database
testDB := initTestDB4Import()
database.DB = testDB // Assign test DB to global DB
// loading file to Modell
fileName := fmt.Sprintf("../testdata/%s", "VTT_Import1.json")
assert.Equal(t, "../testdata/VTT_Import1.json", fileName)
fileContent, err := os.ReadFile(fileName)
assert.NoError(t, err, "Expected no error when reading file "+fileName)
character := models.ImCharacterImport{}
err = json.Unmarshal(fileContent, &character)
assert.NoError(t, err, "Expected no error when Unmarshal filecontent")
//checke zauber auf vorhandensein in den Stammdaten
zauber := character.Zauber[0]
stammF, err := stammdaten.CheckZauber(&zauber, false)
assert.Error(t, err, "expexted Error does not exist in zauber Stammdaten")
if stammF == nil && err != nil {
stammF, err = stammdaten.CheckZauber(&zauber, true)
}
assert.NoError(t, err, "Expected to finds the zauber Stammdaten in the database")
assert.Equal(t, zauber.Name, stammF.Name)
assert.Equal(t, zauber.Beschreibung, stammF.Beschreibung)
assert.Equal(t, zauber.Quelle, stammF.Quelle)
assert.Equal(t, 1, stammF.AP)
assert.Equal(t, 1, stammF.Stufe)
assert.Equal(t, "Zauberer", stammF.Wirkungsziel)
assert.Equal(t, 15, stammF.Reichweite)
assert.Equal(t, "midgard", stammF.System)
assert.Equal(t, 1, int(stammF.ID))
// und noch mal
//checke zauber auf vorhandensein in den Stammdaten
//zauber := character.zauberen[1]
stammF, err = stammdaten.CheckZauber(&zauber, false)
assert.NoError(t, err, "expexted no Error exist in zauber Stammdaten")
if stammF == nil && err != nil {
stammF, err = stammdaten.CheckZauber(&zauber, true)
}
assert.NoError(t, err, "Expected to finds the zauber Stammdaten in the database")
assert.Equal(t, zauber.Name, stammF.Name)
assert.Equal(t, zauber.Beschreibung, stammF.Beschreibung)
assert.Equal(t, zauber.Quelle, stammF.Quelle)
assert.Equal(t, 1, stammF.AP)
assert.Equal(t, 1, stammF.Stufe)
assert.Equal(t, "Zauberer", stammF.Wirkungsziel)
assert.Equal(t, 15, stammF.Reichweite)
assert.Equal(t, "midgard", stammF.System)
assert.Equal(t, 1, int(stammF.ID))
}
+16
View File
@@ -0,0 +1,16 @@
package tests
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
// SetupTestDB creates an in-memory SQLite database for testing
func SetupTestDB() *gorm.DB {
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
if err != nil {
panic("failed to connect to the test database")
}
return db
}
+4 -10
View File
@@ -1,4 +1,4 @@
package main
package tests
import (
"bamort/character"
@@ -7,17 +7,11 @@ import (
"testing"
"github.com/stretchr/testify/assert"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
// SetupTestDB creates an in-memory SQLite database for testing
func SetupTestDB() *gorm.DB {
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
if err != nil {
panic("failed to connect to the test database")
}
func initTestDB4Char() *gorm.DB {
db := SetupTestDB()
// Auto-migrate the schemas for all related models
db.AutoMigrate(&models.Char{},
&models.Fertigkeit{}, &models.Zauber{}, &models.Lp{},
@@ -42,7 +36,7 @@ func SetupTestDB() *gorm.DB {
func TestSaveCharacterToDB(t *testing.T) {
// Setup test database
testDB := SetupTestDB()
testDB := initTestDB4Char()
database.DB = testDB // Assign test DB to global DB
// Define a sample character for testing