2024-11-23 20:29:53 -05:00
|
|
|
package database
|
|
|
|
|
|
|
|
import (
|
2024-11-23 20:51:25 -05:00
|
|
|
"embed"
|
2024-11-23 20:29:53 -05:00
|
|
|
"fmt"
|
2025-02-22 20:13:35 -05:00
|
|
|
|
|
|
|
migrate "github.com/rubenv/sql-migrate"
|
|
|
|
"gorm.io/gorm"
|
2024-11-23 20:29:53 -05:00
|
|
|
|
|
|
|
"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"
|
2025-01-18 09:51:13 -05:00
|
|
|
pModel "donetick.com/core/internal/points"
|
2025-02-25 23:56:49 -05:00
|
|
|
stModel "donetick.com/core/internal/subtask/model"
|
2024-11-23 20:29:53 -05:00
|
|
|
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
|
2025-02-22 20:13:35 -05:00
|
|
|
"donetick.com/core/migrations"
|
2024-11-23 20:29:53 -05:00
|
|
|
)
|
|
|
|
|
2024-11-23 20:51:25 -05:00
|
|
|
//go:embed migrations/*.sql
|
|
|
|
var embeddedMigrations embed.FS
|
|
|
|
|
2024-11-23 20:29:53 -05:00
|
|
|
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{},
|
2025-01-18 09:51:13 -05:00
|
|
|
pModel.PointsHistory{},
|
2025-02-25 23:56:49 -05:00
|
|
|
stModel.SubTask{},
|
2024-11-23 20:29:53 -05:00
|
|
|
); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func MigrationScripts(gormDB *gorm.DB, cfg *config.Config) error {
|
2024-11-23 20:51:25 -05:00
|
|
|
migrations := &migrate.EmbedFileSystemMigrationSource{
|
|
|
|
FileSystem: embeddedMigrations,
|
|
|
|
Root: "migrations",
|
2024-11-23 20:29:53 -05:00
|
|
|
}
|
|
|
|
|
2025-02-22 20:13:35 -05:00
|
|
|
var dialect string
|
|
|
|
switch cfg.Database.Type {
|
|
|
|
case "postgres":
|
|
|
|
dialect = "postgres"
|
|
|
|
case "sqlite":
|
|
|
|
dialect = "sqlite3"
|
|
|
|
default:
|
|
|
|
return fmt.Errorf("unsupported database type: %s", cfg.Database.Type)
|
2024-11-23 20:29:53 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
db, err := gormDB.DB()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2025-02-22 20:13:35 -05:00
|
|
|
n, err := migrate.Exec(db, dialect, migrations, migrate.Up)
|
2024-11-23 20:29:53 -05:00
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
fmt.Printf("Applied %d migrations!\n", n)
|
|
|
|
return nil
|
|
|
|
}
|