package migrator import ( "github.com/golang-migrate/migrate/v4" migratePGX "github.com/golang-migrate/migrate/v4/database/pgx" "github.com/golang-migrate/migrate/v4/source/iofs" "github.com/jackc/pgx/v4" "github.com/jackc/pgx/v4/stdlib" "git.zom.bi/fanir/feedizer/models/migrations" ) type Migrator struct { m *migrate.Migrate err error } func (m *Migrator) Error() error { return m.err } func New(dbConfig string) *Migrator { source, err := iofs.New(migrations.FS, ".") if err != nil { return &Migrator{err: err} } connConfig, err := pgx.ParseConfig(dbConfig) if err != nil { return &Migrator{err: err} } connString := stdlib.RegisterConnConfig(connConfig) var p migratePGX.Postgres driver, err := p.Open(connString) if err != nil { return &Migrator{err: err} } m, err := migrate.NewWithInstance("iofs", source, "pgx", driver) if err != nil { return &Migrator{err: err} } return &Migrator{m: m} } // Migrate applies all migrations. func (m *Migrator) Migrate() error { if m.err == nil { m.err = m.m.Up() } return m.err } // Purge purges the entire database by undoing all migrations. func (m *Migrator) Purge() error { if m.err == nil { m.err = m.m.Down() } return m.err }