fix: align business reports and record task migration progress

This commit is contained in:
Yvan
2026-11-06 00:47:06 +08:00
parent 1bc2082718
commit b1f14bd525
32 changed files with 501 additions and 53 deletions
+18 -1
View File
@@ -5,7 +5,9 @@ package migration
import (
"fmt"
"log/slog"
"strings"
"time"
"gorm.io/gorm"
)
@@ -23,10 +25,20 @@ type record struct {
func (record) TableName() string { return TableName }
func Run(db *gorm.DB, steps []Step) error {
func Run(db *gorm.DB, steps []Step) (runErr error) {
if db == nil {
return fmt.Errorf("database is nil")
}
started := time.Now()
completed := 0
slog.Info("database migrations started", "steps", len(steps))
defer func() {
status := "completed"
if runErr != nil {
status = "failed"
}
slog.Info("database migrations finished", "status", status, "applied", completed, "elapsed_ms", time.Since(started).Milliseconds())
}()
db = db.Session(&gorm.Session{NewDB: true})
if err := repairMigrationTable(db); err != nil {
return err
@@ -66,12 +78,17 @@ func Run(db *gorm.DB, steps []Step) error {
if step.Migrate == nil {
return fmt.Errorf("migration %q has no function", step.ID)
}
stepStarted := time.Now()
slog.Info("database migration started", "migration", step.ID)
if err := step.Migrate(db.Session(&gorm.Session{NewDB: true})); err != nil {
slog.Error("database migration failed", "migration", step.ID, "elapsed_ms", time.Since(stepStarted).Milliseconds(), "error", err)
return fmt.Errorf("apply migration %q: %w", step.ID, err)
}
if err := db.Session(&gorm.Session{NewDB: true}).Create(&record{ID: step.ID}).Error; err != nil {
return fmt.Errorf("record migration %q: %w", step.ID, err)
}
completed++
slog.Info("database migration completed", "migration", step.ID, "elapsed_ms", time.Since(stepStarted).Milliseconds())
}
return nil
}