initial commit
This commit is contained in:
85
db/connect.go
Normal file
85
db/connect.go
Normal file
@@ -0,0 +1,85 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user