dc5b3c3944
and old GameSystem field to misc table to be able to handle all tables in the same procedure.
243 lines
4.7 KiB
Go
243 lines
4.7 KiB
Go
package models
|
|
|
|
import (
|
|
"bamort/database"
|
|
"bamort/logger"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
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 := gameSystemMigrateStructure(targetDB)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = gsMasterMigrateStructure(targetDB)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = characterMigrateStructure(targetDB)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = equipmentMigrateStructure(targetDB)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = skillsMigrateStructure(targetDB)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = importerMigrateStructure(targetDB)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = learningMigrateStructure(targetDB)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
func gameSystemMigrateStructure(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(
|
|
&GameSystem{},
|
|
)
|
|
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{},
|
|
&Spell{},
|
|
&Equipment{},
|
|
&Weapon{},
|
|
&Container{},
|
|
&Transportation{},
|
|
&Believe{},
|
|
&MiscLookup{},
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
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{},
|
|
&CharacterCreationSession{},
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func equipmentMigrateStructure(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(
|
|
&EqAusruestung{},
|
|
&EqWaffe{},
|
|
&EqContainer{},
|
|
//Transportation{},
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func skillsMigrateStructure(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(
|
|
&SkFertigkeit{},
|
|
&SkWaffenfertigkeit{},
|
|
&SkZauber{},
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func learningMigrateStructure(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(
|
|
&Source{},
|
|
&CharacterClass{},
|
|
&SkillCategory{},
|
|
&SkillDifficulty{},
|
|
&SpellSchool{},
|
|
&ClassCategoryEPCost{},
|
|
&ClassSpellSchoolEPCost{},
|
|
&SpellLevelLECost{},
|
|
&SkillCategoryDifficulty{},
|
|
&WeaponSkillCategoryDifficulty{},
|
|
&SkillImprovementCost{},
|
|
&ClassCategoryLearningPoints{},
|
|
&ClassSpellPoints{},
|
|
&ClassTypicalSkill{},
|
|
&ClassTypicalSpell{},
|
|
&AuditLogEntry{},
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func MigrateDataIfNeeded(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
|
|
}
|
|
tables := []string{
|
|
"gsm_lit_sources",
|
|
"gsm_believes",
|
|
"gsm_equipments",
|
|
"gsm_weapons",
|
|
"gsm_containers",
|
|
"gsm_transportations",
|
|
"gsm_skills",
|
|
"gsm_weaponskills",
|
|
"gsm_spells",
|
|
"char_chars",
|
|
"gsm_character_classes",
|
|
"gsm_misc",
|
|
"learning_skill_categories",
|
|
"learning_skill_difficulties",
|
|
"learning_spell_level_le_costs",
|
|
"learning_spell_schools",
|
|
}
|
|
sql := `
|
|
UPDATE TABLE
|
|
SET game_system_id = 1
|
|
WHERE game_system_id IS NULL or game_system_id = 0;
|
|
`
|
|
logger.Debug("Führe SQL-Update aus: %s", strings.ReplaceAll(sql, "\n", " "))
|
|
errors := []error{}
|
|
for _, currentTable := range tables {
|
|
//currentTable := tables[tables]
|
|
execSQL := strings.ReplaceAll(sql, "TABLE", currentTable)
|
|
result := targetDB.Exec(execSQL)
|
|
if result.Error != nil {
|
|
logger.Error("Fehler beim SQL-Update der Tabelle %s: %s", currentTable, result.Error.Error())
|
|
errors = append(errors, fmt.Errorf("failed to update table %s: %w", currentTable, result.Error))
|
|
}
|
|
}
|
|
if len(errors) == 0 {
|
|
return nil
|
|
}
|
|
return fmt.Errorf("The following Errors occured when migrating data: %v", errors)
|
|
}
|