61 lines
1.1 KiB
Go
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
|
|
}
|