package postgres import ( "houston/logger" "os" "time" "go.uber.org/zap" "gorm.io/driver/postgres" "gorm.io/gorm" ) type Client struct{ gormClient *gorm.DB } func NewGormClient(dsn string, connMaxIdleTime string, connMaxLifetime string, setMaxIdleConns int, setMaxOpenConns int) *gorm.DB { db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { logger.Error("database connection failed", zap.Error(err)) os.Exit(1) } sqlDB, err := db.DB() if err != nil { logger.Fatal(err.Error()) } connMaxIdleDuration, err := time.ParseDuration(connMaxIdleTime) if err != nil { logger.Fatal(err.Error()) } connMaxLifetimeDuration, err := time.ParseDuration(connMaxLifetime) if err != nil { logger.Fatal(err.Error()) } sqlDB.SetConnMaxIdleTime(time.Duration(connMaxIdleDuration.Seconds())) sqlDB.SetConnMaxLifetime(time.Duration(connMaxLifetimeDuration.Seconds())) sqlDB.SetMaxIdleConns(setMaxIdleConns) sqlDB.SetMaxOpenConns(setMaxOpenConns) err = sqlDB.Ping() if err != nil { logger.Fatal(err.Error()) } logger.Info("database connection established") return db }