Files
2026-03-02 12:14:09 -08:00

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 "=========================================="