71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package database
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"os"
|
|
|
|
"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"
|
|
pModel "donetick.com/core/internal/points"
|
|
stModel "donetick.com/core/internal/subtask/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"
|
|
)
|
|
|
|
//go:embed migrations/*.sql
|
|
var embeddedMigrations embed.FS
|
|
|
|
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{},
|
|
pModel.PointsHistory{},
|
|
stModel.SubTask{},
|
|
); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func MigrationScripts(gormDB *gorm.DB, cfg *config.Config) error {
|
|
migrations := &migrate.EmbedFileSystemMigrationSource{
|
|
FileSystem: embeddedMigrations,
|
|
Root: "migrations",
|
|
}
|
|
|
|
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
|
|
}
|