pop-camarades/helpers/database.go

67 lines
1.1 KiB
Go

package helpers
import (
"git.readonly.ch/bouzoure/pop-camarades/models"
"gorm.io/driver/postgres"
"gorm.io/gorm"
gormLogger "gorm.io/gorm/logger"
)
var database *gorm.DB
var connected bool
func GetDatabase() (*gorm.DB, error) {
if connected {
return database, nil
}
config, err := GetConfig()
if err != nil {
return database, err
}
logLevel := gormLogger.Error
if config.Debug {
logLevel = gormLogger.Info
}
gormConfig := gorm.Config{
Logger: gormLogger.Default.LogMode(logLevel),
}
database, err = gorm.Open(
postgres.Open(config.Database.DSN),
&gormConfig,
)
if err != nil {
return database, err
}
db, err := database.DB()
if err != nil {
return database, err
}
db.SetMaxIdleConns(10)
db.SetMaxOpenConns(50)
err = database.AutoMigrate(
&models.User{},
&models.UserSavedSession{},
&models.Section{},
&models.Role{},
&models.UserRole{},
&models.Person{},
&models.PersonAccount{},
&models.List{},
&models.ListItem{},
&models.Field{},
&models.FieldValue{},
)
if err != nil {
return database, err
}
connected = true
return database, nil
}