feedizer/cmd/feedizer/internal/database/migrator/migrator.go

61 lines
1.2 KiB
Go
Raw Normal View History

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
}