Files
MABEA/frontend
patrickandClaude Sonnet 5 08b10c7c37
CI / backend-tests (push) Successful in 53s
CI / frontend-build (push) Successful in 1m51s
Sprint 8: Material anlegen/bearbeiten im Admin-Portal
PATCH /materialien/{id} existierte im Backend bereits (Prompt 07), im
Frontend bisher nicht angebunden. Formular dient für Anlage UND Bearbeitung
(Klick auf "Bearbeiten" befüllt dasselbe Formular).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
2026-09-04 00:40:37 +02:00
..

MABEA Frontend Sprint 7

React + Vite PWA. Deckt Prompt 11 Screens 1-6 (kompakt zusammengefasst: Objektliste, Kontrolle mit Positionserfassung, Abschluss/Abbruch) und Prompt 17 (Offline-Härtung: IndexedDB-Queue, Statusanzeige je Position, Abschluss blockiert bis alles gespeichert) ab.

Setup (auf dem Zielsystem, nicht lokal)

npm install
cp example.env .env
# .env: VITE_API_BASE_URL auf die Backend-URL setzen
npm run build

npm run build erzeugt dist/ inkl. Service Worker (vite-plugin-pwa) - dieser Ordner wird vom Reverse-Proxy (nginx) ausgeliefert, siehe deploy/.

Fehlende Assets vor Produktivbetrieb

  • public/icon-192.png, public/icon-512.png (PWA-Manifest-Icons) müssen noch ergänzt werden - aktuell nur in vite.config.ts referenziert, keine echten Bilddateien vorhanden.

Architektur-Entscheidungen (Sprint 7)

  • Offline-Queue (src/offline/queue.ts): IndexedDB statt reinem Service-Worker-Cache, weil tatsächliche Formulardaten (Ist-Mengen) über Reload/Absturz hinweg erhalten bleiben müssen. Der Service Worker selbst cached nur den App-Shell (Assets), keine API-Requests.
  • Idempotenz: PUT /kontrollen/{id}/positionen/{material_id} ist backend-seitig ein Upsert (siehe backend/app/services/kontrolle.py) - die Queue kann denselben Eintrag beliebig oft erneut senden, ohne doppelte Kontrollpositionen/Fehlbestände zu erzeugen.
  • Statusanzeige: jede Position zeigt "nicht gespeichert" / "wird übertragen…" / "gespeichert" / "Fehler" - kein stiller Datenverlust bei Verbindungsabbruch (Prompt 17.5).
  • Abschluss-Sperre: der Abschließen-Button ist deaktiviert, solange auch nur eine Position nicht bestätigt gespeichert ist.
  • Client-Fehler (4xx, z. B. Objekt-Sperre durch Übernahme) werden NICHT automatisch wiederholt - der Mitarbeiter sieht den Fehler und muss bewusst reagieren.

Noch nicht umgesetzt (bewusst außerhalb Sprint 7)

  • QR-/Barcode-Kamera-Scan (Karte 10, Roadmap) - Objektsuche ist vorbereitet (Textfeld akzeptiert auch einen gescannten Code), aber kein Kamera-Zugriff verdrahtet.
  • Playwright-E2E-Tests und Praktiker-Explorations-Session (Testphase 4) - dafür wird ein laufendes Test-Deployment gebraucht, kein reiner Code-Schritt.