#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$ROOT" command -v java >/dev/null || { echo 'Java 21 wird benötigt.'; exit 1; } command -v npm >/dev/null || { echo 'Node.js 22.12+ und npm werden benötigt.'; exit 1; } mkdir -p work if [[ ! -d frontend/node_modules ]]; then (cd frontend && npm ci) fi for port in 8080 5173; do if command -v lsof >/dev/null && lsof -nP -iTCP:"$port" -sTCP:LISTEN >/dev/null 2>&1; then echo "Port $port ist bereits belegt. Bitte die dort laufende Anwendung zuerst beenden." exit 1 fi done BACKEND_PID='' FRONTEND_PID='' cleanup() { [[ -z "$FRONTEND_PID" ]] || kill "$FRONTEND_PID" 2>/dev/null || true [[ -z "$BACKEND_PID" ]] || kill "$BACKEND_PID" 2>/dev/null || true } trap cleanup EXIT INT TERM echo 'Backend wird gebaut …' (cd backend && ./mvnw -q -DskipTests package) python3 scripts/run-backend.py > work/backend.log 2>&1 & BACKEND_PID=$! echo 'Spring Boot startet. Protokoll: work/backend.log' READY=false for attempt in {1..120}; do if curl --fail --silent http://127.0.0.1:8080/api/health >/dev/null 2>&1; then READY=true; break; fi if ! kill -0 "$BACKEND_PID" 2>/dev/null; then cat work/backend.log; exit 1; fi sleep 1 done if [[ "$READY" != true ]]; then echo 'Backend-Start dauert zu lange. Siehe work/backend.log'; exit 1; fi (cd frontend && exec node node_modules/vite/bin/vite.js --host 127.0.0.1 --port 5173 --strictPort) & FRONTEND_PID=$! echo 'VoTiAn NG: http://localhost:5173 — Beenden mit Strg+C' echo 'Anmeldung mit einem vorhandenen VoTiAn-Zentralenbenutzer.' while kill -0 "$BACKEND_PID" 2>/dev/null && kill -0 "$FRONTEND_PID" 2>/dev/null; do sleep 2; done