package db import ( "fmt" "log" "os" "github.com/joho/godotenv" "gorm.io/driver/postgres" "gorm.io/gorm" ) var DB *gorm.DB func getEnv(key string) string { log.Printf("Loading environment variables...") err := godotenv.Load() if err != nil { log.Fatal(fmt.Sprintf("Error loading .env file: %v", err)) } value := os.Getenv(key) if value != "" { return value } panic(fmt.Sprintf("Missing environment variable: %s", key)) } func Init() (*gorm.DB, error) { if DB != nil { return DB, nil } log.Println("Initializing database connection...") connectionString := fmt.Sprintf("user=%s password=%s dbname=%s host=%s port=%s TimeZone=%s", getEnv("DB_USER"), getEnv("DB_PASSWORD"), getEnv("DB_NAME"), getEnv("DB_HOST"), getEnv("DB_EXPOSED_PORT"), getEnv("DB_TZ")) log.Printf("Database connection string: %s", connectionString) db, err := gorm.Open(postgres.Open(connectionString), &gorm.Config{}) if err != nil { return nil, err } sqlDB, err := db.DB() if err != nil { return nil, err } sqlDB.SetMaxOpenConns(10) sqlDB.SetMaxIdleConns(5) log.Println("Database connection established successfully") return db, nil }