# Error Handling System Das Frontend verfügt jetzt über ein vollständiges Error Handling System für HTTP-Fehler und React-Fehler. ## ✅ Migration abgeschlossen Alle kritischen API-Aufrufe wurden auf das neue Error-Handling-System migriert: - ✅ `sendRequest.js` → `apiClient` (axios-basiert) - ✅ `batchUpload.js` → `apiFetch` - ✅ `PublicGroupImagesPage.js` → `apiFetch` - ✅ `ManagementPortalPage.js` → `apiFetch` - ✅ `DeleteGroupButton.js` → `apiFetch` - ✅ `ConsentManager.js` → `apiFetch` - ✅ `ImageDescriptionManager.js` → `apiFetch` - ✅ `GroupMetadataEditor.js` → `apiFetch` **Hinweis:** `adminApi.js` und `socialMediaApi.js` verwenden ihr eigenes `adminFetch`-System mit CSRF-Token-Handling und wurden bewusst nicht migriert. ## Komponenten ### 1. ErrorBoundary (`/Components/ComponentUtils/ErrorBoundary.js`) - Fängt React-Fehler (z.B. Rendering-Fehler) ab - Zeigt automatisch die 500-Error-Page bei unerwarteten Fehlern - Loggt Fehlerdetails in der Konsole für Debugging ### 2. API Client (`/Utils/apiClient.js`) - Axios-Instance mit Response-Interceptor - Für FormData-Uploads (z.B. Bilder) - Automatische Weiterleitung zu Error-Pages basierend auf HTTP-Statuscode ### 3. API Fetch Wrapper (`/Utils/apiFetch.js`) - Native Fetch-Wrapper mit Error-Handling - Für Standard-JSON-API-Aufrufe - Automatische Weiterleitung zu Error-Pages: - **403 Forbidden** → `/error/403` - **500 Internal Server Error** → `/error/500` - **502 Bad Gateway** → `/error/502` - **503 Service Unavailable** → `/error/503` ### 4. Error Pages Routes (`App.js`) - Neue Routes für alle Error-Pages: - `/error/403` - Forbidden - `/error/500` - Internal Server Error - `/error/502` - Bad Gateway - `/error/503` - Service Unavailable - `*` - 404 Not Found (catch-all) ## Verwendung ### Für File-Uploads (FormData) Verwende `apiClient` für multipart/form-data Uploads: ```javascript import apiClient from '../Utils/apiClient'; const formData = new FormData(); formData.append('file', file); apiClient.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) .then(response => { // Success handling }) .catch(error => { // Automatische Weiterleitung zu Error-Page bei 403, 500, 502, 503 }); ``` ### Für JSON-API-Aufrufe Verwende `apiFetch` oder Helper-Funktionen: ```javascript import { apiFetch, apiGet, apiPost } from '../Utils/apiFetch'; // GET Request const data = await apiGet('/api/groups'); // POST Request const result = await apiPost('/api/groups', { name: 'Test' }); // Custom Request const response = await apiFetch('/api/groups/123', { method: 'DELETE' }); ``` ## Backend Error Codes Das Backend liefert bereits folgende Statuscodes: - **403**: CSRF-Fehler, fehlende Admin-Session, public host auf internal routes - **500**: Datenbank-Fehler, Upload-Fehler, Migration-Fehler - **502**: Nicht implementiert (wird von Reverse Proxy geliefert) - **503**: Nicht implementiert (für Wartungsmodus vorgesehen) ## Testing Um die Error-Pages zu testen: 1. **403**: Versuche ohne Login auf Admin-Routen zuzugreifen 2. **404**: Navigiere zu einer nicht existierenden Route (z.B. `/nicht-vorhanden`) 3. **500**: Simuliere Backend-Fehler 4. **502/503**: Manuell über `/error/502` oder `/error/503` aufrufen ## Architektur ``` ┌─────────────────────────────────────────────┐ │ App.js │ │ ┌───────────────────────────────────────┐ │ │ │ ErrorBoundary │ │ │ │ (fängt React-Fehler) │ │ │ │ ┌─────────────────────────────────┐ │ │ │ │ │ Router │ │ │ │ │ │ ┌───────────────────────────┐ │ │ │ │ │ │ │ Routes │ │ │ │ │ │ │ │ - / │ │ │ │ │ │ │ │ - /error/403 │ │ │ │ │ │ │ │ - /error/500 │ │ │ │ │ │ │ │ - /error/502 │ │ │ │ │ │ │ │ - /error/503 │ │ │ │ │ │ │ │ - * (404) │ │ │ │ │ │ │ └───────────────────────────┘ │ │ │ │ │ └─────────────────────────────────┘ │ │ │ └───────────────────────────────────────┘ │ └─────────────────────────────────────────────┘ ┌─────────────────────────────────────────────┐ │ API Layer │ ├─────────────────────────────────────────────┤ │ apiClient.js (axios) │ │ - FormData/File-Uploads │ │ - Response Interceptor │ │ │ │ apiFetch.js (fetch) │ │ - JSON-API-Aufrufe │ │ - Error-Response-Handling │ │ │ │ adminApi.js (fetch + CSRF) │ │ - Admin-Authentifizierung │ │ - CSRF-Token-Management │ │ - Nicht migriert (eigenes System) │ └─────────────────────────────────────────────┘ Error-Flow: HTTP 403/500/502/503 → Interceptor/Handler → window.location.href → Error-Page React Error → ErrorBoundary → 500-Page ```