#!/usr/bin/env bash # dev.sh — lance backend + frontend en mode dev avec hot reloading # Usage: ./dev.sh set -e ROOT="$(cd "$(dirname "$0")" && pwd)" # ── Couleurs ────────────────────────────────────────────────────────────────── CYAN='\033[0;36m' GREEN='\033[0;32m' YELLOW='\033[1;33m' RESET='\033[0m' log() { echo -e "${CYAN}[dev]${RESET} $*"; } ok() { echo -e "${GREEN}[dev]${RESET} $*"; } warn(){ echo -e "${YELLOW}[dev]${RESET} $*"; } # ── Vérifications préalables ────────────────────────────────────────────────── [ -f "$ROOT/.env" ] || { warn ".env manquant — copie .env.example et remplis MISTRAL_API_KEY"; exit 1; } command -v python3 &>/dev/null || { warn "python3 introuvable"; exit 1; } command -v npm &>/dev/null || { warn "npm introuvable"; exit 1; } # ── Dépendances Python ──────────────────────────────────────────────────────── log "Vérification des dépendances Python…" pip install -q -r "$ROOT/backend/requirements.txt" # ── Dépendances Node ────────────────────────────────────────────────────────── if [ ! -d "$ROOT/frontend/node_modules" ]; then log "Installation des dépendances Node…" npm --prefix "$ROOT/frontend" install fi # ── Cleanup à l'arrêt (Ctrl+C) ──────────────────────────────────────────────── cleanup() { echo "" log "Arrêt…" kill "$BACKEND_PID" "$FRONTEND_PID" 2>/dev/null || true wait "$BACKEND_PID" "$FRONTEND_PID" 2>/dev/null || true ok "Stoppé." } trap cleanup INT TERM # ── Backend — uvicorn avec --reload ─────────────────────────────────────────── log "Démarrage backend → http://localhost:8000" ( cd "$ROOT/backend" set -a; source "$ROOT/.env"; set +a DEBUG=true uvicorn main:app --reload --host 0.0.0.0 --port 8000 2>&1 | sed 's/^/\033[0;33m[back]\033[0m /' ) & BACKEND_PID=$! # ── Frontend — vite dev avec proxy vers le backend ──────────────────────────── log "Démarrage frontend → http://localhost:5173" ( cd "$ROOT/frontend" npm run dev -- --host 2>&1 | sed 's/^/\033[0;35m[front]\033[0m /' ) & FRONTEND_PID=$! ok "Backend : http://localhost:8000" ok "Frontend : http://localhost:5173" ok "Ctrl+C pour tout arrêter." echo "" wait "$BACKEND_PID" "$FRONTEND_PID"