vaulterm/server/db/database.go
2024-11-12 19:15:13 +07:00

62 lines
951 B
Go

package db
import (
"log"
"os"
"strings"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
var dbInstance *gorm.DB
func Get() *gorm.DB {
if dbInstance == nil {
log.Fatal("database not initialized")
}
return dbInstance
}
func Init() {
// log.Println("Initializing database...")
dsn := os.Getenv("DATABASE_URL")
if dsn == "" {
dsn = "file:data.db?cache=shared&mode=rwc&_journal_mode=WAL"
}
// Open db connection
var con gorm.Dialector
if strings.HasPrefix(dsn, "postgres:") {
con = postgres.Open(dsn)
} else {
con = sqlite.Open(dsn)
}
db, err := gorm.Open(con, &gorm.Config{
SkipDefaultTransaction: true,
})
if err != nil {
log.Fatal(err)
}
dbInstance = db
// Migrate the schema
db.AutoMigrate(Models...)
InitModels(db)
runSeeders(db)
}
func Close() error {
con, err := dbInstance.DB()
if err != nil {
return err
}
if err := con.Close(); err != nil {
return err
}
return nil
}