feat: 引入版本化数据库迁移与 Schema 启动门禁
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"silk-server-go/internal/config"
|
||||
@@ -21,30 +22,38 @@ func Init(cfg *config.Config) error {
|
||||
return err
|
||||
}
|
||||
DB = db
|
||||
// 自动迁移(错误不阻止启动,仅记录警告)
|
||||
if err := db.AutoMigrate(
|
||||
&model.User{}, &model.Room{}, &model.Device{}, &model.Sensor{},
|
||||
&model.Threshold{}, &model.Alarm{}, &model.Camera{}, &model.VideoClip{},
|
||||
&model.AuditLog{}, &model.Telemetry{},
|
||||
&model.Permission{}, &model.RolePermission{},
|
||||
&model.Disease{}, &model.KnowledgeArticle{},
|
||||
&model.InspectionRecord{},
|
||||
&model.Tray{}, &model.Batch{}, &model.RearingRecord{},
|
||||
&model.WechatBinding{},
|
||||
&model.WeatherAlert{},
|
||||
&model.LampTest{}, &model.LampTestStep{},
|
||||
&model.Consumable{},
|
||||
&model.Consultation{},
|
||||
&model.SpectrumEntry{},
|
||||
&model.TraceRecord{},
|
||||
); err != nil {
|
||||
slog.Warn("自动迁移有警告(可忽略)", "err", err)
|
||||
if err := RunMigrations(db); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := CheckSchemaVersion(db, CurrentSchemaVersion); err != nil {
|
||||
return err
|
||||
}
|
||||
if cfg.AllowDevAutoMigrate && cfg.AppEnv != "production" {
|
||||
if err := db.AutoMigrate(
|
||||
&model.User{}, &model.Room{}, &model.Device{}, &model.Sensor{},
|
||||
&model.Threshold{}, &model.Alarm{}, &model.Camera{}, &model.VideoClip{},
|
||||
&model.AuditLog{}, &model.Telemetry{},
|
||||
&model.Permission{}, &model.RolePermission{},
|
||||
&model.Disease{}, &model.KnowledgeArticle{},
|
||||
&model.InspectionRecord{},
|
||||
&model.Tray{}, &model.Batch{}, &model.RearingRecord{},
|
||||
&model.WechatBinding{},
|
||||
&model.WeatherAlert{},
|
||||
&model.LampTest{}, &model.LampTestStep{},
|
||||
&model.Consumable{},
|
||||
&model.Consultation{},
|
||||
&model.SpectrumEntry{},
|
||||
&model.TraceRecord{},
|
||||
); err != nil {
|
||||
return fmt.Errorf("开发环境 AutoMigrate 失败: %w", err)
|
||||
}
|
||||
slog.Warn("开发环境 AutoMigrate 已启用,SQL 迁移仍是生产 schema 事实来源")
|
||||
}
|
||||
// 初始化权限种子数据
|
||||
seedPermissions(db)
|
||||
// 初始化知识库种子数据
|
||||
seedKnowledge(db)
|
||||
slog.Info("数据库连接成功,自动迁移完成")
|
||||
slog.Info("数据库连接成功,版本化迁移完成", "schemaVersion", CurrentSchemaVersion)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user