package database import ( "fmt" "log" "github.com/inchstep/server/internal/config" "github.com/inchstep/server/internal/models" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) var DB *gorm.DB // Init 初始化数据库连接并执行自动迁移 func Init(cfg *config.Config) *gorm.DB { dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=true&loc=Asia%%2FShanghai", cfg.DBUser, cfg.DBPass, cfg.DBHost, cfg.DBPort, cfg.DBName) db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Warn), }) if err != nil { log.Fatalf("数据库连接失败: %v", err) } // 自动迁移 if err := db.AutoMigrate( &models.User{}, &models.CheckInItem{}, &models.CheckInRecord{}, &models.Achievement{}, &models.UserAchievement{}, &models.Post{}, &models.Friend{}, &models.Group{}, &models.GroupMember{}, &models.Admin{}, ); err != nil { log.Fatalf("数据库迁移失败: %v", err) } DB = db return db } // GetDB 获取数据库实例 func GetDB() *gorm.DB { return DB }