chore: sync submodule state (parent ref update)
Made-with: Cursor
This commit is contained in:
106
scripts/run-migrations.sh
Executable file
106
scripts/run-migrations.sh
Executable file
@@ -0,0 +1,106 @@
|
||||
#!/bin/bash
|
||||
# Run Ledger Correctness Migrations
|
||||
# Executes all migrations in order with error checking
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
MIGRATIONS_DIR="$PROJECT_ROOT/db/migrations"
|
||||
|
||||
# Load database URL from environment or use default
|
||||
DATABASE_URL="${DATABASE_URL:-${1:-postgresql://user:password@localhost:5432/dbis}}"
|
||||
|
||||
echo "=== Running Ledger Correctness Migrations ==="
|
||||
echo "Database: $DATABASE_URL"
|
||||
echo "Migrations directory: $MIGRATIONS_DIR"
|
||||
echo ""
|
||||
|
||||
# Check if migrations directory exists
|
||||
if [ ! -d "$MIGRATIONS_DIR" ]; then
|
||||
echo "❌ Migrations directory not found: $MIGRATIONS_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# List of migrations in order
|
||||
MIGRATIONS=(
|
||||
"001_ledger_idempotency.sql"
|
||||
"002_dual_ledger_outbox.sql"
|
||||
"003_outbox_state_machine.sql"
|
||||
"004_balance_constraints.sql"
|
||||
"005_post_ledger_entry.sql"
|
||||
)
|
||||
|
||||
# Function to check if migration was already applied
|
||||
check_migration_applied() {
|
||||
local migration_name=$1
|
||||
# This assumes you have a migrations tracking table
|
||||
# Adjust based on your migration tracking system
|
||||
psql "$DATABASE_URL" -tAc "SELECT 1 FROM schema_migrations WHERE version = '$migration_name'" 2>/dev/null || echo "0"
|
||||
}
|
||||
|
||||
# Run each migration
|
||||
for migration in "${MIGRATIONS[@]}"; do
|
||||
migration_path="$MIGRATIONS_DIR/$migration"
|
||||
|
||||
if [ ! -f "$migration_path" ]; then
|
||||
echo "⚠️ Migration file not found: $migration"
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "Running: $migration"
|
||||
|
||||
# Run migration
|
||||
if psql "$DATABASE_URL" -f "$migration_path"; then
|
||||
echo "✅ $migration completed successfully"
|
||||
echo ""
|
||||
else
|
||||
echo "❌ $migration failed"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "=== All migrations completed successfully ==="
|
||||
|
||||
# Verify migrations
|
||||
echo ""
|
||||
echo "=== Verifying migrations ==="
|
||||
|
||||
# Check idempotency constraint
|
||||
echo "Checking idempotency constraint..."
|
||||
psql "$DATABASE_URL" -tAc "
|
||||
SELECT CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1 FROM information_schema.table_constraints
|
||||
WHERE constraint_name = 'ledger_entries_unique_ledger_reference'
|
||||
) THEN '✅ Idempotency constraint exists'
|
||||
ELSE '❌ Idempotency constraint missing'
|
||||
END;
|
||||
"
|
||||
|
||||
# Check outbox table
|
||||
echo "Checking outbox table..."
|
||||
psql "$DATABASE_URL" -tAc "
|
||||
SELECT CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1 FROM information_schema.tables
|
||||
WHERE table_name = 'dual_ledger_outbox'
|
||||
) THEN '✅ Outbox table exists'
|
||||
ELSE '❌ Outbox table missing'
|
||||
END;
|
||||
"
|
||||
|
||||
# Check posting function
|
||||
echo "Checking posting function..."
|
||||
psql "$DATABASE_URL" -tAc "
|
||||
SELECT CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1 FROM pg_proc
|
||||
WHERE proname = 'post_ledger_entry'
|
||||
) THEN '✅ Posting function exists'
|
||||
ELSE '❌ Posting function missing'
|
||||
END;
|
||||
"
|
||||
|
||||
echo ""
|
||||
echo "=== Migration verification complete ==="
|
||||
Reference in New Issue
Block a user