feedizer/cmd/feedizer/internal/database/migrator/migrator.go
fanir a7d08500f5 database and migrator revisions, help output, data model changes
- database:
  - moved to jackc/pgx from database/sql
  - revised migrator and moved it into it's own package
  - separated ParseConfig into it's own function
- config:
  - database config is now a DSN or URL instead of a struct
  - SearchPaths are now available through a function
- improved help / usage output
- modified data model
2022-02-22 00:08:19 +01:00

61 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"
"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
}