增加Taber实现校验

This commit is contained in:
2025-11-20 18:58:49 +08:00
parent 1313140e45
commit d185f334ac
2 changed files with 33 additions and 18 deletions

View File

@@ -24,6 +24,7 @@ import (
"git.huangwc.com/pig/pig-farm-controller/internal/infra/utils/token"
"gorm.io/gorm"
"gorm.io/gorm/schema"
)
// Infrastructure 聚合了所有基础设施层的组件。
@@ -421,6 +422,8 @@ func initNotifyService(
// initStorage 封装了数据库的初始化、连接和迁移逻辑。
func initStorage(ctx context.Context, cfg config.DatabaseConfig) (database.Storage, error) {
logger := logs.GetLogger(ctx)
// 创建存储实例
storage := database.NewStorage(logs.AddCompName(context.Background(), "Storage"), cfg)
if err := storage.Connect(ctx); err != nil {
@@ -428,8 +431,20 @@ func initStorage(ctx context.Context, cfg config.DatabaseConfig) (database.Stora
return nil, fmt.Errorf("数据库连接失败: %w", err)
}
// 获取所有模型
allModels := models.GetAllModels()
// -- 启动时检查:确保所有模型都实现了 schema.Tabler 接口 --
// 这是一个硬性要求,用于保证代码质量和表名定义的明确性。
// 如果一个模型没有实现 TableName() string 方法,程序将在此处 panic。
for _, model := range allModels {
if _, ok := model.(schema.Tabler); !ok {
logger.Panicf(fmt.Sprintf("启动失败:模型 %T 未实现 schema.Tabler 接口。请为该模型添加 TableName() string 方法,以显式指定其数据库表名。", model))
}
}
// 执行数据库迁移
if err := storage.Migrate(ctx, models.GetAllModels()...); err != nil {
if err := storage.Migrate(ctx, allModels...); err != nil {
return nil, fmt.Errorf("数据库迁移失败: %w", err)
}