83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package postgresql
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/golang-migrate/migrate/v4"
|
|
"github.com/golang-migrate/migrate/v4/database/postgres"
|
|
_ "github.com/golang-migrate/migrate/v4/source/file"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
"github.com/jackc/pgx/v5/stdlib"
|
|
)
|
|
|
|
func RunMigrationsWithString(connectionString string, migrationDir string) error {
|
|
m, err := migrate.New(
|
|
"file://"+migrationDir,
|
|
connectionString)
|
|
if err != nil {
|
|
return fmt.Errorf("apply migrations: %w", err)
|
|
}
|
|
if err := m.Up(); err != nil {
|
|
return fmt.Errorf("apply migrations: %w", err)
|
|
}
|
|
|
|
if err = m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
|
return fmt.Errorf("apply migrations: %w", err)
|
|
}
|
|
|
|
log.Println("✅ Migrations applied")
|
|
return nil
|
|
}
|
|
|
|
type MigrationHandler struct {
|
|
migrate *migrate.Migrate
|
|
}
|
|
|
|
func (migration *MigrationHandler) Up() error {
|
|
if err := migration.migrate.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
|
return fmt.Errorf("apply migrations: %w", err)
|
|
}
|
|
|
|
log.Println("✅ Migrations applied")
|
|
return nil
|
|
}
|
|
|
|
func (migration *MigrationHandler) Down() error {
|
|
if err := migration.migrate.Down(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
|
return fmt.Errorf("apply migrations: %w", err)
|
|
}
|
|
|
|
log.Println("✅ Migrations applied")
|
|
return nil
|
|
}
|
|
|
|
func NewMigrationWithInstance(pool *pgxpool.Pool, migrationDir string) (*MigrationHandler, error) {
|
|
db := stdlib.OpenDBFromPool(pool)
|
|
|
|
driver, err := postgres.WithInstance(db, &postgres.Config{})
|
|
if err != nil {
|
|
return nil, fmt.Errorf("create migration driver: %w", err)
|
|
}
|
|
|
|
m, err := migrate.NewWithDatabaseInstance(
|
|
"file://"+migrationDir,
|
|
"postgres", driver)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("create migrator: %w", err)
|
|
}
|
|
|
|
//m.Down()
|
|
|
|
/*if err = m.Up(); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
|
return fmt.Errorf("apply migrations: %w", err)
|
|
}
|
|
|
|
log.Println("✅ Migrations applied")*/
|
|
|
|
return &MigrationHandler{
|
|
migrate: m,
|
|
}, nil
|
|
}
|