Files
steam_analyzer/pkg/postgresql/migrations.go
2026-01-17 22:45:02 +03:00

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
}