73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
// 数据库连接管理 + GORM AutoMigrate
|
|
package database
|
|
|
|
import (
|
|
"log"
|
|
|
|
"com.sclktx/m/v2/internal/common/model"
|
|
"com.sclktx/m/v2/internal/pkg/config"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
// InitDB 初始化 PostgreSQL 连接并执行自动迁移
|
|
func InitDB(cfg *config.DatabaseConfig) *gorm.DB {
|
|
var err error
|
|
logLevel := logger.Info
|
|
|
|
if cfg.SSLMode == "" {
|
|
cfg.SSLMode = "disable"
|
|
}
|
|
|
|
DB, err = gorm.Open(postgres.Open(cfg.DSN()), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logLevel),
|
|
DisableForeignKeyConstraintWhenMigrating: true,
|
|
})
|
|
if err != nil {
|
|
log.Fatalf("Failed to connect to database: %v", err)
|
|
}
|
|
|
|
if err := AutoMigrate(DB); err != nil {
|
|
log.Fatalf("Failed to auto migrate: %v", err)
|
|
}
|
|
|
|
return DB
|
|
}
|
|
|
|
// AutoMigrate 自动迁移所有模型对应的数据库表
|
|
func AutoMigrate(db *gorm.DB) error {
|
|
return db.AutoMigrate(
|
|
&model.User{},
|
|
&model.Visitor{},
|
|
&model.Appointment{},
|
|
&model.VisitRecord{},
|
|
&model.Invitation{},
|
|
&model.Banner{},
|
|
&model.InviteCode{},
|
|
&model.Notice{},
|
|
&model.Notification{},
|
|
&model.AdminUser{},
|
|
&model.Department{},
|
|
&model.EmployeeCertification{},
|
|
// 工作流引擎
|
|
&model.ProcessDefinition{},
|
|
&model.ProcessInstance{},
|
|
&model.Task{},
|
|
&model.GoodsTemplate{},
|
|
&model.VehicleInfo{},
|
|
&model.UserDepartment{},
|
|
&model.VisitorArea{},
|
|
&model.VisitType{},
|
|
&model.PendingEmployee{},
|
|
&model.GlobalApprover{},
|
|
)
|
|
}
|
|
|
|
func GetDB() *gorm.DB {
|
|
return DB
|
|
}
|