Go-based webhook generic handler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

89 lines
1.9 KiB

package common
import (
"fmt"
"log"
"os"
"time"
"github.com/DATA-DOG/go-sqlmock"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
type Database struct {
*gorm.DB
}
var DB *gorm.DB
// Opening a database and save the reference to `Database` struct.
func InitDB() *gorm.DB {
host := os.Getenv("DB_HOST")
user := os.Getenv("DB_USER")
pass := os.Getenv("DB_PASS")
dbName := os.Getenv("DB_NAME")
port := os.Getenv("DB_PORT")
var sslMode string
if os.Getenv("DB_SSL") == "TRUE" {
sslMode = "enable"
} else {
sslMode = "disable"
}
// DB Logger config
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
logger.Config{
SlowThreshold: time.Second, // Slow SQL threshold
LogLevel: logger.Silent, // Log level
IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
Colorful: true, // Disable color
},
)
dsn := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=%s TimeZone=Asia/Singapore", host, user, pass, dbName, port, sslMode)
var db *gorm.DB
var err error
for ok := true; ok; ok = err != nil {
db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
Logger: newLogger,
})
if err != nil {
fmt.Println("db err: (Init) ", err)
time.Sleep(1 * time.Second)
}
}
DB = db
return DB
}
// This function will create a temporarily database for running testing cases
func TestDBInit() *gorm.DB {
testSQLDB, mock, err := sqlmock.New()
if err != nil {
panic(err)
}
testDB, err := gorm.Open(postgres.New(postgres.Config{
Conn: testSQLDB,
}), &gorm.Config{})
if err != nil {
fmt.Println("db err: (TestDBInit) ", err)
}
DB = testDB
_ = mock
return DB
}
// Using this function to get a connection, you can create your connection pool here.
func GetDB() *gorm.DB {
return DB
}