Lernkosten Zauber
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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"})
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<!-- <link rel="icon" href="/favicon.ico">-->
|
||||
<link rel="icon" href="/favicon.png">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Vite App</title>
|
||||
<title>Bamort</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<div class="stat-box">
|
||||
<div class="stat-item">
|
||||
<span class="stat-label">{{ $t('experience.available_ep') }}:</span>
|
||||
<span class="stat-value">{{ character.erfahrungsschatz?.value || 0 }} EP</span>
|
||||
<span class="stat-value">{{ character.erfahrungsschatz?.ep || 0 }} EP</span>
|
||||
</div>
|
||||
<div class="control-row">
|
||||
<div class="input-group">
|
||||
@@ -285,7 +285,7 @@ export default {
|
||||
|
||||
this.isLoading = true;
|
||||
try {
|
||||
const currentEP = this.character.erfahrungsschatz?.value || 0;
|
||||
const currentEP = this.character.erfahrungsschatz?.ep || 0;
|
||||
const newEP = currentEP + this.experienceAmount;
|
||||
|
||||
await this.updateExperience(newEP);
|
||||
@@ -302,7 +302,7 @@ export default {
|
||||
|
||||
this.isLoading = true;
|
||||
try {
|
||||
const currentEP = this.character.erfahrungsschatz?.value || 0;
|
||||
const currentEP = this.character.erfahrungsschatz?.ep || 0;
|
||||
const newEP = Math.max(0, currentEP - this.experienceAmount);
|
||||
|
||||
await this.updateExperience(newEP);
|
||||
|
||||
Reference in New Issue
Block a user