67 lines
1.0 KiB
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
|
|
}
|