worktime/internal/database/db.go
2025-11-07 13:40:22 +01:00

56 lines
1.1 KiB
Go

package database
import (
"fmt"
"log"
"path/filepath"
"git.zervo.org/zervo/worktime/internal/database/models"
"git.zervo.org/zervo/worktime/internal/util"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
var db *gorm.DB
var migrations []any = []any{
&models.ProjectGroup{},
&models.Project{},
&models.Session{},
&models.SessionPause{},
&models.SyncTarget{},
}
// migrate migrates the given database
func migrate(db *gorm.DB) error {
for _, model := range migrations {
if err := db.AutoMigrate(model); err != nil {
return fmt.Errorf("migrate %T: %v", model, err)
}
}
return nil
}
// connect will open and prepare the local sqlite database
func connect() {
dbPath := filepath.Join(util.GetWorkDir(), "data.db")
var err error = nil
db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
if err != nil {
log.Fatalf("Failed to open database: %v", err)
}
err = migrate(db)
if err != nil {
log.Fatalf("Failed to migrate database: %v", err)
}
}
// DB returns the global database connection instance
func DB() *gorm.DB {
if db == nil {
connect()
}
return db
}