Create database version tracking
This commit is contained in:
@@ -11,9 +11,30 @@ func MigrateStructure(db ...*gorm.DB) error {
|
|||||||
targetDB = DB
|
targetDB = DB
|
||||||
}
|
}
|
||||||
|
|
||||||
err := targetDB.AutoMigrate()
|
err := targetDB.AutoMigrate(
|
||||||
|
&SchemaVersion{},
|
||||||
|
&MigrationHistory{},
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func MigrateDataIfNeeded(db *gorm.DB) error {
|
||||||
|
// Implement data migration logic here if needed
|
||||||
|
schemaVersion := SchemaVersion{}
|
||||||
|
err := db.First(&schemaVersion, "version = ?", "0.1.37").Error
|
||||||
|
if err != nil {
|
||||||
|
// No initial version found, assume no migration needed
|
||||||
|
schemaVersion.Version = "0.1.37"
|
||||||
|
schemaVersion.MigrationNumber = 1
|
||||||
|
schemaVersion.BackendVersion = "0.1.37"
|
||||||
|
schemaVersion.Description = "Initial schema version"
|
||||||
|
err = db.Create(&schemaVersion).Error
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package database
|
||||||
|
|
||||||
|
// SchemaVersion represents the schema_version table
|
||||||
|
type SchemaVersion struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement"`
|
||||||
|
Version string `gorm:"size:20;not null;index"`
|
||||||
|
MigrationNumber int `gorm:"not null;index"`
|
||||||
|
AppliedAt int64 `gorm:"autoCreateTime"`
|
||||||
|
BackendVersion string `gorm:"size:20;not null"`
|
||||||
|
Description string `gorm:"type:text"`
|
||||||
|
Checksum string `gorm:"size:64"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName sets the table name for SchemaVersion
|
||||||
|
func (SchemaVersion) TableName() string {
|
||||||
|
return "schema_version"
|
||||||
|
}
|
||||||
|
|
||||||
|
// MigrationHistory represents the migration_history table
|
||||||
|
type MigrationHistory struct {
|
||||||
|
ID uint `gorm:"primaryKey;autoIncrement"`
|
||||||
|
MigrationNumber int `gorm:"not null;uniqueIndex"`
|
||||||
|
Version string `gorm:"size:20;not null;index"`
|
||||||
|
Description string `gorm:"type:text;not null"`
|
||||||
|
AppliedAt int64 `gorm:"autoCreateTime"`
|
||||||
|
AppliedBy string `gorm:"size:100"`
|
||||||
|
ExecutionTimeMs int64
|
||||||
|
Success bool `gorm:"default:true"`
|
||||||
|
ErrorMessage string `gorm:"type:text"`
|
||||||
|
RollbackAvailable bool `gorm:"default:true"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableName sets the table name for MigrationHistory
|
||||||
|
func (MigrationHistory) TableName() string {
|
||||||
|
return "migration_history"
|
||||||
|
}
|
||||||
@@ -63,9 +63,15 @@ func migrateAllStructures(db *gorm.DB) error {
|
|||||||
func migrateDataIfNeeded(db *gorm.DB) error {
|
func migrateDataIfNeeded(db *gorm.DB) error {
|
||||||
logger.Debug("Starte Datenmigration falls erforderlich...")
|
logger.Debug("Starte Datenmigration falls erforderlich...")
|
||||||
|
|
||||||
|
err := database.MigrateDataIfNeeded(db)
|
||||||
|
if err != nil {
|
||||||
|
logger.Error("Fehler beim Migrieren der Datenbankdaten: %s", err.Error())
|
||||||
|
return fmt.Errorf("failed to migrate database data: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Kopiere categorie nach learning_category für Spells, wenn learning_category leer ist
|
// Kopiere categorie nach learning_category für Spells, wenn learning_category leer ist
|
||||||
logger.Debug("Migriere Spell Learning Categories...")
|
logger.Debug("Migriere Spell Learning Categories...")
|
||||||
err := migrateSpellLearningCategories(db)
|
err = migrateSpellLearningCategories(db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Fehler beim Migrieren der Spell Learning Categories: %s", err.Error())
|
logger.Error("Fehler beim Migrieren der Spell Learning Categories: %s", err.Error())
|
||||||
return fmt.Errorf("failed to migrate spell learning categories: %w", err)
|
return fmt.Errorf("failed to migrate spell learning categories: %w", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user