Char complete

This commit is contained in:
2024-12-29 16:18:09 +01:00
parent 123db8f424
commit 6cd48d8f93
2 changed files with 216 additions and 95 deletions
+21 -70
View File
@@ -57,13 +57,11 @@ type Char struct {
Spezialisierung database.StringArray `gorm:"type:TEXT" json:"spezialisierung"`
Bennies Bennies `gorm:"foreignKey:CharacterID" json:"bennies"`
Erfahrungsschatz Erfahrungsschatz `gorm:"foreignKey:CharacterID" json:"erfahrungsschatz"`
/*
Transportmittel []Transportation `gorm:"foreignKey:CharacterID" json:"transportmittel"`
Ausruestung []Ausruestung `gorm:"foreignKey:CharacterID" json:"ausruestung"`
Behaeltnisse []Behaeltniss `gorm:"foreignKey:CharacterID" json:"behaeltnisse"`
Waffen []Waffe `gorm:"foreignKey:CharacterID" json:"waffen"`
Image string `json:"image,omitempty"`
*/
Waffen []Waffe `gorm:"foreignKey:CharacterID" json:"waffen"`
Behaeltnisse []Behaeltniss `gorm:"foreignKey:CharacterID" json:"behaeltnisse"`
Transportmittel []Transportation `gorm:"foreignKey:CharacterID" json:"transportmittel"`
Ausruestung []Ausruestung `gorm:"foreignKey:CharacterID" json:"ausruestung"`
Image string `json:"image,omitempty"`
}
// Au, Gs, Gw ,In, Ko, Pa, St, Wk, Zt
@@ -75,15 +73,12 @@ type Eigenschaft struct {
type Ausruestung struct {
BamortCharTrait
ID uint `gorm:"primaryKey" json:"dbid"`
Name string `json:"name"`
Magisch
Beschreibung string `json:"beschreibung"`
Anzahl int `json:"anzahl"`
BeinhaltetIn *string `json:"beinhaltet_in"`
BeinhaltetIn string `json:"beinhaltet_in"`
Bonus int `json:"bonus,omitempty"`
Gewicht float64 `json:"gewicht"`
Magisch Magisch `json:"magisch"`
Wert float64 `json:"wert"`
}
@@ -109,16 +104,13 @@ type Zauber struct {
type Waffe struct {
BamortCharTrait
ID uint `gorm:"primaryKey" json:"dbid"`
Name string `json:"name"`
Beschreibung string `json:"beschreibung"`
Abwb int `json:"abwb"`
Anb int `json:"anb"`
Anzahl int `json:"anzahl"`
BeinhaltetIn *string `json:"beinhaltet_in"`
Gewicht float64 `json:"gewicht"`
Magisch Magisch `json:"magisch"`
Beschreibung string `json:"beschreibung"`
Abwb int `json:"abwb"`
Anb int `json:"anb"`
Anzahl int `json:"anzahl"`
BeinhaltetIn string `json:"beinhaltet_in"`
Gewicht float64 `json:"gewicht"`
Magisch
NameFuerSpezialisierung string `json:"nameFuerSpezialisierung"`
Schb int `json:"schb"`
Wert float64 `json:"wert"`
@@ -163,13 +155,13 @@ type B struct {
type Behaeltniss struct {
BamortCharTrait
Beschreibung string `json:"beschreibung"`
//BeinhaltetIn any `json:"beinhaltet_in"`
Gewicht float64 `json:"gewicht"`
Magisch Magisch ` json:"magisch"`
Wert float64 `json:"wert"`
Tragkraft float64 `json:"tragkraft"`
Volumen float64 `json:"volumen"`
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"`
Magisch
}
type Transportation struct {
@@ -177,47 +169,6 @@ type Transportation struct {
//Magisch Magisch `gorm:"polymorphic:Item;polymorphicValue:Transportmittel" json:"magisch"`
}
/*
type MagischAusruestung struct {
ID uint `gorm:"primaryKey" json:"id"`
//ItemType string `gorm:"index" json:"item_type"` // Type of the referenced item (e.g., "Ausruestung")
//ItemID uint `gorm:"index" json:"item_id"` // ID of the referenced item
AusruestungID int `gorm:"index" json:"ausruestung_id"`
Abw int `json:"abw"`
Ausgebrannt bool `json:"ausgebrannt"`
IstMagisch bool `json:"ist_magisch"`
}
type MagischWaffe struct {
ID uint `gorm:"primaryKey" json:"id"`
//ItemType string `gorm:"index" json:"item_type"` // Type of the referenced item (e.g., "Ausruestung")
//ItemID uint `gorm:"index" json:"item_id"` // ID of the referenced item
WaffenID int `gorm:"index" json:"waffen_id"`
Abw int `json:"abw"`
Ausgebrannt bool `json:"ausgebrannt"`
IstMagisch bool `json:"ist_magisch"`
}
type MagischBehaelter struct {
ID uint `gorm:"primaryKey" json:"id"`
//ItemType string `gorm:"index" json:"item_type"` // Type of the referenced item (e.g., "Ausruestung")
//ItemID uint `gorm:"index" json:"item_id"` // ID of the referenced item
BehaeltnissID int `gorm:"index" json:"behaeltniss_id"`
Abw int `json:"abw"`
Ausgebrannt bool `json:"ausgebrannt"`
IstMagisch bool `json:"ist_magisch"`
}
type MagischTransport struct {
ID uint `gorm:"primaryKey" json:"id"`
//ItemType string `gorm:"index" json:"item_type"` // Type of the referenced item (e.g., "Ausruestung")
//ItemID uint `gorm:"index" json:"item_id"` // ID of the referenced item
TransportationID int `gorm:"index" json:"transportation_id"`
Abw int `json:"abw"`
Ausgebrannt bool `json:"ausgebrannt"`
IstMagisch bool `json:"ist_magisch"`
}
*/
type Magisch struct {
IstMagisch bool `json:"ist_magisch"`
Abw int `json:"abw"`
+195 -25
View File
@@ -3,6 +3,10 @@ package tests
import (
"bamort/database"
"bamort/models"
"encoding/base64"
"fmt"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
@@ -23,22 +27,50 @@ func initTestDB4Character() *gorm.DB {
&models.Waffenfertigkeit{},
&models.Bennies{},
&models.Erfahrungsschatz{},
/*
&models.ImAusruestung{},
&models.ImWaffe{},
&models.ImGestalt{},
&models.ImEigenschaften{},
&models.ImBehaeltniss{},
&models.ImTransportation{},
&models.ImMagisch{},
&models.ImCharacterImport{},
&models.LookupSkill{}, //needed for stammdaten.CheckFertigkeit
&models.LookupSpell{}, //needed for stammdaten.CheckZauber
*/
&models.Waffe{},
&models.Behaeltniss{},
&models.Transportation{},
&models.Ausruestung{},
)
return db
}
// ReadImageAsBase64 reads an image file and returns it as a Base64 string
// with the prefix "data:image;base64,"
func ReadImageAsBase64(filePath string) (string, error) {
// Read the image file into bytes
imageBytes, err := os.ReadFile(filePath)
if err != nil {
return "", fmt.Errorf("failed to read image file: %w", err)
}
// Detect the file extension
ext := filepath.Ext(filePath)
mimeType := "image" // Default MIME type
switch ext {
case ".jpg", ".jpeg":
mimeType = "image/jpeg"
case ".png":
mimeType = "image/png"
case ".gif":
mimeType = "image/gif"
case ".bmp":
mimeType = "image/bmp"
case ".svg":
mimeType = "image/svg+xml"
default:
return "", fmt.Errorf("unsupported image format: %s", ext)
}
// Encode the bytes to a Base64 string
base64String := base64.StdEncoding.EncodeToString(imageBytes)
// Prefix with the MIME type
fullBase64String := fmt.Sprintf("data:%s;base64,%s", mimeType, base64String)
return fullBase64String, nil
}
func createChar() *models.Char {
char := models.Char{}
@@ -187,18 +219,93 @@ func createChar() *models.Char {
},
},
}
/*
char.Eigenschaften=""
char.Transportmittel=""
char.Ausruestung=""
char.Behaeltnisse=""
char.Waffen=""
char.Waffenfertigkeiten=""
char.Spezialisierung:=database.StringArray{"Kriegshammer", "Armbrust:schwer", "Stielhammer"}
char.Bennies=""
char.Erfahrungsschatz="325"
char.Image=""
*/
char.Waffen = []models.Waffe{
{
BamortCharTrait: models.BamortCharTrait{
BamortBase: models.BamortBase{
Name: "Armbrust:schwer", System: "Midgard",
},
},
Beschreibung: "Eine Armbrust schwer zu spannen",
Abwb: 0,
Anb: 0,
Schb: 0,
Anzahl: 1,
Gewicht: 5,
NameFuerSpezialisierung: "Armbrust:schwer",
Wert: 40,
Magisch: models.Magisch{
IstMagisch: false,
Abw: 0,
Ausgebrannt: false,
},
BeinhaltetIn: "moam-container-47363",
},
}
char.Behaeltnisse = []models.Behaeltniss{
{
BamortCharTrait: models.BamortCharTrait{
BamortBase: models.BamortBase{
Name: "Lederrucksack", System: "Midgard",
},
},
Beschreibung: "f\u00fcr 25 kg",
Wert: 4,
Tragkraft: 25,
Volumen: 25,
Gewicht: 0.5,
Magisch: models.Magisch{
IstMagisch: false,
Abw: 0,
Ausgebrannt: false,
},
//BeinhaltetIn: "moam-container-47363",
},
}
char.Transportmittel = []models.Transportation{
{
Behaeltniss: models.Behaeltniss{
BamortCharTrait: models.BamortCharTrait{
BamortBase: models.BamortBase{
Name: "Karren", System: "Midgard",
},
},
Beschreibung: "für 500 kg",
Wert: 40,
Tragkraft: 500,
Volumen: 250,
Gewicht: 55.5,
Magisch: models.Magisch{
IstMagisch: true,
Abw: 30,
Ausgebrannt: false,
},
//BeinhaltetIn: "moam-container-47363",
},
},
}
char.Ausruestung = []models.Ausruestung{
{
BamortCharTrait: models.BamortCharTrait{
BamortBase: models.BamortBase{
Name: "Lederr\u00fcstung", System: "Midgard",
},
},
Beschreibung: "",
Wert: 30,
Anzahl: 1,
Gewicht: 13.0,
Bonus: 0,
Magisch: models.Magisch{
IstMagisch: false,
Abw: 0,
Ausgebrannt: false,
},
//BeinhaltetIn: "moam-container-47363",
},
}
fileName := fmt.Sprintf("../testdata/%s", "Krampus.png")
char.Image, _ = ReadImageAsBase64(fileName)
return &char
}
@@ -326,7 +433,7 @@ func TestCreateChar(t *testing.T) {
assert.Equal(t, 0, char.Waffenfertigkeiten[i].Pp)
assert.Equal(t, "", char.Waffenfertigkeiten[i].Bemerkung)
assert.LessOrEqual(t, 1, int(char.Waffenfertigkeiten[i].CharacterID))
//--
i = 0
assert.LessOrEqual(t, 1, len(char.Zauber))
assert.LessOrEqual(t, i+1, int(char.Zauber[i].ID))
@@ -353,6 +460,69 @@ func TestCreateChar(t *testing.T) {
assert.Equal(t, 1, int(char.Erfahrungsschatz.ID))
assert.Equal(t, "Midgard", char.Erfahrungsschatz.System)
i = 0
assert.LessOrEqual(t, 1, len(char.Waffen))
assert.LessOrEqual(t, i+1, int(char.Waffen[i].ID))
assert.Equal(t, "Armbrust:schwer", char.Waffen[i].Name)
assert.Equal(t, "Midgard", char.Waffen[i].System)
assert.Equal(t, "Eine Armbrust schwer zu spannen", char.Waffen[i].Beschreibung)
assert.Equal(t, 0, char.Waffen[i].Abwb)
assert.Equal(t, 0, char.Waffen[i].Anb)
assert.Equal(t, 0, char.Waffen[i].Schb)
assert.Equal(t, 1, char.Waffen[i].Anzahl)
assert.Equal(t, 5.0, char.Waffen[i].Gewicht)
assert.Equal(t, "Armbrust:schwer", char.Waffen[i].NameFuerSpezialisierung)
assert.Equal(t, "moam-container-47363", char.Waffen[i].BeinhaltetIn)
assert.Equal(t, false, char.Waffen[i].IstMagisch)
assert.Equal(t, 0, char.Waffen[i].Abw)
assert.Equal(t, false, char.Waffen[i].Ausgebrannt)
assert.LessOrEqual(t, 0, int(char.Waffen[i].CharacterID))
i = 0
assert.LessOrEqual(t, 1, len(char.Behaeltnisse))
assert.LessOrEqual(t, i+1, int(char.Behaeltnisse[i].ID))
assert.LessOrEqual(t, 0, int(char.Behaeltnisse[i].CharacterID))
assert.Equal(t, "Midgard", char.Behaeltnisse[i].System)
assert.Equal(t, "Lederrucksack", char.Behaeltnisse[i].Name)
assert.Equal(t, "für 25 kg", char.Behaeltnisse[i].Beschreibung)
assert.Equal(t, 4.0, char.Behaeltnisse[i].Wert)
assert.Equal(t, 25.0, char.Behaeltnisse[i].Tragkraft)
assert.Equal(t, 25.0, char.Behaeltnisse[i].Volumen)
assert.Equal(t, 0.5, char.Behaeltnisse[i].Gewicht)
assert.Equal(t, false, char.Behaeltnisse[i].IstMagisch)
assert.Equal(t, 0, char.Behaeltnisse[i].Abw)
assert.Equal(t, false, char.Behaeltnisse[i].Ausgebrannt)
i = 0
assert.LessOrEqual(t, 1, len(char.Transportmittel))
assert.LessOrEqual(t, i+1, int(char.Transportmittel[i].ID))
assert.LessOrEqual(t, 0, int(char.Transportmittel[i].CharacterID))
assert.Equal(t, "Midgard", char.Transportmittel[i].System)
assert.Equal(t, "Karren", char.Transportmittel[i].Name)
assert.Equal(t, "für 500 kg", char.Transportmittel[i].Beschreibung)
assert.Equal(t, 40.0, char.Transportmittel[i].Wert)
assert.Equal(t, 500.0, char.Transportmittel[i].Tragkraft)
assert.Equal(t, 250.0, char.Transportmittel[i].Volumen)
assert.Equal(t, 55.5, char.Transportmittel[i].Gewicht)
assert.Equal(t, true, char.Transportmittel[i].IstMagisch)
assert.Equal(t, 30, char.Transportmittel[i].Abw)
assert.Equal(t, false, char.Transportmittel[i].Ausgebrannt)
i = 0
assert.LessOrEqual(t, 1, len(char.Ausruestung))
assert.LessOrEqual(t, i+1, int(char.Ausruestung[i].ID))
assert.LessOrEqual(t, 0, int(char.Ausruestung[i].CharacterID))
assert.Equal(t, "Midgard", char.Ausruestung[i].System)
assert.Equal(t, "Lederrüstung", char.Ausruestung[i].Name)
assert.Equal(t, "", char.Ausruestung[i].Beschreibung)
assert.Equal(t, 30.0, char.Ausruestung[i].Wert)
assert.Equal(t, 13.0, char.Ausruestung[i].Gewicht)
assert.Equal(t, 1, char.Ausruestung[i].Anzahl)
assert.Equal(t, false, char.Ausruestung[i].IstMagisch)
assert.Equal(t, 0, char.Ausruestung[i].Abw)
assert.Equal(t, false, char.Ausruestung[i].Ausgebrannt)
assert.Contains(t, char.Image, "data:image/png;base64,")
/*
// loading file to Modell