Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package db
- import (
- "fmt"
- "isi.nc/inm/dpc/pkg/env"
- "isi.nc/inm/dpc/pkg/logger"
- "github.com/jinzhu/gorm"
- //need side-effects
- _ "github.com/jinzhu/gorm/dialects/postgres"
- )
- const (
- hostOverride = "OVERRIDE_SQL_HOST"
- portOverride = "OVERRIDE_SQL_PORT"
- userOverride = "OVERRIDE_SQL_USER"
- dbNameOverride = "OVERRIDE_SQL_DB_NAME"
- passwordOverride = "OVERRIDE_SQL_PASSWORD"
- configOverride = "OVERRIDE_SQL_CONFIG"
- logModeOverride = "OVERRIDE_SQL_LOG_MODE"
- defaultHost = "dpcv2-postgresql"
- defaultPort = "5432"
- defaultUser = "postgres"
- defaultDbName = "inm"
- defaultPassword = "postgres"
- defaultConfig = "sslmode=disable"
- defaultLogMode = "false"
- )
- type PostgresDB struct {
- db *gorm.DB
- }
- type psqlLogger struct {
- }
- func (p psqlLogger) Print(v ...interface{}) {
- logger.Debug.Print(v...)
- }
- func NewPostgresDB(optionalDbName *string) (*PostgresDB, error) {
- var dbName string
- if optionalDbName != nil {
- dbName = *optionalDbName
- } else {
- dbName = env.GetOrDefault(dbNameOverride, defaultDbName)
- }
- dsn := fmt.Sprintf("user=%v password=%v host=%v port=%v dbname=%v %v",
- env.GetOrDefault(userOverride, defaultUser),
- env.GetOrDefault(passwordOverride, defaultPassword),
- env.GetOrDefault(hostOverride, defaultHost),
- env.GetOrDefault(portOverride, defaultPort),
- dbName,
- env.GetOrDefault(configOverride, defaultConfig))
- _db, err := gorm.Open("postgres", dsn)
- if err != nil {
- logger.Error.Printf("Impossible to connect w/ BDD: %s", err.Error())
- return nil, err
- }
- if env.GetOrDefault(logModeOverride, defaultLogMode) == "true" {
- _db.LogMode(true)
- } else {
- _db.SetLogger(psqlLogger{})
- }
- if err := _db.Exec("CREATE EXTENSION IF NOT EXISTS unaccent").Error; err != nil {
- logger.Error.Printf("Impossible to create extension unaccent: %s", err.Error())
- return nil, err
- }
- if err := _db.Exec("CREATE EXTENSION IF NOT EXISTS fuzzystrmatch").Error; err != nil {
- logger.Error.Printf("Impossible to create extension fuzzystrmatch: %s", err.Error())
- return nil, err
- }
- return &PostgresDB{
- db: _db.Set("gorm:auto_preload", true),
- }, nil
- }
- func (p *PostgresDB) DB() *gorm.DB {
- return p.db
- }
- func (p *PostgresDB) PrefixTables(prefix string) {
- gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
- return prefix + "_" + defaultTableName
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement