worklog-api/db/connection.go
2025-03-17 17:55:17 -05:00

61 lines
1.1 KiB
Go

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
}