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 }