Lernkosten Zauber

This commit is contained in:
2025-08-07 09:41:51 +02:00
parent 60b95a9a7a
commit c8ab5616de
13 changed files with 72 additions and 24 deletions
+7
View File
@@ -38,6 +38,13 @@ var (
func ConnectDatabase() *gorm.DB {
SetupTestDB()
/*
db, err := gorm.Open(sqlite.Open(PreparedTestDB), &gorm.Config{})
if err != nil {
log.Fatal("Failed to connect to database:", err)
}
DB = db
*/
return DB
}
func ConnectDatabaseOrig() *gorm.DB {
+40
View File
@@ -45,6 +45,40 @@ func migrateAllStructures(db *gorm.DB) error {
return nil
}
func migrateDataIfNeeded(db *gorm.DB) error {
// Kopiere categorie nach learning_category für Spells, wenn learning_category leer ist
err := migrateSpellLearningCategories(db)
if err != nil {
return fmt.Errorf("failed to migrate spell learning categories: %w", err)
}
return nil
}
// migrateSpellLearningCategories kopiert categorie-Werte in learning_category wenn diese leer sind
func migrateSpellLearningCategories(db *gorm.DB) error {
// SQL-Statement um categorie nach learning_category zu kopieren, wo learning_category leer oder NULL ist
sql := `
UPDATE gsm_spells
SET learning_category = category
WHERE (learning_category IS NULL OR learning_category = '')
AND category IS NOT NULL
AND category != ''
`
result := db.Exec(sql)
if result.Error != nil {
return fmt.Errorf("failed to update spell learning categories: %w", result.Error)
}
// Log der Anzahl der aktualisierten Datensätze
if result.RowsAffected > 0 {
fmt.Printf("Updated %d spell records with learning_category from categorie\n", result.RowsAffected)
}
return nil
}
func MakeTestdataFromLive(c *gin.Context) {
liveDB := database.ConnectDatabase()
if liveDB == nil {
@@ -361,6 +395,12 @@ func SetupCheck(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
err = migrateDataIfNeeded(db)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to migrate data: " + err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"message": "Setup Check OK"})
}
+19 -18
View File
@@ -63,24 +63,25 @@ type WeaponSkill struct {
}
type Spell struct {
ID uint `gorm:"primaryKey" json:"id"`
GameSystem string `gorm:"column:game_system;index;default:midgard" json:"game_system"`
Name string `gorm:"type:varchar(255);index" json:"name"`
Beschreibung string `json:"beschreibung"`
Quelle string `json:"quelle"` // Deprecated: Für Rückwärtskompatibilität
SourceID uint `gorm:"index" json:"source_id,omitempty"` // Verweis auf strukturierte Quelle
PageNumber int `json:"page_number,omitempty"` // Seitenzahl im Quellenbuch
Bonus int `json:"bonus"`
Stufe int `json:"level"`
AP string `gorm:"default:1" json:"ap"`
Art string `gorm:"default:Gestenzauber" json:"art"`
Zauberdauer string `gorm:"default:10 sec" json:"zauberdauer"`
Reichweite string `json:"reichweite"` // in m
Wirkungsziel string `json:"wirkungsziel"`
Wirkungsbereich string `json:"wirkungsbereich"`
Wirkungsdauer string `json:"wirkungsdauer"`
Ursprung string `json:"ursprung"`
Category string `gorm:"default:normal" json:"category"` // spell_school
ID uint `gorm:"primaryKey" json:"id"`
GameSystem string `gorm:"column:game_system;index;default:midgard" json:"game_system"`
Name string `gorm:"type:varchar(255);index" json:"name"`
Beschreibung string `json:"beschreibung"`
Quelle string `json:"quelle"` // Deprecated: Für Rückwärtskompatibilität
SourceID uint `gorm:"index" json:"source_id,omitempty"` // Verweis auf strukturierte Quelle
PageNumber int `json:"page_number,omitempty"` // Seitenzahl im Quellenbuch
Bonus int `json:"bonus"`
Stufe int `json:"level"`
AP string `gorm:"default:1" json:"ap"`
Art string `gorm:"default:Gestenzauber" json:"art"`
Zauberdauer string `gorm:"default:10 sec" json:"zauberdauer"`
Reichweite string `json:"reichweite"` // in m
Wirkungsziel string `json:"wirkungsziel"`
Wirkungsbereich string `json:"wirkungsbereich"`
Wirkungsdauer string `json:"wirkungsdauer"`
Ursprung string `json:"ursprung"`
Category string `gorm:"default:normal" json:"category"` // spell_school
LearningCategory string `gorm:"type:varchar(25);index" json:"learning_category"`
}
type Equipment struct {
+2 -2
View File
@@ -373,13 +373,13 @@ func GetSpellLearningInfoNewSystem(spellName string, classCode string) (*SpellLe
s.id as spell_id,
s.name as spell_name,
s.stufe as spell_level,
s.category as school_name,
s.learning_category as school_name,
cssec.character_class as class_code,
cssec.character_class as class_name,
cssec.ep_per_le,
COALESCE(sllc.le_required, 0) as le_required
FROM gsm_spells s
JOIN learning_class_spell_school_ep_costs cssec ON s.category = cssec.spell_school
JOIN learning_class_spell_school_ep_costs cssec ON s.learning_category = cssec.spell_school
LEFT JOIN learning_spell_level_le_costs sllc ON s.stufe = sllc.level
WHERE s.name = ? AND cssec.character_class = ?
`, spellName, classCode).Scan(&result).Error