209 lines
6.3 KiB
Bash
Executable File
209 lines
6.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Complete Setup Script for Token Aggregation Service
|
|
# This script runs database migrations and prepares the service for deployment
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
SERVICE_DIR="$SCRIPT_DIR/.."
|
|
MIGRATIONS_DIR="$PROJECT_ROOT/explorer-monorepo/backend/database/migrations"
|
|
|
|
echo "=========================================="
|
|
echo "Token Aggregation Service - Complete Setup"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# Load environment variables
|
|
if [[ -f "$SERVICE_DIR/.env" ]]; then
|
|
echo "Loading environment from .env file..."
|
|
set -a
|
|
source "$SERVICE_DIR/.env"
|
|
set +a
|
|
fi
|
|
|
|
# Database configuration
|
|
DATABASE_URL="${DATABASE_URL:-postgresql://postgres:postgres@localhost:5432/explorer_db}"
|
|
|
|
echo "Database URL: ${DATABASE_URL%%@*}" # Show without password
|
|
echo ""
|
|
|
|
# Step 1: Verify migrations exist
|
|
echo "Step 1: Verifying migration files..."
|
|
MIGRATION_0011="$MIGRATIONS_DIR/0011_token_aggregation_schema.up.sql"
|
|
MIGRATION_0012="$MIGRATIONS_DIR/0012_admin_config_schema.up.sql"
|
|
|
|
if [[ ! -f "$MIGRATION_0011" ]]; then
|
|
echo "❌ Migration 0011 not found: $MIGRATION_0011"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$MIGRATION_0012" ]]; then
|
|
echo "❌ Migration 0012 not found: $MIGRATION_0012"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✅ Migration files found"
|
|
echo ""
|
|
|
|
# Step 2: Test database connection
|
|
echo "Step 2: Testing database connection..."
|
|
if psql "$DATABASE_URL" -c "SELECT 1;" > /dev/null 2>&1; then
|
|
echo "✅ Database connection successful"
|
|
else
|
|
echo "❌ Database connection failed"
|
|
echo "Please verify:"
|
|
echo " - PostgreSQL is running"
|
|
echo " - DATABASE_URL is correct in .env file"
|
|
echo " - Database credentials are valid"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Step 3: Check if migrations already applied
|
|
echo "Step 3: Checking migration status..."
|
|
MIGRATION_0011_APPLIED=$(psql "$DATABASE_URL" -tAc "SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'token_market_data');" 2>/dev/null || echo "false")
|
|
MIGRATION_0012_APPLIED=$(psql "$DATABASE_URL" -tAc "SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'api_keys');" 2>/dev/null || echo "false")
|
|
|
|
if [[ "$MIGRATION_0011_APPLIED" == "t" ]]; then
|
|
echo "⚠️ Migration 0011 (token aggregation) already applied"
|
|
else
|
|
echo "📋 Migration 0011 (token aggregation) needs to be applied"
|
|
fi
|
|
|
|
if [[ "$MIGRATION_0012_APPLIED" == "t" ]]; then
|
|
echo "⚠️ Migration 0012 (admin config) already applied"
|
|
else
|
|
echo "📋 Migration 0012 (admin config) needs to be applied"
|
|
fi
|
|
echo ""
|
|
|
|
# Step 4: Run migrations
|
|
echo "Step 4: Running database migrations..."
|
|
|
|
if [[ "$MIGRATION_0011_APPLIED" != "t" ]]; then
|
|
echo "Running migration 0011: Token Aggregation Schema..."
|
|
if psql "$DATABASE_URL" -f "$MIGRATION_0011"; then
|
|
echo "✅ Migration 0011 completed successfully"
|
|
else
|
|
echo "❌ Migration 0011 failed"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
else
|
|
echo "⏭️ Skipping migration 0011 (already applied)"
|
|
echo ""
|
|
fi
|
|
|
|
if [[ "$MIGRATION_0012_APPLIED" != "t" ]]; then
|
|
echo "Running migration 0012: Admin Configuration Schema..."
|
|
if psql "$DATABASE_URL" -f "$MIGRATION_0012"; then
|
|
echo "✅ Migration 0012 completed successfully"
|
|
else
|
|
echo "❌ Migration 0012 failed"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
else
|
|
echo "⏭️ Skipping migration 0012 (already applied)"
|
|
echo ""
|
|
fi
|
|
|
|
# Step 5: Verify migrations
|
|
echo "Step 5: Verifying migrations..."
|
|
TOKEN_TABLES=$(psql "$DATABASE_URL" -tAc "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_name IN ('token_market_data', 'liquidity_pools', 'token_ohlcv');" 2>/dev/null || echo "0")
|
|
ADMIN_TABLES=$(psql "$DATABASE_URL" -tAc "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_name IN ('api_keys', 'api_endpoints', 'admin_users');" 2>/dev/null || echo "0")
|
|
|
|
echo "Token aggregation tables: $TOKEN_TABLES/3"
|
|
echo "Admin configuration tables: $ADMIN_TABLES/3"
|
|
|
|
if [[ "$TOKEN_TABLES" -ge "3" && "$ADMIN_TABLES" -ge "3" ]]; then
|
|
echo "✅ All migrations verified successfully"
|
|
else
|
|
echo "⚠️ Some tables may be missing"
|
|
fi
|
|
echo ""
|
|
|
|
# Step 6: Check for admin users
|
|
echo "Step 6: Checking for admin users..."
|
|
ADMIN_COUNT=$(psql "$DATABASE_URL" -tAc "SELECT COUNT(*) FROM admin_users WHERE is_active = true;" 2>/dev/null || echo "0")
|
|
|
|
if [[ "$ADMIN_COUNT" -eq "0" ]]; then
|
|
echo "⚠️ No admin users found"
|
|
echo ""
|
|
echo "Next step: Create an admin user"
|
|
echo " Run: ./scripts/create-admin-user.sh"
|
|
echo ""
|
|
else
|
|
echo "✅ Found $ADMIN_COUNT active admin user(s)"
|
|
echo ""
|
|
fi
|
|
|
|
# Step 7: Verify service files
|
|
echo "Step 7: Verifying service files..."
|
|
if [[ -f "$SERVICE_DIR/src/index.ts" ]]; then
|
|
echo "✅ Backend service files found"
|
|
else
|
|
echo "❌ Backend service files missing"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -f "$SERVICE_DIR/frontend/src/App.tsx" ]]; then
|
|
echo "✅ Frontend files found"
|
|
else
|
|
echo "❌ Frontend files missing"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -f "$SERVICE_DIR/package.json" ]]; then
|
|
echo "✅ Service configuration found"
|
|
else
|
|
echo "❌ Service configuration missing"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# Summary
|
|
echo "=========================================="
|
|
echo "Setup Complete!"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "✅ Database migrations: Applied"
|
|
echo "✅ Service files: Verified"
|
|
echo ""
|
|
|
|
if [[ "$ADMIN_COUNT" -eq "0" ]]; then
|
|
echo "📋 Next Steps:"
|
|
echo ""
|
|
echo "1. Create admin user:"
|
|
echo " cd $SERVICE_DIR"
|
|
echo " ./scripts/create-admin-user.sh"
|
|
echo ""
|
|
echo "2. Deploy to Proxmox (if on Proxmox host):"
|
|
echo " ./scripts/deploy-to-proxmox.sh"
|
|
echo ""
|
|
echo "3. Or run locally:"
|
|
echo " npm install"
|
|
echo " npm run build"
|
|
echo " npm start"
|
|
echo ""
|
|
else
|
|
echo "📋 Next Steps:"
|
|
echo ""
|
|
echo "1. Deploy to Proxmox (if on Proxmox host):"
|
|
echo " cd $SERVICE_DIR"
|
|
echo " ./scripts/deploy-to-proxmox.sh"
|
|
echo ""
|
|
echo "2. Or run locally:"
|
|
echo " npm install"
|
|
echo " npm run build"
|
|
echo " npm start"
|
|
echo ""
|
|
echo "3. Access control panel:"
|
|
echo " http://localhost:3000 (API)"
|
|
echo " http://localhost:3001 (Frontend in dev mode)"
|
|
echo ""
|
|
fi
|
|
|
|
echo "=========================================="
|