WIP migration character
This commit is contained in:
@@ -55,15 +55,15 @@ func TestSetupCheck(t *testing.T) {
|
||||
err := database.MigrateStructure()
|
||||
assert.NoError(t, err, "No error expected when migrating database tables")
|
||||
|
||||
err = character.MigrateStructure()
|
||||
assert.NoError(t, err, "No error expected when migrating character tables")
|
||||
err = models.MigrateStructure()
|
||||
assert.NoError(t, err, "No error expected when migrating gsmaster tables")
|
||||
|
||||
/*err = character.MigrateStructure()
|
||||
assert.NoError(t, err, "No error expected when migrating character tables")*/
|
||||
|
||||
err = user.MigrateStructure()
|
||||
assert.NoError(t, err, "No error expected when migrating user tables")
|
||||
|
||||
err = models.MigrateStructure()
|
||||
assert.NoError(t, err, "No error expected when migrating gsmaster tables")
|
||||
|
||||
err = equipment.MigrateStructure()
|
||||
assert.NoError(t, err, "No error expected when migrating equipment tables")
|
||||
|
||||
@@ -104,7 +104,7 @@ func TestListCharacters(t *testing.T) {
|
||||
assert.Equal(t, http.StatusOK, respRecorder.Code)
|
||||
|
||||
// Assert the response body
|
||||
var listOfCharacter []*character.CharList
|
||||
var listOfCharacter []*models.CharList
|
||||
err := json.Unmarshal(respRecorder.Body.Bytes(), &listOfCharacter)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "Harsk Hammerhuter, Zen", listOfCharacter[0].Name)
|
||||
@@ -148,7 +148,7 @@ func TestGetCharacters(t *testing.T) {
|
||||
assert.Equal(t, http.StatusOK, respRecorder.Code)
|
||||
|
||||
// Assert the response body
|
||||
var listOfCharacter *character.Char
|
||||
var listOfCharacter *models.Char
|
||||
err := json.Unmarshal(respRecorder.Body.Bytes(), &listOfCharacter)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "Harsk Hammerhuter, Zen", listOfCharacter.Name)
|
||||
|
||||
@@ -50,9 +50,9 @@ func ReadImageAsBase64(filePath string) (string, error) {
|
||||
return fullBase64String, nil
|
||||
}
|
||||
|
||||
func createChar() *Char {
|
||||
func createChar() *models.Char {
|
||||
|
||||
char := Char{}
|
||||
char := models.Char{}
|
||||
char.Name = "Harsk Hammerhuter, Zen"
|
||||
char.Rasse = "Zwerg"
|
||||
char.Typ = "Krieger"
|
||||
@@ -72,7 +72,7 @@ func createChar() *Char {
|
||||
char.Merkmale.Augenfarbe = "blau"
|
||||
char.Merkmale.Haarfarbe = "sandfarben"
|
||||
char.Merkmale.Sonstige = ""
|
||||
char.Eigenschaften = []Eigenschaft{
|
||||
char.Eigenschaften = []models.Eigenschaft{
|
||||
{Name: "Au", Value: 74},
|
||||
{Name: "Gs", Value: 96},
|
||||
{Name: "Gw", Value: 70},
|
||||
@@ -179,7 +179,7 @@ func createChar() *Char {
|
||||
char.Spezialisierung = database.StringArray{
|
||||
"Kriegshammer", "Armbrust:schwer", "Stielhammer",
|
||||
}
|
||||
char.Bennies = Bennies{
|
||||
char.Bennies = models.Bennies{
|
||||
Sg: 1,
|
||||
Gg: 0,
|
||||
Gp: 0,
|
||||
@@ -189,7 +189,7 @@ func createChar() *Char {
|
||||
},
|
||||
},
|
||||
}
|
||||
char.Erfahrungsschatz = Erfahrungsschatz{
|
||||
char.Erfahrungsschatz = models.Erfahrungsschatz{
|
||||
ES: 325,
|
||||
EP: 300,
|
||||
BamortCharTrait: models.BamortCharTrait{
|
||||
@@ -535,7 +535,7 @@ func setSpezialisierung(liste *database.StringArray, pos int,name string) {
|
||||
}
|
||||
*/
|
||||
|
||||
func charTests(t *testing.T, char *Char) {
|
||||
func charTests(t *testing.T, char *models.Char) {
|
||||
assert.LessOrEqual(t, 0, int(char.ID))
|
||||
assert.Equal(t, "Harsk Hammerhuter, Zen", char.Name)
|
||||
assert.Equal(t, "Zwerg", char.Rasse)
|
||||
@@ -744,7 +744,7 @@ func charTests(t *testing.T, char *Char) {
|
||||
|
||||
func TestCreateChar(t *testing.T) {
|
||||
database.SetupTestDB()
|
||||
err := MigrateStructure()
|
||||
err := models.MigrateStructure()
|
||||
if err == nil {
|
||||
err = skills.MigrateStructure()
|
||||
if err == nil {
|
||||
@@ -762,7 +762,7 @@ func TestCreateChar(t *testing.T) {
|
||||
assert.NoError(t, err, "expected no error finding existing char")
|
||||
}
|
||||
|
||||
char2 := Char{}
|
||||
char2 := models.Char{}
|
||||
char2.Name = "Harsk Hammerhuter, Zen"
|
||||
err = char2.First(char2.Name)
|
||||
assert.NoError(t, err, "expected no error finding the char")
|
||||
@@ -772,7 +772,7 @@ func TestCreateChar(t *testing.T) {
|
||||
func TestReadChar(t *testing.T) {
|
||||
database.SetupTestDB()
|
||||
TestCreateChar(t)
|
||||
char := Char{}
|
||||
char := models.Char{}
|
||||
char.Name = "Harsk Hammerhuter, Zen"
|
||||
err := char.First(char.Name)
|
||||
assert.NoError(t, err, "expected NO error character not found")
|
||||
|
||||
@@ -2,13 +2,14 @@ package character
|
||||
|
||||
import (
|
||||
"bamort/database"
|
||||
"bamort/models"
|
||||
|
||||
"fmt"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func SaveCharacterToDB(character *Char) error {
|
||||
func SaveCharacterToDB(character *models.Char) error {
|
||||
// Use GORM transaction to ensure atomicity
|
||||
return database.DB.Transaction(func(tx *gorm.DB) error {
|
||||
// Save the main character record
|
||||
@@ -18,29 +19,3 @@ func SaveCharacterToDB(character *Char) error {
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func MigrateStructure(db ...*gorm.DB) error {
|
||||
// Use provided DB or default to database.DB
|
||||
var targetDB *gorm.DB
|
||||
if len(db) > 0 && db[0] != nil {
|
||||
targetDB = db[0]
|
||||
} else {
|
||||
targetDB = database.DB
|
||||
}
|
||||
|
||||
err := targetDB.AutoMigrate(
|
||||
&Char{},
|
||||
&Eigenschaft{},
|
||||
&Lp{},
|
||||
&Ap{},
|
||||
&B{},
|
||||
&Merkmale{},
|
||||
&Erfahrungsschatz{},
|
||||
&Bennies{},
|
||||
&Vermoegen{},
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ func TestDebugPracticePoints(t *testing.T) {
|
||||
defer database.ResetTestDB()
|
||||
|
||||
// Migrate the schema
|
||||
err := MigrateStructure()
|
||||
err := models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Also migrate skills and equipment to avoid errors
|
||||
@@ -30,7 +30,7 @@ func TestDebugPracticePoints(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Create a test character manually using GORM
|
||||
character := &Char{
|
||||
character := &models.Char{
|
||||
BamortBase: models.BamortBase{
|
||||
Name: "Test Character",
|
||||
},
|
||||
@@ -57,7 +57,7 @@ func TestDebugPracticePoints(t *testing.T) {
|
||||
t.Logf("Body: %s", w.Body.String())
|
||||
|
||||
// Check if the character exists in database
|
||||
var testChar Char
|
||||
var testChar models.Char
|
||||
err = database.DB.First(&testChar, character.ID).Error
|
||||
t.Logf("Character exists in DB: %v, ID: %d, Error: %v", err == nil, character.ID, err)
|
||||
}
|
||||
|
||||
@@ -25,14 +25,14 @@ func respondWithError(c *gin.Context, status int, message string) {
|
||||
}
|
||||
|
||||
func ListCharacters(c *gin.Context) {
|
||||
var characters []Char
|
||||
var listOfChars []CharList
|
||||
var characters []models.Char
|
||||
var listOfChars []models.CharList
|
||||
if err := database.DB.Find(&characters).Error; err != nil {
|
||||
respondWithError(c, http.StatusInternalServerError, "Failed to retrieve characters")
|
||||
return
|
||||
}
|
||||
for i := range characters {
|
||||
listOfChars = append(listOfChars, CharList{
|
||||
listOfChars = append(listOfChars, models.CharList{
|
||||
BamortBase: models.BamortBase{
|
||||
ID: characters[i].ID,
|
||||
Name: characters[i].Name,
|
||||
@@ -47,7 +47,7 @@ func ListCharacters(c *gin.Context) {
|
||||
}
|
||||
|
||||
func CreateCharacter(c *gin.Context) {
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := c.ShouldBindJSON(&character); err != nil {
|
||||
respondWithError(c, http.StatusBadRequest, err.Error())
|
||||
return
|
||||
@@ -62,7 +62,7 @@ func CreateCharacter(c *gin.Context) {
|
||||
}
|
||||
func GetCharacter(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var character Char
|
||||
var character models.Char
|
||||
err := character.FirstID(id)
|
||||
if err != nil {
|
||||
respondWithError(c, http.StatusInternalServerError, "Failed to retrieve character")
|
||||
@@ -73,7 +73,7 @@ func GetCharacter(c *gin.Context) {
|
||||
}
|
||||
func UpdateCharacter(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var character Char
|
||||
var character models.Char
|
||||
|
||||
// First, find the existing character
|
||||
err := character.FirstID(id)
|
||||
@@ -98,7 +98,7 @@ func UpdateCharacter(c *gin.Context) {
|
||||
}
|
||||
func DeleteCharacter(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var character Char
|
||||
var character models.Char
|
||||
err := character.FirstID(id)
|
||||
if err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Character not found")
|
||||
@@ -128,8 +128,8 @@ func AddFertigkeit(charID uint, fertigkeit *skills.Fertigkeit) error {
|
||||
// Append the new Fertigkeit to the slice of the characters property
|
||||
//character.Fertigkeiten = append(character.Fertigkeiten, fertigkeit)
|
||||
|
||||
func ToFeChar(object *Char) *FeChar {
|
||||
feC := &FeChar{
|
||||
func ToFeChar(object *models.Char) *models.FeChar {
|
||||
feC := &models.FeChar{
|
||||
Char: *object,
|
||||
}
|
||||
skills, innateSkills, categories := splitSkills(object.Fertigkeiten)
|
||||
@@ -169,7 +169,7 @@ func GetLearnSkillCost(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
|
||||
// Load the character from the database
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusInternalServerError, "Failed to retrieve character")
|
||||
return
|
||||
@@ -203,7 +203,7 @@ func GetLearnSpellCost(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
|
||||
// Load the character from the database
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusInternalServerError, "Failed to retrieve character")
|
||||
return
|
||||
@@ -339,7 +339,7 @@ type ExperienceAndWealthResponse struct {
|
||||
// GetCharacterExperienceAndWealth gibt nur die EP und Vermögensdaten eines Charakters zurück
|
||||
func GetCharacterExperienceAndWealth(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var character Char
|
||||
var character models.Char
|
||||
|
||||
// Lade nur die benötigten Felder
|
||||
err := database.DB.
|
||||
@@ -379,7 +379,7 @@ type UpdateExperienceRequest struct {
|
||||
// UpdateCharacterExperience aktualisiert die Erfahrungspunkte eines Charakters
|
||||
func UpdateCharacterExperience(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var character Char
|
||||
var character models.Char
|
||||
|
||||
// Lade den Charakter
|
||||
err := database.DB.
|
||||
@@ -411,7 +411,7 @@ func UpdateCharacterExperience(c *gin.Context) {
|
||||
// Aktualisiere oder erstelle Erfahrungsschatz
|
||||
if character.Erfahrungsschatz.ID == 0 {
|
||||
// Erstelle neuen Erfahrungsschatz
|
||||
character.Erfahrungsschatz = Erfahrungsschatz{
|
||||
character.Erfahrungsschatz = models.Erfahrungsschatz{
|
||||
BamortCharTrait: models.BamortCharTrait{
|
||||
CharacterID: character.ID,
|
||||
},
|
||||
@@ -469,7 +469,7 @@ type UpdateWealthRequest struct {
|
||||
// UpdateCharacterWealth aktualisiert das Vermögen eines Charakters
|
||||
func UpdateCharacterWealth(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
var character Char
|
||||
var character models.Char
|
||||
|
||||
// Lade den Charakter
|
||||
err := database.DB.
|
||||
@@ -505,7 +505,7 @@ func UpdateCharacterWealth(c *gin.Context) {
|
||||
// Aktualisiere oder erstelle Vermögen
|
||||
if character.Vermoegen.ID == 0 {
|
||||
// Erstelle neues Vermögen
|
||||
character.Vermoegen = Vermoegen{
|
||||
character.Vermoegen = models.Vermoegen{
|
||||
BamortCharTrait: models.BamortCharTrait{
|
||||
CharacterID: character.ID,
|
||||
},
|
||||
@@ -593,7 +593,7 @@ func getValueOrDefault(value *int, defaultValue int) int {
|
||||
}
|
||||
|
||||
// updateOrCreateSkill aktualisiert eine vorhandene Fertigkeit oder erstellt eine neue
|
||||
func updateOrCreateSkill(character *Char, skillName string, newLevel int) error {
|
||||
func updateOrCreateSkill(character *models.Char, skillName string, newLevel int) error {
|
||||
// Suche erst in normalen Fertigkeiten
|
||||
for i := range character.Fertigkeiten {
|
||||
if character.Fertigkeiten[i].Name == skillName {
|
||||
@@ -669,7 +669,7 @@ type LearnSpellRequest struct {
|
||||
}
|
||||
|
||||
// calculateMultiLevelCosts berechnet die Kosten für mehrere Level-Verbesserungen mit gsmaster.GetLernCostNextLevel
|
||||
func calculateMultiLevelCosts(character *Char, skillName string, currentLevel int, levelsToLearn []int, rewardType string, usePP, useGold int) (*models.LearnCost, error) {
|
||||
func calculateMultiLevelCosts(character *models.Char, skillName string, currentLevel int, levelsToLearn []int, rewardType string, usePP, useGold int) (*models.LearnCost, error) {
|
||||
if len(levelsToLearn) == 0 {
|
||||
return nil, fmt.Errorf("keine Level zum Lernen angegeben")
|
||||
}
|
||||
@@ -758,7 +758,7 @@ func calculateMultiLevelCosts(character *Char, skillName string, currentLevel in
|
||||
}
|
||||
|
||||
// getCharacterClass gibt die Charakterklassen-Abkürzung zurück
|
||||
func getCharacterClass(character *Char) string {
|
||||
func getCharacterClass(character *models.Char) string {
|
||||
if len(character.Typ) > 3 {
|
||||
return gsmaster.GetClassAbbreviation(character.Typ)
|
||||
}
|
||||
@@ -768,7 +768,7 @@ func getCharacterClass(character *Char) string {
|
||||
// LearnSkill lernt eine neue Fertigkeit und erstellt Audit-Log-Einträge
|
||||
func LearnSkill(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
var character Char
|
||||
var character models.Char
|
||||
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Charakter nicht gefunden")
|
||||
@@ -981,7 +981,7 @@ func ImproveSkill(c *gin.Context) {
|
||||
}
|
||||
|
||||
// Hole Charakter über die ID aus dem Request
|
||||
var character Char
|
||||
var character models.Char
|
||||
err := database.DB.
|
||||
Preload("Fertigkeiten").
|
||||
Preload("Waffenfertigkeiten").
|
||||
@@ -1197,7 +1197,7 @@ func ImproveSkill(c *gin.Context) {
|
||||
// LearnSpell lernt einen neuen Zauber und erstellt Audit-Log-Einträge
|
||||
func LearnSpell(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
var character Char
|
||||
var character models.Char
|
||||
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Charakter nicht gefunden")
|
||||
@@ -1323,7 +1323,7 @@ func GetAvailableSkills(c *gin.Context) {
|
||||
characterID := c.Param("id")
|
||||
rewardType := c.Query("reward_type")
|
||||
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := database.DB.Preload("Fertigkeiten").Preload("Erfahrungsschatz").Preload("Vermoegen").First(&character, characterID).Error; err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Character not found")
|
||||
return
|
||||
@@ -1386,7 +1386,7 @@ func GetAvailableSkills(c *gin.Context) {
|
||||
}
|
||||
|
||||
// calculateSkillLearningCosts berechnet die EP- und Goldkosten für das Lernen einer Fertigkeit mit GetLernCostNextLevel
|
||||
func calculateSkillLearningCosts(skill models.Skill, character Char, rewardType string) (int, int) {
|
||||
func calculateSkillLearningCosts(skill models.Skill, character models.Char, rewardType string) (int, int) {
|
||||
// Erstelle LernCostRequest für das Lernen (Level 0 -> 1)
|
||||
var rewardTypePtr *string
|
||||
if rewardType != "" && rewardType != "default" {
|
||||
|
||||
@@ -20,15 +20,12 @@ func TestImproveSkillHandler(t *testing.T) {
|
||||
database.SetupTestDB(true, true)
|
||||
defer database.ResetTestDB()
|
||||
|
||||
// Migrate the schema
|
||||
err := MigrateStructure()
|
||||
err := models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Also migrate skills and equipment to avoid preload errors
|
||||
err = skills.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
err = models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Create test character with ID 20
|
||||
/*
|
||||
@@ -140,7 +137,7 @@ func TestImproveSkillHandler(t *testing.T) {
|
||||
assert.Equal(t, "Fertigkeit erfolgreich verbessert", response["message"])
|
||||
|
||||
// Verify character state was updated correctly
|
||||
var updatedChar Char
|
||||
var updatedChar models.Char
|
||||
err = updatedChar.FirstID("20")
|
||||
assert.NoError(t, err)
|
||||
|
||||
@@ -157,7 +154,7 @@ func TestImproveSkillHandler(t *testing.T) {
|
||||
|
||||
t.Run("ImproveSkill with insufficient EP", func(t *testing.T) {
|
||||
// Create character with insufficient EP
|
||||
poorChar := Char{
|
||||
poorChar := models.Char{
|
||||
BamortBase: models.BamortBase{
|
||||
ID: 21,
|
||||
Name: "Poor Test Character",
|
||||
@@ -165,13 +162,13 @@ func TestImproveSkillHandler(t *testing.T) {
|
||||
Typ: "Krieger",
|
||||
Rasse: "Mensch",
|
||||
Grad: 1,
|
||||
Erfahrungsschatz: Erfahrungsschatz{
|
||||
Erfahrungsschatz: models.Erfahrungsschatz{
|
||||
BamortCharTrait: models.BamortCharTrait{
|
||||
CharacterID: 21,
|
||||
},
|
||||
ES: 5, // Insufficient EP
|
||||
},
|
||||
Vermoegen: Vermoegen{
|
||||
Vermoegen: models.Vermoegen{
|
||||
BamortCharTrait: models.BamortCharTrait{
|
||||
CharacterID: 21,
|
||||
},
|
||||
|
||||
@@ -75,7 +75,7 @@ func GetLernCost(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
charID := fmt.Sprintf("%d", request.CharId)
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Charakter nicht gefunden")
|
||||
return
|
||||
@@ -136,7 +136,7 @@ func GetSkillCost(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
|
||||
// Charakter aus der Datenbank laden
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Charakter nicht gefunden")
|
||||
return
|
||||
@@ -259,7 +259,7 @@ func GetSkillCost(c *gin.Context) {
|
||||
}
|
||||
|
||||
// Helper function to get current skill level from character
|
||||
func getCurrentSkillLevel(character *Char, skillName, skillType string) int {
|
||||
func getCurrentSkillLevel(character *models.Char, skillName, skillType string) int {
|
||||
switch skillType {
|
||||
case "skill":
|
||||
for _, skill := range character.Fertigkeiten {
|
||||
@@ -281,7 +281,7 @@ func getCurrentSkillLevel(character *Char, skillName, skillType string) int {
|
||||
}
|
||||
|
||||
// Helper function to calculate single cost
|
||||
func calculateSingleCost(character *Char, request *SkillCostRequest) (*models.LearnCost, *models.LearnCost, *skillInfo, error) {
|
||||
func calculateSingleCost(character *models.Char, request *SkillCostRequest) (*models.LearnCost, *models.LearnCost, *skillInfo, error) {
|
||||
var cost *models.LearnCost
|
||||
var err error
|
||||
var info skillInfo
|
||||
@@ -393,7 +393,7 @@ func applyReward(cost *models.LearnCost, request *SkillCostRequest) *models.Lear
|
||||
}
|
||||
|
||||
// Helper function to calculate multi-level costs
|
||||
func calculateMultiLevelCost(character *Char, request *SkillCostRequest) *MultiLevelCostResponse {
|
||||
func calculateMultiLevelCost(character *models.Char, request *SkillCostRequest) *MultiLevelCostResponse {
|
||||
if request.TargetLevel <= request.CurrentLevel {
|
||||
return nil
|
||||
}
|
||||
@@ -542,7 +542,7 @@ func getSpellInfo(spellName string) skillInfo {
|
||||
return skillInfo{Category: spell.Category, Difficulty: strconv.Itoa(spell.Stufe)}
|
||||
}
|
||||
|
||||
func canCharacterAfford(character *Char, cost *models.LearnCost) bool {
|
||||
func canCharacterAfford(character *models.Char, cost *models.LearnCost) bool {
|
||||
// Check if character has enough EP
|
||||
if character.Erfahrungsschatz.EP < cost.Ep {
|
||||
return false
|
||||
@@ -554,7 +554,7 @@ func canCharacterAfford(character *Char, cost *models.LearnCost) bool {
|
||||
return totalMoney >= cost.Money
|
||||
}
|
||||
|
||||
func generateNotes(character *Char, request *SkillCostRequest, cost *models.LearnCost) string {
|
||||
func generateNotes(character *models.Char, request *SkillCostRequest, cost *models.LearnCost) string {
|
||||
var notes []string
|
||||
|
||||
if request.Action == "learn" {
|
||||
@@ -582,7 +582,7 @@ func generateNotes(character *Char, request *SkillCostRequest, cost *models.Lear
|
||||
}
|
||||
|
||||
// getPPForSkill ermittelt die verfügbaren Praxispunkte für eine spezifische Fertigkeit
|
||||
func getPPForSkill(character *Char, skillName string) int {
|
||||
func getPPForSkill(character *models.Char, skillName string) int {
|
||||
// Ermittle die tatsächliche Fertigkeit (bei Zaubern die Zaubergruppe)
|
||||
targetSkillName := getSpellCategory(skillName)
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ func TestImprovedSkillCostAPI(t *testing.T) {
|
||||
defer database.ResetTestDB()
|
||||
|
||||
// Migrate the schema
|
||||
err := MigrateStructure()
|
||||
err := models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Also migrate skills and equipment to avoid preload errors
|
||||
@@ -31,8 +31,6 @@ func TestImprovedSkillCostAPI(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
err = equipment.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
err = models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Create test skill data
|
||||
err = createTestSkillData()
|
||||
@@ -258,7 +256,7 @@ func TestHelperFunctions(t *testing.T) {
|
||||
// This would need a proper character setup to test fully
|
||||
// For now, we're just testing the function exists and doesn't panic
|
||||
|
||||
var character Char
|
||||
var character models.Char
|
||||
level := getCurrentSkillLevel(&character, "Test", "skill")
|
||||
assert.Equal(t, -1, level, "Should return -1 for non-existent skill")
|
||||
})
|
||||
@@ -603,7 +601,7 @@ func TestGetLernCostEndpoint(t *testing.T) {
|
||||
defer database.ResetTestDB()
|
||||
|
||||
// Migrate the schema
|
||||
err := MigrateStructure()
|
||||
err := models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Also migrate skills and equipment to avoid preload errors
|
||||
@@ -611,8 +609,6 @@ func TestGetLernCostEndpoint(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
err = equipment.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
err = models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
/*
|
||||
// Create test skill data
|
||||
err = createTestSkillData()
|
||||
|
||||
@@ -2,6 +2,7 @@ package character
|
||||
|
||||
import (
|
||||
"bamort/database"
|
||||
"bamort/models"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
@@ -30,7 +31,7 @@ func GetPracticePoints(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
|
||||
// Charakter aus der Datenbank laden
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Charakter nicht gefunden")
|
||||
return
|
||||
@@ -56,7 +57,7 @@ func UpdatePracticePoints(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
|
||||
// Charakter aus der Datenbank laden
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Charakter nicht gefunden")
|
||||
return
|
||||
@@ -110,7 +111,7 @@ func AddPracticePoint(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
|
||||
// Charakter aus der Datenbank laden
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Charakter nicht gefunden")
|
||||
return
|
||||
@@ -208,7 +209,7 @@ func UsePracticePoint(c *gin.Context) {
|
||||
charID := c.Param("id")
|
||||
|
||||
// Charakter aus der Datenbank laden
|
||||
var character Char
|
||||
var character models.Char
|
||||
if err := character.FirstID(charID); err != nil {
|
||||
respondWithError(c, http.StatusNotFound, "Charakter nicht gefunden")
|
||||
return
|
||||
|
||||
@@ -22,7 +22,7 @@ func TestPracticePointsAPI(t *testing.T) {
|
||||
defer database.ResetTestDB()
|
||||
|
||||
// Migrate the schema
|
||||
err := MigrateStructure()
|
||||
err := models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Also migrate skills and equipment to avoid preload errors
|
||||
@@ -30,8 +30,6 @@ func TestPracticePointsAPI(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
err = equipment.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
err = models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Create test skill data
|
||||
err = createTestSkillData()
|
||||
@@ -39,7 +37,7 @@ func TestPracticePointsAPI(t *testing.T) {
|
||||
defer cleanupTestSkillData()
|
||||
|
||||
// Create a test character
|
||||
character := &Char{
|
||||
character := &models.Char{
|
||||
BamortBase: models.BamortBase{
|
||||
Name: "Test Character",
|
||||
},
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"bamort/database"
|
||||
"bamort/models"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -23,7 +24,7 @@ func TestGetAvailableSkills(t *testing.T) {
|
||||
|
||||
t.Run("Get available skills for existing character - default reward type", func(t *testing.T) {
|
||||
// Get a character ID from the test data
|
||||
var testChar Char
|
||||
var testChar models.Char
|
||||
err := database.DB.Preload("Fertigkeiten").Preload("Erfahrungsschatz").Preload("Vermoegen").First(&testChar).Error
|
||||
assert.NoError(t, err, "Should find a test character")
|
||||
|
||||
@@ -117,7 +118,7 @@ func TestGetAvailableSkills(t *testing.T) {
|
||||
|
||||
t.Run("Get available skills for existing character - noGold reward type", func(t *testing.T) {
|
||||
// Get a character ID from the test data
|
||||
var testChar Char
|
||||
var testChar models.Char
|
||||
err := database.DB.Preload("Fertigkeiten").Preload("Erfahrungsschatz").Preload("Vermoegen").First(&testChar).Error
|
||||
assert.NoError(t, err, "Should find a test character")
|
||||
|
||||
@@ -205,7 +206,7 @@ func TestGetAvailableSkills(t *testing.T) {
|
||||
|
||||
t.Run("Check that learned skills are excluded", func(t *testing.T) {
|
||||
// Get a character with some skills
|
||||
var testChar Char
|
||||
var testChar models.Char
|
||||
err := database.DB.Preload("Fertigkeiten").First(&testChar).Error
|
||||
assert.NoError(t, err, "Should find a test character")
|
||||
|
||||
|
||||
@@ -21,14 +21,12 @@ func TestImproveSkillUpdatesLevel(t *testing.T) {
|
||||
defer database.ResetTestDB()
|
||||
|
||||
// Migrate the schema
|
||||
err := MigrateStructure()
|
||||
err := models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Also migrate skills and equipment to avoid preload errors
|
||||
err = skills.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
err = models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Try to migrate equipment if it exists
|
||||
if equipmentDB := database.DB.Exec("CREATE TABLE IF NOT EXISTS equi_equipments (id INTEGER PRIMARY KEY, character_id INTEGER, name TEXT)"); equipmentDB.Error != nil {
|
||||
@@ -56,7 +54,7 @@ func TestImproveSkillUpdatesLevel(t *testing.T) {
|
||||
database.DB.Exec("CREATE TABLE IF NOT EXISTS equi_equipments (id INTEGER PRIMARY KEY, character_id INTEGER)")
|
||||
|
||||
// Create test character with ID 20
|
||||
testChar := Char{
|
||||
testChar := models.Char{
|
||||
BamortBase: models.BamortBase{
|
||||
ID: 20,
|
||||
Name: "Test Krieger",
|
||||
@@ -64,13 +62,13 @@ func TestImproveSkillUpdatesLevel(t *testing.T) {
|
||||
Typ: "Krieger",
|
||||
Rasse: "Mensch",
|
||||
Grad: 1,
|
||||
Erfahrungsschatz: Erfahrungsschatz{
|
||||
Erfahrungsschatz: models.Erfahrungsschatz{
|
||||
BamortCharTrait: models.BamortCharTrait{
|
||||
CharacterID: 20,
|
||||
},
|
||||
EP: 326, // Starting EP
|
||||
},
|
||||
Vermoegen: Vermoegen{
|
||||
Vermoegen: models.Vermoegen{
|
||||
BamortCharTrait: models.BamortCharTrait{
|
||||
CharacterID: 20,
|
||||
},
|
||||
@@ -95,7 +93,7 @@ func TestImproveSkillUpdatesLevel(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Verify character was created correctly
|
||||
var verifyChar Char
|
||||
var verifyChar models.Char
|
||||
err = database.DB.Preload("Fertigkeiten").Preload("Erfahrungsschatz").Preload("Vermoegen").First(&verifyChar, 20).Error
|
||||
assert.NoError(t, err)
|
||||
t.Logf("Character created with ID: %d, EP: %d, Skills: %d", verifyChar.ID, verifyChar.Erfahrungsschatz.EP, len(verifyChar.Fertigkeiten))
|
||||
@@ -141,7 +139,7 @@ func TestImproveSkillUpdatesLevel(t *testing.T) {
|
||||
assert.Equal(t, http.StatusOK, w.Code, "Status code should be 200 OK")
|
||||
|
||||
// Verify that the skill level was actually updated in the database
|
||||
var updatedChar Char
|
||||
var updatedChar models.Char
|
||||
err = database.DB.Preload("Fertigkeiten").First(&updatedChar, 20).Error
|
||||
assert.NoError(t, err)
|
||||
|
||||
@@ -193,7 +191,7 @@ func TestImproveSkillUpdatesLevel(t *testing.T) {
|
||||
assert.Equal(t, http.StatusOK, w.Code, "Status code should be 200 OK")
|
||||
|
||||
// Verify that the new skill was created in the database
|
||||
var updatedChar Char
|
||||
var updatedChar models.Char
|
||||
err = updatedChar.FirstID("20")
|
||||
assert.NoError(t, err)
|
||||
|
||||
|
||||
@@ -22,14 +22,12 @@ func TestSpellCategoryMapping(t *testing.T) {
|
||||
defer database.ResetTestDB()
|
||||
|
||||
// Migrate the schema
|
||||
err := MigrateStructure()
|
||||
err := models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
err = skills.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
err = equipment.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
err = models.MigrateStructure()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Create test skill data
|
||||
err = createTestSkillData()
|
||||
@@ -37,7 +35,7 @@ func TestSpellCategoryMapping(t *testing.T) {
|
||||
defer cleanupTestSkillData()
|
||||
|
||||
// Create a test character
|
||||
character := &Char{
|
||||
character := &models.Char{
|
||||
BamortBase: models.BamortBase{
|
||||
Name: "Test Character",
|
||||
},
|
||||
|
||||
@@ -2,7 +2,6 @@ package equipment
|
||||
|
||||
import (
|
||||
"bamort/database"
|
||||
"bamort/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -19,8 +18,8 @@ func MigrateStructure(db ...*gorm.DB) error {
|
||||
err := targetDB.AutoMigrate(
|
||||
&Ausruestung{},
|
||||
&Waffe{},
|
||||
&models.Container{},
|
||||
//&models.Transportation{},
|
||||
&Container{},
|
||||
//Transportation{},
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bamort/character"
|
||||
"bamort/database"
|
||||
"bamort/equipment"
|
||||
"bamort/models"
|
||||
@@ -46,11 +45,11 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
err = character.MigrateStructure(secondDB)
|
||||
/*err = character.MigrateStructure(secondDB)
|
||||
if err != nil {
|
||||
fmt.Printf("Fehler bei character Migration: %v\n", err)
|
||||
return
|
||||
}
|
||||
}*/
|
||||
|
||||
err = models.MigrateStructure(secondDB)
|
||||
if err != nil {
|
||||
@@ -87,7 +86,7 @@ func migrateAllToSecondDB(db *gorm.DB) error {
|
||||
migrators := []func(db ...*gorm.DB) error{
|
||||
database.MigrateStructure,
|
||||
user.MigrateStructure,
|
||||
character.MigrateStructure,
|
||||
//character.MigrateStructure,
|
||||
models.MigrateStructure,
|
||||
equipment.MigrateStructure,
|
||||
skills.MigrateStructure,
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
package gsmaster
|
||||
@@ -1 +0,0 @@
|
||||
package gsmaster
|
||||
@@ -1,8 +1,8 @@
|
||||
package importer
|
||||
|
||||
import (
|
||||
"bamort/character"
|
||||
"bamort/database"
|
||||
"bamort/models"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
@@ -14,7 +14,7 @@ func TestImportVTT2Char(t *testing.T) {
|
||||
fileName := fmt.Sprintf("../testdata/%s", "VTT_Import1.json")
|
||||
char, err := ImportVTTJSON(fileName)
|
||||
assert.NoError(t, err, "expected no error when saving imported Char")
|
||||
var chr2 character.Char
|
||||
var chr2 models.Char
|
||||
chr2.First(char.Name)
|
||||
assert.Equal(t, char.ID, chr2.ID)
|
||||
/*
|
||||
@@ -31,9 +31,9 @@ func TestImportVTT2Char(t *testing.T) {
|
||||
assert.Equal(t, "Zwerg", character.Rasse)
|
||||
assert.Equal(t, "Hören", character.Fertigkeiten[0].Name)
|
||||
assert.Equal(t, 1, len(character.Zauber))
|
||||
assert.Equal(t, 17, character.Lp.Value)
|
||||
assert.Equal(t, 96, character.Eigenschaften.Gs)
|
||||
assert.Equal(t, 74, character.Eigenschaften.Au)
|
||||
assert.Equal(t, 17, models.Lp.Value)
|
||||
assert.Equal(t, 96, models.Eigenschaften.Gs)
|
||||
assert.Equal(t, 74, models.Eigenschaften.Au)
|
||||
assert.Equal(t, 1, len(character.Ausruestung))
|
||||
assert.Equal(t, "Lederrüstung", character.Ausruestung[0].Name)
|
||||
assert.Equal(t, "blau", character.Merkmale.Augenfarbe)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package importer
|
||||
|
||||
import (
|
||||
"bamort/character"
|
||||
"bamort/equipment"
|
||||
"bamort/models"
|
||||
"bamort/skills"
|
||||
@@ -20,7 +19,7 @@ func readImportChar(fileName string) (*CharacterImport, error) {
|
||||
return &character, err
|
||||
}
|
||||
|
||||
func ImportVTTJSON(fileName string) (*character.Char, error) {
|
||||
func ImportVTTJSON(fileName string) (*models.Char, error) {
|
||||
//fileName = fmt.Sprintf("../testdata/%s", "VTT_Import1.json")
|
||||
imp, err := readImportChar(fileName)
|
||||
if err != nil {
|
||||
@@ -59,7 +58,7 @@ func ImportVTTJSON(fileName string) (*character.Char, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
char := character.Char{}
|
||||
char := models.Char{}
|
||||
char.Name = imp.Name
|
||||
char.Rasse = imp.Rasse
|
||||
char.Typ = imp.Typ
|
||||
@@ -94,46 +93,46 @@ func ImportVTTJSON(fileName string) (*character.Char, error) {
|
||||
}
|
||||
char.Lp.Max = imp.Lp.Max
|
||||
char.Lp.Value = imp.Lp.Value
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "Au",
|
||||
Value: imp.Eigenschaften.Au,
|
||||
})
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "Gs",
|
||||
Value: imp.Eigenschaften.Gs,
|
||||
})
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "Gw",
|
||||
Value: imp.Eigenschaften.Gw,
|
||||
})
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "In",
|
||||
Value: imp.Eigenschaften.In,
|
||||
})
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "Ko",
|
||||
Value: imp.Eigenschaften.Ko,
|
||||
})
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "PA",
|
||||
Value: imp.Eigenschaften.Pa,
|
||||
})
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "St",
|
||||
Value: imp.Eigenschaften.St,
|
||||
})
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "Wk",
|
||||
Value: imp.Eigenschaften.Wk,
|
||||
})
|
||||
char.Eigenschaften = append(char.Eigenschaften, character.Eigenschaft{
|
||||
char.Eigenschaften = append(char.Eigenschaften, models.Eigenschaft{
|
||||
Name: "Zt",
|
||||
Value: imp.Eigenschaften.Zt,
|
||||
})
|
||||
char.Merkmale.Augenfarbe = imp.Merkmale.Augenfarbe
|
||||
char.Merkmale.Haarfarbe = imp.Merkmale.Haarfarbe
|
||||
char.Merkmale.Sonstige = imp.Merkmale.Sonstige
|
||||
char.Bennies = character.Bennies{
|
||||
char.Bennies = models.Bennies{
|
||||
BamortCharTrait: models.BamortCharTrait{
|
||||
BamortBase: models.BamortBase{Name: "bennies"},
|
||||
},
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package importer
|
||||
|
||||
import (
|
||||
"bamort/character"
|
||||
"bamort/models"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func ImportChar(char CharacterImport) (*character.Char, error) {
|
||||
func ImportChar(char CharacterImport) (*models.Char, error) {
|
||||
return nil, fmt.Errorf("char could not be imported %s", "Weil Wegen Kommt noch")
|
||||
}
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ func TestGetMDSkills(t *testing.T) {
|
||||
assert.Equal(t, http.StatusOK, respRecorder.Code)
|
||||
|
||||
// Assert the response body
|
||||
var listOfCharacter *character.Char
|
||||
var listOfCharacter *models.Char
|
||||
err := json.Unmarshal(respRecorder.Body.Bytes(), &listOfCharacter)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "Harsk Hammerhuter, Zen", listOfCharacter.Name)
|
||||
@@ -182,7 +182,7 @@ func TestUpdateMDSkill(t *testing.T) {
|
||||
assert.Equal(t, http.StatusCreated, respRecorder.Code)
|
||||
|
||||
// Assert the response body
|
||||
var createdCharacter character.Char
|
||||
var createdCharacter models.Char
|
||||
err = json.Unmarshal(respRecorder.Body.Bytes(), &createdCharacter)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "Aragorn", createdCharacter.Name)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package maintenance
|
||||
|
||||
import (
|
||||
"bamort/character"
|
||||
"bamort/database"
|
||||
"bamort/equipment"
|
||||
"bamort/importer"
|
||||
@@ -46,9 +45,11 @@ func migrateAllStructures(db *gorm.DB) error {
|
||||
if err := user.MigrateStructure(db); err != nil {
|
||||
return fmt.Errorf("failed to migrate user structures: %w", err)
|
||||
}
|
||||
if err := character.MigrateStructure(db); err != nil {
|
||||
return fmt.Errorf("failed to migrate character structures: %w", err)
|
||||
}
|
||||
/*
|
||||
if err := character.MigrateStructure(db); err != nil {
|
||||
return fmt.Errorf("failed to migrate character structures: %w", err)
|
||||
}
|
||||
*/
|
||||
if err := models.MigrateStructure(db); err != nil {
|
||||
return fmt.Errorf("failed to migrate gsmaster structures: %w", err)
|
||||
}
|
||||
@@ -181,56 +182,56 @@ func copyAllDataToTestDB(liveDB, testDB *gorm.DB) (map[string]int, error) {
|
||||
stats["gsmaster_believes"] = count
|
||||
|
||||
// Step 2: Copy character data (depends on nothing)
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.Char{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.Char{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
stats["characters"] = count
|
||||
|
||||
// Step 3: Copy character-dependent data
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.Eigenschaft{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.Eigenschaft{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
stats["character_eigenschaften"] = count
|
||||
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.Lp{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.Lp{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
stats["character_lp"] = count
|
||||
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.Ap{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.Ap{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
stats["character_ap"] = count
|
||||
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.B{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.B{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
stats["character_b"] = count
|
||||
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.Merkmale{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.Merkmale{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
stats["character_merkmale"] = count
|
||||
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.Erfahrungsschatz{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.Erfahrungsschatz{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
stats["character_erfahrungsschatz"] = count
|
||||
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.Bennies{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.Bennies{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
stats["character_bennies"] = count
|
||||
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &character.Vermoegen{})
|
||||
count, err = copyTableDataWithCount(liveDB, testDB, &models.Vermoegen{})
|
||||
if err != nil {
|
||||
return stats, err
|
||||
}
|
||||
@@ -469,7 +470,7 @@ func getTestDataStatistics(db *gorm.DB) (map[string]int64, error) {
|
||||
// Count records in each table
|
||||
tables := map[string]interface{}{
|
||||
"users": &user.User{},
|
||||
"characters": &character.Char{},
|
||||
"characters": &models.Char{},
|
||||
"gsmaster_skills": &models.Skill{},
|
||||
"gsmaster_spells": &models.Spell{},
|
||||
"gsmaster_equipment": &models.Equipment{},
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package maintenance
|
||||
|
||||
import (
|
||||
"bamort/character"
|
||||
"bamort/database"
|
||||
"bamort/equipment"
|
||||
"bamort/models"
|
||||
@@ -43,7 +42,7 @@ func createTestDataInLiveDB(t *testing.T, liveDB *gorm.DB) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// Create test character
|
||||
testChar := &character.Char{
|
||||
testChar := &models.Char{
|
||||
BamortBase: models.BamortBase{
|
||||
Name: "Test Character",
|
||||
},
|
||||
@@ -93,8 +92,10 @@ func TestMakeTestdataFromLiveRewrite(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
err = user.MigrateStructure(liveDB)
|
||||
require.NoError(t, err)
|
||||
err = character.MigrateStructure(liveDB)
|
||||
require.NoError(t, err)
|
||||
/*
|
||||
err = character.MigrateStructure(liveDB)
|
||||
require.NoError(t, err)
|
||||
*/
|
||||
err = models.MigrateStructure(liveDB)
|
||||
require.NoError(t, err)
|
||||
err = skills.MigrateStructure(liveDB)
|
||||
@@ -115,8 +116,8 @@ func TestMakeTestdataFromLiveRewrite(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
err = user.MigrateStructure(testDb)
|
||||
require.NoError(t, err)
|
||||
err = character.MigrateStructure(testDb)
|
||||
require.NoError(t, err)
|
||||
/*err = character.MigrateStructure(testDb)
|
||||
require.NoError(t, err)*/
|
||||
err = models.MigrateStructure(testDb)
|
||||
require.NoError(t, err)
|
||||
err = skills.MigrateStructure(testDb)
|
||||
@@ -178,8 +179,8 @@ func TestLoadPredefinedTestDataFromFile(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
err = user.MigrateStructure(sourceDB)
|
||||
require.NoError(t, err)
|
||||
err = character.MigrateStructure(sourceDB)
|
||||
require.NoError(t, err)
|
||||
/*err = character.MigrateStructure(sourceDB)
|
||||
require.NoError(t, err)*/
|
||||
err = models.MigrateStructure(sourceDB)
|
||||
require.NoError(t, err)
|
||||
err = skills.MigrateStructure(sourceDB)
|
||||
@@ -213,8 +214,8 @@ func TestLoadPredefinedTestDataFromFile(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
err = user.MigrateStructure(targetDB)
|
||||
require.NoError(t, err)
|
||||
err = character.MigrateStructure(targetDB)
|
||||
require.NoError(t, err)
|
||||
/*err = character.MigrateStructure(targetDB)
|
||||
require.NoError(t, err)*/
|
||||
err = models.MigrateStructure(targetDB)
|
||||
require.NoError(t, err)
|
||||
err = skills.MigrateStructure(targetDB)
|
||||
@@ -233,7 +234,7 @@ func TestLoadPredefinedTestDataFromFile(t *testing.T) {
|
||||
assert.Greater(t, userCount, int64(0), "Should have loaded users")
|
||||
|
||||
var charCount int64
|
||||
err = targetDB.Model(&character.Char{}).Count(&charCount).Error
|
||||
err = targetDB.Model(&models.Char{}).Count(&charCount).Error
|
||||
require.NoError(t, err)
|
||||
assert.Greater(t, charCount, int64(0), "Should have loaded characters")
|
||||
|
||||
@@ -249,7 +250,7 @@ func TestLoadPredefinedTestDataFromFile(t *testing.T) {
|
||||
assert.Equal(t, "testuser", loadedUser.Username)
|
||||
assert.Equal(t, "test@example.com", loadedUser.Email)
|
||||
|
||||
var loadedChar character.Char
|
||||
var loadedChar models.Char
|
||||
err = targetDB.Where("name = ?", "Test Character").First(&loadedChar).Error
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "Test Character", loadedChar.Name)
|
||||
@@ -291,8 +292,8 @@ func TestSetupTestDBWithTestData(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
err = user.MigrateStructure(sourceDB)
|
||||
require.NoError(t, err)
|
||||
err = character.MigrateStructure(sourceDB)
|
||||
require.NoError(t, err)
|
||||
/*err = character.MigrateStructure(sourceDB)
|
||||
require.NoError(t, err)*/
|
||||
err = models.MigrateStructure(sourceDB)
|
||||
require.NoError(t, err)
|
||||
err = skills.MigrateStructure(sourceDB)
|
||||
|
||||
@@ -15,6 +15,26 @@ func MigrateStructure(db ...*gorm.DB) error {
|
||||
targetDB = database.DB
|
||||
}
|
||||
|
||||
err := gsMasterMigrateStructure(targetDB)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = characterMigrateStructure(targetDB)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func gsMasterMigrateStructure(db ...*gorm.DB) error {
|
||||
// Use provided DB or default to database.DB
|
||||
var targetDB *gorm.DB
|
||||
if len(db) > 0 && db[0] != nil {
|
||||
targetDB = db[0]
|
||||
} else {
|
||||
targetDB = database.DB
|
||||
}
|
||||
|
||||
err := targetDB.AutoMigrate(
|
||||
&Skill{},
|
||||
&WeaponSkill{},
|
||||
@@ -30,3 +50,29 @@ func MigrateStructure(db ...*gorm.DB) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func characterMigrateStructure(db ...*gorm.DB) error {
|
||||
// Use provided DB or default to database.DB
|
||||
var targetDB *gorm.DB
|
||||
if len(db) > 0 && db[0] != nil {
|
||||
targetDB = db[0]
|
||||
} else {
|
||||
targetDB = database.DB
|
||||
}
|
||||
|
||||
err := targetDB.AutoMigrate(
|
||||
&Char{},
|
||||
&Eigenschaft{},
|
||||
&Lp{},
|
||||
&Ap{},
|
||||
&B{},
|
||||
&Merkmale{},
|
||||
&Erfahrungsschatz{},
|
||||
&Bennies{},
|
||||
&Vermoegen{},
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1,17 +1,14 @@
|
||||
package character
|
||||
package models
|
||||
|
||||
import (
|
||||
"bamort/database"
|
||||
"bamort/equipment"
|
||||
"bamort/models"
|
||||
"bamort/skills"
|
||||
"fmt"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var dbPrefix = "char"
|
||||
|
||||
// Au, Gs, Gw ,In, Ko, Pa, St, Wk, Zt
|
||||
type Eigenschaft struct {
|
||||
ID uint `gorm:"index" json:"id"`
|
||||
@@ -49,7 +46,7 @@ type B struct {
|
||||
*/
|
||||
|
||||
type Merkmale struct {
|
||||
models.BamortCharTrait
|
||||
BamortCharTrait
|
||||
Augenfarbe string `json:"augenfarbe"`
|
||||
Haarfarbe string `json:"haarfarbe"`
|
||||
Sonstige string `json:"sonstige"`
|
||||
@@ -58,27 +55,27 @@ type Merkmale struct {
|
||||
}
|
||||
|
||||
type Erfahrungsschatz struct {
|
||||
models.BamortCharTrait
|
||||
BamortCharTrait
|
||||
ES int `json:"es"` // Erfahrungsschatz
|
||||
EP int `json:"ep"` // Erfahrungspunkte
|
||||
}
|
||||
|
||||
type Bennies struct {
|
||||
models.BamortCharTrait
|
||||
BamortCharTrait
|
||||
Gg int `json:"gg"` // Göttliche Gnade
|
||||
Gp int `json:"gp"` // Glückspunkte
|
||||
Sg int `json:"sg"` // Schicksalsgunst
|
||||
}
|
||||
|
||||
type Vermoegen struct {
|
||||
models.BamortCharTrait
|
||||
BamortCharTrait
|
||||
Goldstücke int `json:"goldstücke"` // GS
|
||||
Silberstücke int `json:"silberstücke"` // SS
|
||||
Kupferstücke int `json:"kupferstücke"` // KS
|
||||
}
|
||||
|
||||
type Char struct {
|
||||
models.BamortBase
|
||||
BamortBase
|
||||
Rasse string `json:"rasse"`
|
||||
Typ string `json:"typ"`
|
||||
Alter int `json:"alter"`
|
||||
@@ -107,7 +104,7 @@ type Char struct {
|
||||
Image string `json:"image,omitempty"`
|
||||
}
|
||||
type CharList struct {
|
||||
models.BamortBase
|
||||
BamortBase
|
||||
Rasse string `json:"rasse"`
|
||||
Typ string `json:"typ"`
|
||||
Grad int `json:"grad"`
|
||||
@@ -122,6 +119,7 @@ type FeChar struct {
|
||||
}
|
||||
|
||||
func (object *Char) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "chars"
|
||||
}
|
||||
|
||||
@@ -200,26 +198,34 @@ func (object *Char) Delete() error {
|
||||
return err
|
||||
}
|
||||
func (object *Eigenschaft) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "eigenschaften"
|
||||
}
|
||||
func (object *Lp) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "health"
|
||||
}
|
||||
func (object *Ap) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "endurances"
|
||||
}
|
||||
func (object *B) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "motionranges"
|
||||
}
|
||||
func (object *Merkmale) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "characteristics"
|
||||
}
|
||||
func (object *Erfahrungsschatz) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "experiances"
|
||||
}
|
||||
func (object *Bennies) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "bennies"
|
||||
}
|
||||
func (object *Vermoegen) TableName() string {
|
||||
dbPrefix := "char"
|
||||
return dbPrefix + "_" + "wealth"
|
||||
}
|
||||
Reference in New Issue
Block a user