From 0d6f7c8a4e0e88b9bee630ed19402715073db151 Mon Sep 17 00:00:00 2001 From: duorameng <2997944583@qq.com> Date: Mon, 15 Jun 2026 11:05:56 +0800 Subject: [PATCH] refactor: extract migration constants --- internal/constant/migrate.go | 21 +++++++++++++++++++++ internal/database/migrate.go | 36 ++++++++++++++++++------------------ 2 files changed, 39 insertions(+), 18 deletions(-) create mode 100644 internal/constant/migrate.go diff --git a/internal/constant/migrate.go b/internal/constant/migrate.go new file mode 100644 index 0000000..0b46d1a --- /dev/null +++ b/internal/constant/migrate.go @@ -0,0 +1,21 @@ +package constant + +const ( + // IDSchemaSignature 数据库表结构指纹的固定 ID + IDSchemaSignature = "sys_schema_sig" + + // KeySchemaSignature 数据库表结构指纹,用于判断是否需要全量自动建表 + KeySchemaSignature = "schema_signature" + + // KeyTaskEnvsMigrated 任务环境变量迁移标记 (v2版本强制重跑过) + KeyTaskEnvsMigrated = "task_envs_migrated_v2" + + // KeyTaskTagsMigrated 任务标签迁移标记 (v2版本强制重跑过) + KeyTaskTagsMigrated = "task_tags_migrated_v2" + + // 以下是旧表或字段名,用于前置结构迁移时重命名或删除 + TableMigrateQlTokens = "ql_tokens" + ColumnMigrateQlTokenCode = "code" + ColumnMigrateQlTokenToken = "token" + ColumnMigrateDependencyType = "type" +) diff --git a/internal/database/migrate.go b/internal/database/migrate.go index d3ab255..4e4363e 100644 --- a/internal/database/migrate.go +++ b/internal/database/migrate.go @@ -36,7 +36,7 @@ func Migrate() error { sig := getModelSignature(allModels) if DB.Migrator().HasTable(&models.Setting{}) { var sigSetting models.Setting - res := DB.Where(&models.Setting{Section: "system", Key: "schema_signature"}).Limit(1).Find(&sigSetting) + res := DB.Where(&models.Setting{Section: constant.SectionSystem, Key: constant.KeySchemaSignature}).Limit(1).Find(&sigSetting) if res.RowsAffected > 0 && string(sigSetting.Value) == sig { logger.Info("[Database] 模型指纹一致,跳过自动表结构同步") @@ -69,14 +69,14 @@ func Migrate() error { // 3. 更新指纹记录 if DB.Migrator().HasTable(&models.Setting{}) { var sigSetting models.Setting - res := DB.Where(&models.Setting{Section: "system", Key: "schema_signature"}).Limit(1).Find(&sigSetting) + res := DB.Where(&models.Setting{Section: constant.SectionSystem, Key: constant.KeySchemaSignature}).Limit(1).Find(&sigSetting) if res.RowsAffected > 0 { DB.Model(&sigSetting).Update("value", models.BigText(sig)) } else { DB.Create(&models.Setting{ - ID: "sys_schema_sig", - Section: "system", - Key: "schema_signature", + ID: constant.IDSchemaSignature, + Section: constant.SectionSystem, + Key: constant.KeySchemaSignature, Value: models.BigText(sig), }) } @@ -113,17 +113,17 @@ func getModelSignature(models []interface{}) string { // preMigrations 前置结构迁移,处理 AutoMigrate 无法自动解决的变更 func preMigrations() error { // 检查 ql_tokens 表是否存在 - if DB.Migrator().HasTable("ql_tokens") { + if DB.Migrator().HasTable(constant.TableMigrateQlTokens) { // 如果 code 列存在,且 token 列不存在,则重命名 - if DB.Migrator().HasColumn(&models.AgentToken{}, "code") { - if err := DB.Migrator().RenameColumn(&models.AgentToken{}, "code", "token"); err != nil { + if DB.Migrator().HasColumn(&models.AgentToken{}, constant.ColumnMigrateQlTokenCode) { + if err := DB.Migrator().RenameColumn(&models.AgentToken{}, constant.ColumnMigrateQlTokenCode, constant.ColumnMigrateQlTokenToken); err != nil { logger.Debugf("[Database] 重命名 ql_tokens.code 失败: %v", err) } } } // 移除 deps 表中的 type 字段(如果存在) - if DB.Migrator().HasColumn(&models.Dependency{}, "type") { - if err := DB.Migrator().DropColumn(&models.Dependency{}, "type"); err != nil { + if DB.Migrator().HasColumn(&models.Dependency{}, constant.ColumnMigrateDependencyType) { + if err := DB.Migrator().DropColumn(&models.Dependency{}, constant.ColumnMigrateDependencyType); err != nil { logger.Debugf("[Database] 移除 deps.type 字段失败: %v", err) } else { logger.Infof("[Database] 已成功移除 deps 表中的 type 字段") @@ -147,7 +147,7 @@ func migrateTaskEnvs() { // 检查 settings 表中是否已经记录了迁移状态 if DB.Migrator().HasTable(&models.Setting{}) { var setting models.Setting - res := DB.Where(&models.Setting{Section: "system", Key: "task_envs_migrated_v2"}).Limit(1).Find(&setting) + res := DB.Where(&models.Setting{Section: constant.SectionSystem, Key: constant.KeyTaskEnvsMigrated}).Limit(1).Find(&setting) if res.RowsAffected > 0 && string(setting.Value) == "true" { return } @@ -203,14 +203,14 @@ func markTaskEnvsMigrated() { return } var setting models.Setting - res := DB.Where(&models.Setting{Section: "system", Key: "task_envs_migrated_v2"}).Limit(1).Find(&setting) + res := DB.Where(&models.Setting{Section: constant.SectionSystem, Key: constant.KeyTaskEnvsMigrated}).Limit(1).Find(&setting) if res.RowsAffected > 0 { DB.Model(&setting).Update("value", models.BigText("true")) } else { DB.Create(&models.Setting{ ID: xid.New().String(), - Section: "system", - Key: "task_envs_migrated_v2", + Section: constant.SectionSystem, + Key: constant.KeyTaskEnvsMigrated, Value: models.BigText("true"), }) } @@ -221,7 +221,7 @@ func migrateTaskTags() { // 检查 settings 表中是否已经记录了迁移状态 if DB.Migrator().HasTable(&models.Setting{}) { var setting models.Setting - res := DB.Where(&models.Setting{Section: "system", Key: "task_tags_migrated_v2"}).Limit(1).Find(&setting) + res := DB.Where(&models.Setting{Section: constant.SectionSystem, Key: constant.KeyTaskTagsMigrated}).Limit(1).Find(&setting) if res.RowsAffected > 0 && string(setting.Value) == "true" { return } @@ -289,14 +289,14 @@ func markTaskTagsMigrated() { return } var setting models.Setting - res := DB.Where(&models.Setting{Section: "system", Key: "task_tags_migrated_v2"}).Limit(1).Find(&setting) + res := DB.Where(&models.Setting{Section: constant.SectionSystem, Key: constant.KeyTaskTagsMigrated}).Limit(1).Find(&setting) if res.RowsAffected > 0 { DB.Model(&setting).Update("value", models.BigText("true")) } else { DB.Create(&models.Setting{ ID: xid.New().String(), - Section: "system", - Key: "task_tags_migrated_v2", + Section: constant.SectionSystem, + Key: constant.KeyTaskTagsMigrated, Value: models.BigText("true"), }) }