package database import ( "fmt" "time" "github.com/hafizhproject45/Golang-Boilerplate.git/internal/config" "github.com/hafizhproject45/Golang-Boilerplate.git/internal/utils" "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" ) func Connect(dbHost, dbName string) *gorm.DB { dsn := fmt.Sprintf( "host=%s user=%s password=%s dbname=%s port=%d sslmode=disable TimeZone=Asia/Shanghai", dbHost, config.DBUser, config.DBPassword, dbName, config.DBPort, ) db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), SkipDefaultTransaction: true, PrepareStmt: true, TranslateError: true, }) if err != nil { utils.Log.Errorf("Failed to connect to database: %+v", err) } sqlDB, errDB := db.DB() if errDB != nil { utils.Log.Errorf("Failed to connect to database: %+v", errDB) } // Config connection pooling sqlDB.SetMaxIdleConns(10) sqlDB.SetMaxOpenConns(100) sqlDB.SetConnMaxLifetime(60 * time.Minute) return db }