56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"iris-test/app/repository"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
gormLogger "gorm.io/gorm/logger"
|
|
)
|
|
|
|
const CONNECTION_MAX_IDLE_TIME = time.Minute * 1
|
|
const DB_CONNECTION_TIMEOUT = 5
|
|
|
|
var DBConn *gorm.DB
|
|
|
|
func InitDB() *gorm.DB {
|
|
var connectionString = strings.Join([]string{
|
|
"postgres://",
|
|
Config.Database.Username, ":",
|
|
Config.Database.Password, "@",
|
|
Config.Database.Host, ":",
|
|
Config.Database.Port, "/",
|
|
Config.Database.Name,
|
|
"?sslmode=disable",
|
|
"&TimeZone=UTC",
|
|
"&connect_timeout=", strconv.Itoa(DB_CONNECTION_TIMEOUT),
|
|
}, "")
|
|
|
|
var logLevel = gormLogger.Silent
|
|
if Config.Application.DebugSQL {
|
|
logLevel = gormLogger.Info
|
|
}
|
|
|
|
var err error
|
|
DBConn, err = gorm.Open(postgres.Open(connectionString), &gorm.Config{
|
|
Logger: gormLogger.Default.LogMode(logLevel),
|
|
})
|
|
if err != nil {
|
|
msg := fmt.Sprintf("Error connecting to database: %s. Terminating!", err)
|
|
Log.Error(msg)
|
|
panic(msg)
|
|
}
|
|
|
|
// set connection autodisconnect after idle time
|
|
db, _ := DBConn.DB()
|
|
db.SetConnMaxIdleTime(CONNECTION_MAX_IDLE_TIME)
|
|
|
|
repository.Dao = repository.CreateDAO(DBConn)
|
|
|
|
return DBConn
|
|
}
|