Ruprod_monitor/internal/migrator/db.go

48 lines
1.2 KiB
Go

package migrator
import (
"context"
"fmt"
"log"
"os"
"path/filepath"
"github.com/jackc/pgx/v5"
)
func runMigration(ctx context.Context, db *pgx.Conn, migrationFile string) error {
fmt.Printf("MF: %s\n", migrationFile)
content, err := os.ReadFile(migrationFile)
if err != nil {
return fmt.Errorf("Failed to read migration file: %s", migrationFile)
}
_, err = db.Exec(ctx, string(content))
if err != nil {
return fmt.Errorf("Failed to execute migtation code: %s", err)
}
return nil
}
func Migrate(ctx context.Context, db *pgx.Conn) error {
workingDirectoryPath, err := os.Getwd()
if err != nil {
return fmt.Errorf("Failed to get current working directory in migrate tool")
}
migrationsPath := workingDirectoryPath + "/internal/migrations/"
files, err := os.ReadDir(migrationsPath)
if err != nil {
return fmt.Errorf("Failed to read migrations directory: %s", err)
}
for _, file := range files {
if filepath.Ext(file.Name()) == ".sql" {
migrationPath := filepath.Join(migrationsPath, file.Name())
fmt.Printf("Migration path: %s\n", migrationPath)
if err := runMigration(ctx, db, migrationPath); err != nil {
return err
}
log.Printf("Migration %s applied\n", file.Name())
}
}
return nil
}