package db import ( "cybertron/configs" "cybertron/pkg/log" "time" "go.uber.org/zap" "gorm.io/driver/postgres" "gorm.io/gorm" ) var logger = log.Log.GetLog() func NewDBClient() *gorm.DB { postgresConfig := configs.GetPostgresConfig() db, err := gorm.Open(postgres.Open(postgresConfig.GetPostgresDsn()), &gorm.Config{}) if err != nil { logger.Error("database connection failed", zap.Error(err)) } sqlDB, err := db.DB() if err != nil { logger.Fatal(err.Error()) } connMaxIdleDuration, err := time.ParseDuration(postgresConfig.GetMaxIdleConnectionTimeout()) if err != nil { logger.Fatal(err.Error()) } connMaxLifetimeDuration, err := time.ParseDuration(postgresConfig.GetMaxConnectionLifetime()) if err != nil { logger.Fatal(err.Error()) } sqlDB.SetConnMaxIdleTime(time.Duration(connMaxIdleDuration.Seconds())) sqlDB.SetConnMaxLifetime(time.Duration(connMaxLifetimeDuration.Seconds())) sqlDB.SetMaxIdleConns(postgresConfig.GetMaxIdleConnections()) sqlDB.SetMaxOpenConns(postgresConfig.GetMaxOpenConnections()) err = sqlDB.Ping() if err != nil { logger.Fatal(err.Error()) } logger.Info("database connection established") return db }