From 7526b72c63f345b05e991b617a7f0808977e1161 Mon Sep 17 00:00:00 2001 From: "Eric 1549169735@qq.com" <1549169735@qq.com> Date: Wed, 19 Aug 2026 22:48:23 +0800 Subject: [PATCH] fix: synchronize database schema with gorm --- README.md | 2 +- internal/database/database.go | 32 ++++++++++++++++++++++++++++++++ main.go | 8 ++------ 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a7263a0..c940c31 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ make docker-up ## 宠物医生问诊问药示范场景 -数据库迁移和管理员初始化完成后执行: +数据库结构由 GORM 在应用启动时自动同步,管理员初始化完成后执行: ```bash make seed-pet-doctor diff --git a/internal/database/database.go b/internal/database/database.go index c523777..1cd19e4 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -7,6 +7,7 @@ import ( "time" "git.iwork-ai.com/xdc/iqudo-top1/internal/config" + "git.iwork-ai.com/xdc/iqudo-top1/internal/model" "go.uber.org/zap" "gorm.io/driver/mysql" "gorm.io/gorm" @@ -37,6 +38,37 @@ func Open(cfg config.DatabaseConfig, log *zap.Logger) (*gorm.DB, error) { return db, nil } +// AutoMigrate synchronizes the application schema from the GORM models. +// GORM only adds missing tables, columns and indexes; it does not drop +// existing columns, which keeps production data safe during application +// upgrades. +func AutoMigrate(db *gorm.DB) error { + return db.AutoMigrate( + &model.Tenant{}, + &model.User{}, + &model.Role{}, + &model.TenantMember{}, + &model.Scenario{}, + &model.ScenarioField{}, + &model.ScenarioRule{}, + &model.SOP{}, + &model.SOPVersion{}, + &model.SOPNode{}, + &model.SOPEdge{}, + &model.KnowledgeCard{}, + &model.KnowledgeCardVersion{}, + &model.KnowledgeItem{}, + &model.KnowledgeRelation{}, + &model.SOPRun{}, + &model.SOPRunEvent{}, + &model.PublicRunSession{}, + &model.SOPFeedback{}, + &model.AuditLog{}, + &model.MultiTableOutbox{}, + &model.RefreshToken{}, + ) +} + type zapGORMLogger struct { log *zap.Logger level gormlogger.LogLevel diff --git a/main.go b/main.go index 5fb27b0..68f16d6 100644 --- a/main.go +++ b/main.go @@ -16,14 +16,10 @@ import ( "git.iwork-ai.com/xdc/iqudo-top1/internal/database" "git.iwork-ai.com/xdc/iqudo-top1/internal/httpserver" "git.iwork-ai.com/xdc/iqudo-top1/internal/logger" - "git.iwork-ai.com/xdc/iqudo-top1/internal/migration" "git.iwork-ai.com/xdc/iqudo-top1/internal/multitable" "go.uber.org/zap" ) -//go:embed migrations/*.sql -var migrationFiles embed.FS - //go:embed web/dist/* var frontendFiles embed.FS @@ -54,8 +50,8 @@ func main() { if err != nil { log.Fatal("connect database", zap.Error(err)) } - if err := migration.Run(db, migrationFiles); err != nil { - log.Fatal("run database migrations", zap.Error(err)) + if err := database.AutoMigrate(db); err != nil { + log.Fatal("synchronize database schema", zap.Error(err)) } if err := auth.Seed(db, cfg.Seed); err != nil { log.Fatal("seed administrator", zap.Error(err))