package db import ( "fmt" "log" "os" "time" "gorm.io/driver/postgres" "gorm.io/gorm" ) var ( DB *gorm.DB ) // -------------------- // DATABASE CONNECTION // -------------------- func Connect() { dsn := fmt.Sprintf( "host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Kolkata", mustEnv("DB_HOST"), mustEnv("DB_USER"), mustEnv("DB_PASSWORD"), mustEnv("DB_NAME"), getEnv("DB_PORT", "5433"), ) var err error DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { log.Fatal("❌ Could not connect to database:", err) } setupDB(DB) fmt.Println("✅ Database connected") } func setupDB(database *gorm.DB) { sqlDB, err := database.DB() if err != nil { log.Fatal("❌ Failed to get DB from GORM:", err) } sqlDB.SetMaxIdleConns(100) sqlDB.SetMaxOpenConns(1000) sqlDB.SetConnMaxLifetime(time.Minute * 5) } // -------------------- // DATABASE SHUTDOWN // -------------------- func CloseDB() { if DB == nil { return } sqlDB, err := DB.DB() if err != nil { log.Println("Error retrieving sql.DB:", err) return } fmt.Println("Connection closed Successfully") sqlDB.Close() } // -------------------- // ENV HELPERS // -------------------- func mustEnv(key string) string { val := os.Getenv(key) if val == "" { log.Fatalf("Missing required env variable: %s", key) } return val } func getEnv(key, fallback string) string { if val := os.Getenv(key); val != "" { return val } return fallback }