relynolli-server/internal/database.go

67 lines
1.0 KiB
Go

package internal
import (
"database/sql"
"fmt"
"github.com/uptrace/bun/extra/bundebug"
"log"
"os"
"sync"
_ "github.com/go-sql-driver/mysql"
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/mysqldialect"
)
type database struct {
instance *bun.DB
}
type Database interface {
GetInstance() *bun.DB
}
var (
instance *database = nil
once sync.Once
)
func initialize() {
db, err := sql.Open("mysql", fmt.Sprintf(
"%s:%s@tcp(%s)/%s",
os.Getenv("MYSQL_USER"),
os.Getenv("MYSQL_PASSWORD"),
os.Getenv("MYSQL_HOST"),
os.Getenv("MYSQL_DATABASE")))
if err != nil {
panic(err)
}
// Resolve instances of bun
ormDb := bun.NewDB(db, mysqldialect.New())
ormDb.AddQueryHook(bundebug.NewQueryHook())
// Check Connection
conErr := ormDb.Ping()
if conErr != nil {
panic(conErr)
}
log.Println("Connection to db succeded")
instance = &database{instance: ormDb}
}
func InitDatabase() Database {
if instance == nil {
once.Do(initialize)
}
return instance
}
func (d *database) GetInstance() *bun.DB {
return d.instance
}