#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BACKEND_DIR="$ROOT_DIR/backend" FRONTEND_DIR="$ROOT_DIR/frontend" echo "[PDC] Starting full application" if [ ! -d "$BACKEND_DIR" ] || [ ! -d "$FRONTEND_DIR" ]; then echo "[PDC] ERROR: backend or frontend directory missing" exit 1 fi if [ ! -d "$BACKEND_DIR/.venv" ]; then echo "[PDC] Creating backend virtual environment" python3 -m venv "$BACKEND_DIR/.venv" fi echo "[PDC] Installing backend dependencies" "$BACKEND_DIR/.venv/bin/pip" install -q -r "$BACKEND_DIR/requirements.txt" echo "[PDC] Running backend test suite" "$BACKEND_DIR/.venv/bin/python" -m pytest -q "$BACKEND_DIR/tests" echo "[PDC] Installing frontend dependencies" cd "$FRONTEND_DIR" npm install cleanup() { echo "[PDC] Stopping services" if [ -n "${BACKEND_PID:-}" ] && kill -0 "$BACKEND_PID" 2>/dev/null; then kill "$BACKEND_PID" || true fi if [ -n "${FRONTEND_PID:-}" ] && kill -0 "$FRONTEND_PID" 2>/dev/null; then kill "$FRONTEND_PID" || true fi } trap cleanup EXIT INT TERM echo "[PDC] Launching backend on http://localhost:8000" cd "$BACKEND_DIR" "$BACKEND_DIR/.venv/bin/uvicorn" app.main:app --host 0.0.0.0 --port 8000 --reload & BACKEND_PID=$! echo "[PDC] Launching frontend on http://localhost:3000" cd "$FRONTEND_DIR" npm run dev -- --port 3000 & FRONTEND_PID=$! echo "[PDC] Application is running" echo "[PDC] Frontend: http://localhost:3000" echo "[PDC] Backend: http://localhost:8000" wait "$BACKEND_PID" "$FRONTEND_PID"