link things to the containers they belong

This commit is contained in:
2025-01-18 20:59:54 +01:00
parent 2579d62c7f
commit b970662c0c
4 changed files with 251 additions and 177 deletions
+190 -19
View File
@@ -1,18 +1,23 @@
package equipment
import "bamort/models"
import (
"bamort/database"
"bamort/models"
)
var dbPrefix = "equi"
type Ausruestung struct {
models.BamortCharTrait
models.Magisch
Beschreibung string `json:"beschreibung"`
Anzahl int `json:"anzahl"`
BeinhaltetIn string `json:"beinhaltet_in"`
Bonus int `json:"bonus,omitempty"`
Gewicht float64 `json:"gewicht"`
Wert float64 `json:"wert"`
Beschreibung string `json:"beschreibung"`
Anzahl int `json:"anzahl"`
BeinhaltetIn string `json:"beinhaltet_in"`
ContainedIn uint `json:"contained_in"`
ContainerType string `json:"container_type"`
Bonus int `json:"bonus,omitempty"`
Gewicht float64 `json:"gewicht"`
Wert float64 `json:"wert"`
}
type Waffe struct {
@@ -23,6 +28,8 @@ type Waffe struct {
Anb int `json:"anb"`
Anzahl int `json:"anzahl"`
BeinhaltetIn string `json:"beinhaltet_in"`
ContainedIn uint `json:"contained_in"`
ContainerType string `json:"container_type"`
Gewicht float64 `json:"gewicht"`
NameFuerSpezialisierung string `json:"nameFuerSpezialisierung"`
Schb int `json:"schb"`
@@ -32,23 +39,29 @@ type Waffe struct {
type Behaeltniss struct {
models.BamortCharTrait
models.Magisch
Beschreibung string `json:"beschreibung"`
BeinhaltetIn string `json:"beinhaltet_in"`
Gewicht float64 `json:"gewicht"`
Wert float64 `json:"wert"`
Tragkraft float64 `json:"tragkraft"`
Volumen float64 `json:"volumen"`
Beschreibung string `json:"beschreibung"`
BeinhaltetIn string `json:"beinhaltet_in"`
ContainedIn uint `json:"contained_in"`
ContainerType string `json:"container_type"`
Gewicht float64 `json:"gewicht"`
Wert float64 `json:"wert"`
Tragkraft float64 `json:"tragkraft"`
Volumen float64 `json:"volumen"`
ExtID string `json:"ext_id"`
}
type Transportation struct {
models.BamortCharTrait
models.Magisch
Beschreibung string `json:"beschreibung"`
BeinhaltetIn string `json:"beinhaltet_in"`
Gewicht float64 `json:"gewicht"`
Wert float64 `json:"wert"`
Tragkraft float64 `json:"tragkraft"`
Volumen float64 `json:"volumen"`
Beschreibung string `json:"beschreibung"`
BeinhaltetIn string `json:"beinhaltet_in"`
ContainedIn uint `json:"contained_in"`
ContainerType string `json:"container_type"`
Gewicht float64 `json:"gewicht"`
Wert float64 `json:"wert"`
Tragkraft float64 `json:"tragkraft"`
Volumen float64 `json:"volumen"`
ExtID string `json:"ext_id"`
}
func (object *Ausruestung) TableName() string {
@@ -63,3 +76,161 @@ func (object *Behaeltniss) TableName() string {
func (object *Transportation) TableName() string {
return dbPrefix + "_" + "transportationss"
}
func (object *Behaeltniss) FirstExtId(id string) error {
err := database.DB.
First(&object, "ext_id = ?", id).Error
if err != nil {
// Behaeltniss not found
return err
}
return nil
}
func (object *Behaeltniss) Save() error {
err := database.DB.Save(&object).Error
if err != nil {
// Behaeltniss saved
return err
}
return nil
}
func (object *Transportation) FirstExtId(id string) error {
err := database.DB.
First(&object, "ext_id = ?", id).Error
if err != nil {
// Transportation not found
return err
}
return nil
}
func (object *Transportation) Save() error {
err := database.DB.Save(&object).Error
if err != nil {
// Transportation saved
return err
}
return nil
}
func (object *Ausruestung) Save() error {
err := database.DB.Save(&object).Error
if err != nil {
// Ausruestung saved
return err
}
return nil
}
func (object *Waffe) Save() error {
err := database.DB.Save(&object).Error
if err != nil {
// Waffe saved
return err
}
return nil
}
func (object *Ausruestung) LinkContainer() error {
//var err error
if object.BeinhaltetIn != "" {
co := Behaeltniss{}
co.FirstExtId(object.BeinhaltetIn)
if co.ID > 0 {
object.ContainedIn = co.ID
//err= object.Save()
} else {
obj := Transportation{}
if co.ID > 0 {
object.ContainedIn = obj.ID
//err= object.Save()
}
}
if object.ContainedIn > 0 {
err := object.Save()
if err != nil {
// ContainedIn saved
return err
}
}
}
return nil
}
func (object *Waffe) LinkContainer() error {
//var err error
if object.BeinhaltetIn != "" {
co := Behaeltniss{}
co.FirstExtId(object.BeinhaltetIn)
if co.ID > 0 {
object.ContainedIn = co.ID
object.ContainerType = "Behaeltniss"
//err= object.Save()
} else {
obj := Transportation{}
obj.FirstExtId(object.BeinhaltetIn)
if obj.ID > 0 {
object.ContainedIn = obj.ID
object.ContainerType = "Transportation"
//err= object.Save()
}
}
if object.ContainedIn > 0 {
err := object.Save()
if err != nil {
// ContainedIn saved
return err
}
}
}
return nil
}
func (object *Behaeltniss) LinkContainer() error {
//var err error
if object.BeinhaltetIn != "" {
co := Behaeltniss{}
co.FirstExtId(object.BeinhaltetIn)
if co.ID > 0 {
object.ContainedIn = co.ID
//err= object.Save()
} else {
obj := Transportation{}
if co.ID > 0 {
object.ContainedIn = obj.ID
//err= object.Save()
}
}
if object.ContainedIn > 0 {
err := object.Save()
if err != nil {
// ContainedIn saved
return err
}
}
}
return nil
}
func (object *Transportation) LinkContainer() error {
//var err error
if object.BeinhaltetIn != "" {
co := Behaeltniss{}
co.FirstExtId(object.BeinhaltetIn)
if co.ID > 0 {
object.ContainedIn = co.ID
//err= object.Save()
} else {
obj := Transportation{}
if co.ID > 0 {
object.ContainedIn = obj.ID
//err= object.Save()
}
}
if object.ContainedIn > 0 {
err := object.Save()
if err != nil {
// ContainedIn saved
return err
}
}
}
return nil
}
+27
View File
@@ -163,6 +163,7 @@ func ImportVTTJSON(fileName string) (*character.Char, error) {
Abw: imp.Transportmittel[i].Magisch.Abw,
Ausgebrannt: imp.Transportmittel[i].Magisch.Ausgebrannt,
},
ExtID: imp.Transportmittel[i].ID,
})
}
for i := range imp.Ausruestung {
@@ -201,6 +202,7 @@ func ImportVTTJSON(fileName string) (*character.Char, error) {
Abw: imp.Behaeltnisse[i].Magisch.Abw,
Ausgebrannt: imp.Behaeltnisse[i].Magisch.Ausgebrannt,
},
ExtID: imp.Behaeltnisse[i].ID,
})
}
for i := range imp.Waffen {
@@ -246,5 +248,30 @@ func ImportVTTJSON(fileName string) (*character.Char, error) {
if err != nil {
return nil, err
}
// Fix contained in links
for i := range char.Ausruestung {
err := char.Ausruestung[i].LinkContainer()
if err != nil {
return &char, err
}
}
for i := range char.Waffen {
err := char.Waffen[i].LinkContainer()
if err != nil {
return &char, err
}
}
for i := range char.Behaeltnisse {
err := char.Behaeltnisse[i].LinkContainer()
if err != nil {
return &char, err
}
}
for i := range char.Transportmittel {
err := char.Transportmittel[i].LinkContainer()
if err != nil {
return &char, err
}
}
return &char, nil
}
+4
View File
@@ -24,6 +24,7 @@ type Ausruestung struct {
Beschreibung string `json:"beschreibung"`
Anzahl int `json:"anzahl"`
BeinhaltetIn string `json:"beinhaltet_in"`
ContainedIn uint `json:"contained_in"`
Bonus int `json:"bonus,omitempty"`
Gewicht float64 `json:"gewicht"`
Magisch Magisch `json:"magisch"`
@@ -37,6 +38,7 @@ type Waffe struct {
Anb int `json:"anb"`
Anzahl int `json:"anzahl"`
BeinhaltetIn string `json:"beinhaltet_in"`
ContainedIn uint `json:"contained_in"`
Gewicht float64 `json:"gewicht"`
Magisch Magisch `json:"magisch"`
NameFuerSpezialisierung string `json:"nameFuerSpezialisierung"`
@@ -48,6 +50,7 @@ type Behaeltniss struct {
ImportBase
Beschreibung string `json:"beschreibung"`
BeinhaltetIn string `json:"beinhaltet_in"`
ContainedIn uint `json:"contained_in"`
Gewicht float64 `json:"gewicht"`
Magisch Magisch `json:"magisch"`
Tragkraft float64 `json:"tragkraft"`
@@ -59,6 +62,7 @@ type Transportation struct {
ImportBase
Beschreibung string `json:"beschreibung"`
BeinhaltetIn string `json:"beinhaltet_in"`
ContainedIn uint `json:"contained_in"`
Gewicht int `json:"gewicht"`
Tragkraft float64 `json:"tragkraft"`
Wert float64 `json:"wert"`
+30 -158
View File
@@ -19,6 +19,11 @@ func readImportChar(fileName string) (*importer.CharacterImport, error) {
}
character := importer.CharacterImport{}
err = json.Unmarshal(fileContent, &character)
/*
for i := range character.Behaeltnisse {
character.Behaeltnisse[i].ExtID = character.Behaeltnisse[i].ID
}
*/
return &character, err
}
@@ -387,38 +392,38 @@ func TestImportContainer2GSMaster(t *testing.T) {
character, err := readImportChar(fileName)
assert.NoError(t, err, "Expected no error when Unmarshal filecontent")
//for i := range character.Fertigkeiten {
skill, erro := importer.TransformImportContainer2GSDMaster(&character.Behaeltnisse[0])
container, erro := importer.TransformImportContainer2GSDMaster(&character.Behaeltnisse[0])
assert.NoError(t, erro, "Expected no error when Unmarshal filecontent")
assert.GreaterOrEqual(t, int(skill.ID), 1)
assert.Equal(t, "midgard", skill.System)
assert.Equal(t, "Lederrucksack", skill.Name)
assert.Equal(t, "für 25 kg", skill.Beschreibung)
assert.Equal(t, "", skill.Quelle)
assert.Equal(t, 0.5, skill.Gewicht)
assert.Equal(t, 4.0, skill.Wert)
assert.Equal(t, 25.0, skill.Volumen)
assert.Equal(t, 25.0, skill.Tragkraft)
assert.GreaterOrEqual(t, int(container.ID), 1)
assert.Equal(t, "midgard", container.System)
assert.Equal(t, "Lederrucksack", container.Name)
assert.Equal(t, "für 25 kg", container.Beschreibung)
assert.Equal(t, "", container.Quelle)
assert.Equal(t, 0.5, container.Gewicht)
assert.Equal(t, 4.0, container.Wert)
assert.Equal(t, 25.0, container.Volumen)
assert.Equal(t, 25.0, container.Tragkraft)
//}
skill2 := gsmaster.Container{}
erro = skill2.First("Lederrucksack")
container2 := gsmaster.Container{}
erro = container2.First("Lederrucksack")
assert.NoError(t, erro, "Expected no error when finding Record by name")
assert.Equal(t, 1, int(skill.ID))
assert.Equal(t, 1, int(container.ID))
skill3 := gsmaster.Container{}
erro = skill3.FirstId(1)
container3 := gsmaster.Container{}
erro = container3.FirstId(1)
assert.NoError(t, erro, "Expected no error when finding Record by ID")
assert.Equal(t, "Lederrucksack", skill3.Name)
assert.Equal(t, "Lederrucksack", container3.Name)
assert.Equal(t, skill2.ID, skill3.ID)
assert.Equal(t, skill2.System, skill3.System)
assert.Equal(t, skill2.Name, skill3.Name)
assert.Equal(t, skill2.Beschreibung, skill3.Beschreibung)
assert.Equal(t, skill2.Quelle, skill3.Quelle)
assert.Equal(t, skill2.Gewicht, skill3.Gewicht)
assert.Equal(t, skill2.Wert, skill3.Wert)
assert.Equal(t, skill2.Volumen, skill3.Volumen)
assert.Equal(t, skill2.Tragkraft, skill3.Tragkraft)
assert.Equal(t, container2.ID, container3.ID)
assert.Equal(t, container2.System, container3.System)
assert.Equal(t, container2.Name, container3.Name)
assert.Equal(t, container2.Beschreibung, container3.Beschreibung)
assert.Equal(t, container2.Quelle, container3.Quelle)
assert.Equal(t, container2.Gewicht, container3.Gewicht)
assert.Equal(t, container2.Wert, container3.Wert)
assert.Equal(t, container2.Volumen, container3.Volumen)
assert.Equal(t, container2.Tragkraft, container3.Tragkraft)
err = importer.CheckContainers2GSMaster(character.Behaeltnisse)
assert.NoError(t, err, "Expected no error when checkimg Containers against gsmaster")
@@ -538,136 +543,3 @@ func TestImportBelieve2GSMaster(t *testing.T) {
err = importer.CheckBelieve2GSMaster(character)
assert.NoError(t, err, "Expected no error when checkimg Transüportations against gsmaster")
}
/*
func TestImportFertigkeitenStammdatenSingle(t *testing.T) {
// Setup test database
SetupTestDB()
// 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 := importer.CharacterImport{}
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]
stammF, err := importer.CheckSkill(&fertigkeit, false)
assert.Error(t, err, "expexted Error does not exist in Fertigkeit Stammdaten")
if stammF == nil && err != nil {
stammF, err = importer.CheckSkill(&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 = importer.CheckSkill(&fertigkeit, false)
assert.NoError(t, err, "expexted no Error exist in Fertigkeit Stammdaten")
if stammF == nil && err != nil {
stammF, err = importer.CheckSkill(&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
SetupTestDB()
// 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 := importer.CharacterImport{}
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 := importer.CheckSkill(&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
SetupTestDB()
// 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 := importer.CharacterImport{}
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 := importer.CheckSpell(&zauber, false)
assert.Error(t, err, "expexted Error does not exist in zauber Stammdaten")
if stammF == nil && err != nil {
stammF, err = importer.CheckSpell(&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 = importer.CheckSpell(&zauber, false)
assert.NoError(t, err, "expexted no Error exist in zauber Stammdaten")
if stammF == nil && err != nil {
stammF, err = importer.CheckSpell(&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))
}
*/