61 lines
1.2 KiB
Go
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
|
||
|
}
|