48 lines
846 B
Go
48 lines
846 B
Go
package db
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
func getEnv(key string) string {
|
|
if value, ok := os.LookupEnv(key); ok {
|
|
return value
|
|
}
|
|
panic(fmt.Sprintf("Missing environment variable: %s", key))
|
|
}
|
|
|
|
func Init() *gorm.DB {
|
|
if DB != nil {
|
|
return DB
|
|
}
|
|
|
|
connectionString := fmt.Sprintf("host=%s user=%s password=%s dbname=%s host=%s port=%s TimeZone=%s",
|
|
getEnv("DB_HOST"),
|
|
getEnv("DB_USER"),
|
|
getEnv("DB_PASSWORD"),
|
|
getEnv("DB_NAME"),
|
|
getEnv("DB_HOST"),
|
|
getEnv("DB_PORT"),
|
|
getEnv("DB_TZ"))
|
|
db, err := gorm.Open(postgres.Open(connectionString), &gorm.Config{})
|
|
if err != nil {
|
|
panic(fmt.Errorf("failed to connect to database: %v", err))
|
|
}
|
|
|
|
sqlDB, err := db.DB()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
sqlDB.SetMaxOpenConns(10)
|
|
sqlDB.SetMaxIdleConns(5)
|
|
|
|
DB = db
|
|
return DB
|
|
}
|