42 lines
821 B
Go
42 lines
821 B
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"time"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func InitDB() *gorm.DB {
|
|
host := os.Getenv("PG_HOST")
|
|
port := os.Getenv("PG_PORT")
|
|
database := os.Getenv("PG_DATABASE")
|
|
user := os.Getenv("PG_USER")
|
|
password := os.Getenv("PG_PASSWORD")
|
|
|
|
dsn := fmt.Sprintf(`host=%s port=%s user=%s password='%s' dbname=%s sslmode=disable`,
|
|
host, port, user, password, database)
|
|
|
|
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
log.Fatal("Failed to connect to database:", err)
|
|
}
|
|
|
|
sqlDB, err := db.DB()
|
|
if err != nil {
|
|
log.Fatal("Failed to get sql.DB from gorm:", err)
|
|
}
|
|
|
|
sqlDB.SetMaxOpenConns(25)
|
|
sqlDB.SetMaxIdleConns(25)
|
|
sqlDB.SetConnMaxLifetime(30 * time.Minute)
|
|
|
|
if err != nil {
|
|
log.Fatal("Database ping failed:", err)
|
|
}
|
|
|
|
return db
|
|
}
|