增加 weight 字段的自动化迁移,按照 name 顺序分配 weight,从 1 开始递增 fix #35
This commit is contained in:
1 parent
b63d70a66f
commit
e957183588
2 files changed
+75
No files matched your search
@@ -6,6 +6,7 @@ import (
|
||||
|
||||
"github.com/dushixiang/pika/internal/migrate/v0_1_1"
|
||||
"github.com/dushixiang/pika/internal/migrate/v0_1_2"
|
||||
"github.com/dushixiang/pika/internal/migrate/v0_1_3"
|
||||
"github.com/dushixiang/pika/internal/service"
|
||||
"github.com/dushixiang/pika/pkg/version"
|
||||
"go.uber.org/zap"
|
||||
@@ -30,6 +31,12 @@ func AutoMigrate(logger *zap.Logger, db *gorm.DB, propertyService *service.Prope
|
||||
return err
|
||||
}
|
||||
}
|
||||
// 升级到 v0.1.3 版本
|
||||
if strings.Compare(localVersion, "v0.1.3") < 0 {
|
||||
if err := v0_1_3.Migrate(logger, db); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return propertyService.SetSystemVersion(ctx, version.Version)
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package v0_1_3
|
||||
|
||||
import (
|
||||
"github.com/dushixiang/pika/internal/models"
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func Migrate(logger *zap.Logger, db *gorm.DB) error {
|
||||
logger.Info("开始执行 v0.1.3 版本数据迁移")
|
||||
|
||||
migrator := db.Migrator()
|
||||
if migrator == nil {
|
||||
logger.Warn("无法获取数据库 migrator,跳过迁移")
|
||||
return nil
|
||||
}
|
||||
|
||||
if !migrator.HasTable("agents") {
|
||||
logger.Info("未检测到 agents 表,跳过迁移")
|
||||
return nil
|
||||
}
|
||||
|
||||
// 检查 weight 字段是否存在
|
||||
if !migrator.HasColumn("agents", "weight") {
|
||||
logger.Info("未检测到 weight 字段,跳过迁移")
|
||||
return nil
|
||||
}
|
||||
|
||||
// 查询所有 weight 为 0 或 null 的 agents,按 name 升序排序
|
||||
var agents []models.Agent
|
||||
if err := db.Where("weight = ? OR weight IS NULL", 0).
|
||||
Order("name ASC").
|
||||
Find(&agents).Error; err != nil {
|
||||
logger.Error("查询 agents 失败", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
|
||||
if len(agents) == 0 {
|
||||
logger.Info("没有需要更新 weight 的探针,跳过迁移")
|
||||
return nil
|
||||
}
|
||||
|
||||
logger.Info("找到需要更新 weight 的探针", zap.Int("count", len(agents)))
|
||||
|
||||
// 按照 name 顺序分配 weight,从 1 开始递增
|
||||
// 这样按 name 字母顺序排在前面的探针,weight 值较小
|
||||
// 而在列表中按 weight 降序排列时,name 靠后的会显示在前面
|
||||
for i, agent := range agents {
|
||||
weight := i + 1
|
||||
if err := db.Model(&models.Agent{}).
|
||||
Where("id = ?", agent.ID).
|
||||
Update("weight", weight).Error; err != nil {
|
||||
logger.Error("更新探针 weight 失败",
|
||||
zap.String("id", agent.ID),
|
||||
zap.String("name", agent.Name),
|
||||
zap.Int("weight", weight),
|
||||
zap.Error(err))
|
||||
return err
|
||||
}
|
||||
logger.Debug("已更新探针 weight",
|
||||
zap.String("id", agent.ID),
|
||||
zap.String("name", agent.Name),
|
||||
zap.Int("weight", weight))
|
||||
}
|
||||
|
||||
logger.Info("v0.1.3 版本数据迁移完成", zap.Int("updated", len(agents)))
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user