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

58 lines
1.2 KiB
Go

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/stdlib"
"git.zom.bi/fanir/feedizer/cmd/feedizer/internal/database"
"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}
}
poolConfig, err := database.ParseConfig(dbConfig)
if err != nil {
return &Migrator{err: err}
}
driver, err := migratePGX.WithInstance(stdlib.OpenDB(*poolConfig.ConnConfig), &migratePGX.Config{})
if err != nil {
return &Migrator{err: err}
}
m, err := migrate.NewWithInstance("iofs", source, "pgx", driver)
if err != nil {
return &Migrator{err: err}
}
m.Log = &Logger{}
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
}