增加Taber实现校验
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user