Add Support for Advance Labels ( LabelV2)

Add Support for Custom Migration to keep supporting two database( sqlite and postgres)
Migration from Label to LabelV2
This commit is contained in:
Mo Tarbin 2024-11-23 20:29:53 -05:00
parent 6dc8092ff4
commit 0c07b33359
12 changed files with 730 additions and 49 deletions

View file

@ -33,13 +33,11 @@ func NewDatabase(cfg *config.Config) (*gorm.DB, error) {
}
default:
path := os.Getenv("DT_SQLITE_PATH")
if path == "" {
db, err = gorm.Open(sqlite.Open("donetick.db"), &gorm.Config{})
} else {
db, err = gorm.Open(sqlite.Open(path), &gorm.Config{})
path = "donetick.db"
}
db, err = gorm.Open(sqlite.Open(path), &gorm.Config{})
}

View file

@ -0,0 +1,72 @@
package database
import (
"fmt"
"os"
"path/filepath"
"runtime"
"donetick.com/core/config"
chModel "donetick.com/core/internal/chore/model"
cModel "donetick.com/core/internal/circle/model"
nModel "donetick.com/core/internal/notifier/model"
tModel "donetick.com/core/internal/thing/model"
uModel "donetick.com/core/internal/user/model" // Pure go SQLite driver, checkout https://github.com/glebarez/sqlite for details
migrations "donetick.com/core/migrations"
migrate "github.com/rubenv/sql-migrate"
"gorm.io/gorm"
)
func Migration(db *gorm.DB) error {
if err := db.AutoMigrate(uModel.User{}, chModel.Chore{},
chModel.ChoreHistory{},
cModel.Circle{},
cModel.UserCircle{},
chModel.ChoreAssignees{},
nModel.Notification{},
uModel.UserPasswordReset{},
tModel.Thing{},
tModel.ThingChore{},
tModel.ThingHistory{},
uModel.APIToken{},
uModel.UserNotificationTarget{},
chModel.Label{},
chModel.ChoreLabels{},
migrations.Migration{},
); err != nil {
return err
}
return nil
}
func MigrationScripts(gormDB *gorm.DB, cfg *config.Config) error {
migrations := &migrate.FileMigrationSource{
Dir: migrationDir(),
}
path := os.Getenv("DT_SQLITE_PATH")
if path == "" {
path = "donetick.db"
}
db, err := gormDB.DB()
if err != nil {
return err
}
n, err := migrate.Exec(db, "sqlite3", migrations, migrate.Up)
if err != nil {
return err
}
fmt.Printf("Applied %d migrations!\n", n)
return nil
}
func migrationDir() string {
_, filename, _, ok := runtime.Caller(1)
if !ok {
return ""
}
return filepath.Join(filepath.Dir(filename), "../../migrations")
}