package database import ( "fmt" "git.watanabebashi.net/Watanabebashi/WB-Likomment/internal/config" "git.watanabebashi.net/Watanabebashi/WB-Likomment/internal/model" "gorm.io/driver/mysql" "gorm.io/driver/sqlite" "gorm.io/gorm" ) type Database struct { *gorm.DB } func NewDatabase(cfg *config.Config) (*Database, error) { var dialector gorm.Dialector if cfg.DB.Type == "mysql" { dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", cfg.DB.User, cfg.DB.Password, cfg.DB.Host, cfg.DB.Port, cfg.DB.Name) dialector = mysql.Open(dsn) } else if cfg.DB.Type == "sqlite" { dsn := cfg.DB.Name + ".db" dialector = sqlite.Open(dsn) } else { return nil, fmt.Errorf("unsupported database type: %s", cfg.DB.Type) } db, err := gorm.Open(dialector, &gorm.Config{}) if err != nil { return nil, err } // Get underlying sql.DB for connection pool settings sqlDB, err := db.DB() if err != nil { return nil, err } sqlDB.SetMaxOpenConns(25) sqlDB.SetMaxIdleConns(25) // Auto migrate tables err = db.AutoMigrate(&model.Like{}, &model.Comment{}, &model.LikeLog{}) if err != nil { return nil, err } return &Database{DB: db}, nil } func (d *Database) Close() error { sqlDB, err := d.DB.DB() if err != nil { return err } return sqlDB.Close() }