package models import ( "fmt" "time" "giteapm/config" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) var DB *gorm.DB func InitDB(cfg config.DatabaseConfig) (*gorm.DB, error) { dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local", cfg.Username, cfg.Password, cfg.Host, cfg.Port, cfg.Database, cfg.Charset) var err error DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), }) if err != nil { return nil, fmt.Errorf("连接数据库失败: %v", err) } sqlDB, err := DB.DB() if err != nil { return nil, fmt.Errorf("获取底层数据库连接失败: %v", err) } sqlDB.SetMaxIdleConns(10) sqlDB.SetMaxOpenConns(100) sqlDB.SetConnMaxLifetime(time.Hour) if err := autoMigrate(); err != nil { return nil, fmt.Errorf("数据库迁移失败: %v", err) } return DB, nil } func autoMigrate() error { return DB.AutoMigrate( &User{}, &Project{}, &ProjectMember{}, &Epic{}, &Story{}, &Task{}, &GiteaRelation{}, &Sprint{}, &Comment{}, &Tag{}, &EntityTag{}, &TimeLog{}, &WebhookConfig{}, ) }