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") } }