feat(auth): 完成租户用户角色资源核心模块
This commit is contained in:
82
backend/internal/database/database.go
Normal file
82
backend/internal/database/database.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"smart-customer-service/config"
|
||||
"smart-customer-service/internal/models"
|
||||
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
var DB *gorm.DB
|
||||
|
||||
// Init 初始化数据库连接
|
||||
func Init(cfg *config.Config) error {
|
||||
dsn := cfg.GetDSN()
|
||||
|
||||
// 设置日志级别
|
||||
var logLevel logger.LogLevel
|
||||
if cfg.Server.Mode == "debug" {
|
||||
logLevel = logger.Info
|
||||
} else {
|
||||
logLevel = logger.Warn
|
||||
}
|
||||
|
||||
var err error
|
||||
// 连接 MySQL 数据库
|
||||
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
|
||||
Logger: logger.Default.LogMode(logLevel),
|
||||
DisableForeignKeyConstraintWhenMigrating: true,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to connect to database: %w", err)
|
||||
}
|
||||
|
||||
log.Println("✅ Database connection established")
|
||||
|
||||
// 自动迁移模型
|
||||
if err := Migrate(cfg); err != nil {
|
||||
return fmt.Errorf("failed to migrate database: %w", err)
|
||||
}
|
||||
|
||||
log.Println("✅ Database migration completed")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Migrate 执行数据库迁移
|
||||
func Migrate(cfg *config.Config) error {
|
||||
// 全局模型
|
||||
if err := DB.AutoMigrate(
|
||||
// 租户体系
|
||||
&models.Tenant{},
|
||||
&models.User{},
|
||||
&models.Role{},
|
||||
&models.Resource{},
|
||||
&models.RoleResource{},
|
||||
&models.UserRole{},
|
||||
|
||||
// 业务模型
|
||||
&models.Conversation{},
|
||||
&models.Message{},
|
||||
&models.Ticket{},
|
||||
&models.KnowledgeBase{},
|
||||
&models.KnowledgeItem{},
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close 关闭数据库连接
|
||||
func Close() {
|
||||
if DB != nil {
|
||||
db, _ := DB.DB()
|
||||
db.Close()
|
||||
log.Println("✅ Database connection closed")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user