package migrate import ( "database/sql" "embed" "os" "strconv" "github.com/pressly/goose/v3" ) //go:embed migrations/*.sql var embedMigrations embed.FS // MigrationsDir migration dir const MigrationsDir string = "migrations" func init() { goose.SetBaseFS(embedMigrations) goose.SetSequential(true) goose.SetTableName("scroll_migrations") verbose, _ := strconv.ParseBool(os.Getenv("LOG_SQL_MIGRATIONS")) goose.SetVerbose(verbose) } // Migrate migrate db func Migrate(db *sql.DB) error { //return goose.Up(db, MIGRATIONS_DIR, goose.WithAllowMissing()) return goose.Up(db, MigrationsDir, goose.WithAllowMissing()) } // Rollback rollback to the given version func Rollback(db *sql.DB, version *int64) error { if version != nil { return goose.DownTo(db, MigrationsDir, *version) } return goose.Down(db, MigrationsDir) } // ResetDB clean and migrate db. func ResetDB(db *sql.DB) error { if err := Rollback(db, new(int64)); err != nil { return err } return Migrate(db) } // Current get current version func Current(db *sql.DB) (int64, error) { return goose.GetDBVersion(db) } // Status is normal or not func Status(db *sql.DB) error { return goose.Version(db, MigrationsDir) } // Create a new migration folder func Create(db *sql.DB, name, migrationType string) error { return goose.Create(db, MigrationsDir, name, migrationType) }