初始化
This commit is contained in:
36
internal/database/db.go
Normal file
36
internal/database/db.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
|
||||
"nl-pms-api/internal/config"
|
||||
"nl-pms-api/internal/model"
|
||||
)
|
||||
|
||||
// Open 连接 MySQL 并按环境处理表结构:
|
||||
// dev 环境自动迁移 pms_files;prod 严禁任何 DDL,缺表直接报错退出(提示执行 init.sql)。
|
||||
func Open(cfg *config.Config) (*gorm.DB, error) {
|
||||
lv := logger.Warn
|
||||
if cfg.Env == "dev" {
|
||||
lv = logger.Info
|
||||
}
|
||||
db, err := gorm.Open(mysql.Open(cfg.MySQL.DSN), &gorm.Config{Logger: logger.Default.LogMode(lv)})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("连接 MySQL 失败: %w", err)
|
||||
}
|
||||
if cfg.Env == "dev" {
|
||||
if err := db.AutoMigrate(&model.File{}); err != nil {
|
||||
return nil, fmt.Errorf("dev 自动迁移失败: %w", err)
|
||||
}
|
||||
return db, nil
|
||||
}
|
||||
if !db.Migrator().HasTable(&model.File{}) {
|
||||
return nil, errors.New("缺少 pms_files 表:生产环境启动不执行迁移,请先手工执行 init.sql")
|
||||
}
|
||||
return db, nil
|
||||
}
|
||||
Reference in New Issue
Block a user