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 }