Initial
This commit is contained in:
65
app/lib/db/db.go
Normal file
65
app/lib/db/db.go
Normal file
@ -0,0 +1,65 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"repo-pattern/app/lib/cfg"
|
||||
"repo-pattern/app/lib/logging"
|
||||
"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 ConnectToDb(config *cfg.DatabaseConfig) (*gorm.DB, error) {
|
||||
var connectionString = strings.Join([]string{
|
||||
"postgres://",
|
||||
config.Username, ":",
|
||||
config.Password, "@",
|
||||
config.Host, ":",
|
||||
config.Port, "/",
|
||||
config.Name,
|
||||
"?sslmode=disable",
|
||||
"&TimeZone=UTC",
|
||||
"&connect_timeout=", strconv.Itoa(DB_CONNECTION_TIMEOUT),
|
||||
}, "")
|
||||
|
||||
var logLevel gormLogger.LogLevel
|
||||
if config.DebugSQL {
|
||||
logLevel = gormLogger.Info
|
||||
} else {
|
||||
logLevel = gormLogger.Silent
|
||||
}
|
||||
|
||||
conn, err := gorm.Open(postgres.Open(connectionString), &gorm.Config{
|
||||
Logger: gormLogger.Default.LogMode(logLevel),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return conn, nil
|
||||
}
|
||||
|
||||
func InitDB() *gorm.DB {
|
||||
var err error
|
||||
DBConn, err = ConnectToDb(&cfg.Config.Database)
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("Error connecting to database: %s. Terminating!", err)
|
||||
logging.Log.Error(msg)
|
||||
panic(msg)
|
||||
}
|
||||
|
||||
// set connection autodisconnect after idle time
|
||||
db, _ := DBConn.DB()
|
||||
db.SetConnMaxIdleTime(CONNECTION_MAX_IDLE_TIME)
|
||||
|
||||
return DBConn
|
||||
}
|
||||
Reference in New Issue
Block a user