#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" VENV_PYTHON="$ROOT_DIR/.venv/bin/python" BACKEND_PID="" FRONTEND_PID="" find_homebrew_python() { if [[ -x "/opt/homebrew/opt/python@3.14/bin/python3" ]]; then printf '%s\n' "/opt/homebrew/opt/python@3.14/bin/python3" elif [[ -x "/opt/homebrew/bin/python3" ]]; then printf '%s\n' "/opt/homebrew/bin/python3" else command -v python3 fi } if [[ ! -x "$VENV_PYTHON" ]]; then PYTHON_BIN="$(find_homebrew_python)" echo "Criando .venv com: $PYTHON_BIN" "$PYTHON_BIN" -m venv "$ROOT_DIR/.venv" "$VENV_PYTHON" -m pip install --upgrade pip "$VENV_PYTHON" -m pip install -r "$ROOT_DIR/requirements.txt" fi if [[ ! -d "$ROOT_DIR/frontend/node_modules" ]]; then echo "Instalando dependencias do frontend..." npm install --prefix "$ROOT_DIR/frontend" fi cleanup() { echo echo "Encerrando backend e frontend..." terminate_tree "$BACKEND_PID" terminate_tree "$FRONTEND_PID" } trap cleanup EXIT INT TERM terminate_tree() { local pid="${1:-}" local child [[ -n "$pid" ]] || return 0 while read -r child; do terminate_tree "$child" done < <(pgrep -P "$pid" 2>/dev/null || true) kill "$pid" 2>/dev/null || true } echo "Subindo backend em http://localhost:${PORT:-8000}" "$VENV_PYTHON" "$ROOT_DIR/app.py" & BACKEND_PID=$! echo "Subindo frontend em http://localhost:5173" ( cd "$ROOT_DIR/frontend" npm run dev -- --host 0.0.0.0 ) & FRONTEND_PID=$! wait "$BACKEND_PID" "$FRONTEND_PID"