142 lines
4.5 KiB
Bash
Executable File
142 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Check Database Status for AS4 Settlement
|
|
# Verifies database connectivity and readiness
|
|
|
|
set -e
|
|
|
|
echo "========================================="
|
|
echo "AS4 Settlement Database Status Check"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# Load environment variables
|
|
if [ -f .env ]; then
|
|
export $(grep -v '^#' .env | xargs)
|
|
else
|
|
echo "⚠ Warning: .env file not found"
|
|
echo ""
|
|
fi
|
|
|
|
# Check PostgreSQL client
|
|
echo "1. Checking PostgreSQL client..."
|
|
if command -v psql &> /dev/null; then
|
|
PSQL_VERSION=$(psql --version | head -1)
|
|
echo " ✓ PostgreSQL client installed: $PSQL_VERSION"
|
|
else
|
|
echo " ✗ PostgreSQL client not found"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Check DATABASE_URL
|
|
echo "2. Checking DATABASE_URL..."
|
|
if [ -z "$DATABASE_URL" ]; then
|
|
echo " ✗ DATABASE_URL not set"
|
|
echo ""
|
|
echo " Please set DATABASE_URL in .env file"
|
|
echo " Example: DATABASE_URL=postgresql://user:password@host:port/database"
|
|
exit 1
|
|
else
|
|
# Mask password in output
|
|
MASKED_URL=$(echo "$DATABASE_URL" | sed 's/:\/\/[^:]*:[^@]*@/:\/\/***:***@/')
|
|
echo " ✓ DATABASE_URL is set: $MASKED_URL"
|
|
fi
|
|
echo ""
|
|
|
|
# Test connection
|
|
echo "3. Testing database connection..."
|
|
if timeout 5 psql "$DATABASE_URL" -c "SELECT version();" &> /dev/null; then
|
|
PG_VERSION=$(timeout 5 psql "$DATABASE_URL" -c "SELECT version();" -t -A 2>/dev/null | head -1)
|
|
echo " ✓ Database connection successful"
|
|
echo " PostgreSQL version: $PG_VERSION"
|
|
else
|
|
echo " ✗ Database connection failed"
|
|
echo ""
|
|
echo " Possible issues:"
|
|
echo " - Database server not running"
|
|
echo " - Network connectivity issues"
|
|
echo " - Incorrect credentials"
|
|
echo " - Database does not exist"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Check database exists
|
|
echo "4. Checking database schema..."
|
|
if timeout 5 psql "$DATABASE_URL" -c "SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'public';" &> /dev/null; then
|
|
echo " ✓ Public schema exists"
|
|
else
|
|
echo " ✗ Public schema not found"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Check Prisma migrations table
|
|
echo "5. Checking Prisma migrations..."
|
|
if timeout 5 psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM _prisma_migrations;" &> /dev/null 2>&1; then
|
|
MIGRATION_COUNT=$(timeout 5 psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM _prisma_migrations;" -t -A 2>/dev/null | tr -d ' ')
|
|
echo " ✓ Prisma migrations table exists"
|
|
echo " Migration count: $MIGRATION_COUNT"
|
|
|
|
# Show last 5 migrations
|
|
echo ""
|
|
echo " Recent migrations:"
|
|
timeout 5 psql "$DATABASE_URL" -c "SELECT migration_name, finished_at FROM _prisma_migrations ORDER BY finished_at DESC LIMIT 5;" -t -A 2>/dev/null | while read line; do
|
|
if [ -n "$line" ]; then
|
|
echo " - $line"
|
|
fi
|
|
done
|
|
else
|
|
echo " ⚠ Prisma migrations table not found (database may be new)"
|
|
fi
|
|
echo ""
|
|
|
|
# Check for AS4 tables
|
|
echo "6. Checking AS4 tables..."
|
|
AS4_TABLES=$(timeout 5 psql "$DATABASE_URL" -c "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'as4_%' ORDER BY table_name;" -t -A 2>/dev/null | grep -v '^$' | wc -l | tr -d ' ')
|
|
if [ "$AS4_TABLES" -gt 0 ]; then
|
|
echo " ✓ Found $AS4_TABLES AS4 table(s)"
|
|
echo ""
|
|
echo " AS4 tables:"
|
|
timeout 5 psql "$DATABASE_URL" -c "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'as4_%' ORDER BY table_name;" -t -A 2>/dev/null | while read line; do
|
|
if [ -n "$line" ]; then
|
|
echo " - $line"
|
|
fi
|
|
done
|
|
else
|
|
echo " ⚠ No AS4 tables found (migration not yet applied)"
|
|
fi
|
|
echo ""
|
|
|
|
# Check Prisma client
|
|
echo "7. Checking Prisma client..."
|
|
if [ -f "node_modules/.prisma/client/index.js" ]; then
|
|
echo " ✓ Prisma client generated"
|
|
else
|
|
echo " ⚠ Prisma client not generated - run: npx prisma generate"
|
|
fi
|
|
echo ""
|
|
|
|
# Summary
|
|
echo "========================================="
|
|
echo "Database Status Summary"
|
|
echo "========================================="
|
|
echo "✓ Database connection: OK"
|
|
echo "✓ PostgreSQL version: $PG_VERSION"
|
|
|
|
if [ "$AS4_TABLES" -gt 0 ]; then
|
|
echo "✓ AS4 tables: Found ($AS4_TABLES tables)"
|
|
echo ""
|
|
echo "Status: ✅ Database is ready and AS4 tables exist"
|
|
else
|
|
echo "⚠ AS4 tables: Not found"
|
|
echo ""
|
|
echo "Status: ✅ Database is ready (migration needed)"
|
|
echo ""
|
|
echo "Next step: Run migration"
|
|
echo " npx prisma migrate deploy"
|
|
fi
|
|
echo ""
|