4 Commits
Author SHA1 Message Date
patrickandClaude Sonnet 5 230237ac94 feat(flutter): Mangelmeldung-Offline-Queue + Threat-Model-Fund als Kachel
CI / backend-tests (push) Successful in 3m16s
CI / frontend-build (push) Successful in 20s
Android-Client zieht die Draft-first-Offline-Queue für Mangelmeldung nach
(bisher nur Kontrolle abgedeckt), inkl. Foto-Upload per Multipart und
eigenem Melde-Screen. Zusätzlich Backend-Threat-Model erstellt und daraus
DOC-006 (IDOR bei Dokument-Download) als Kachel im Backlog angelegt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VDMvneg6wKfXdXvTYNd3dN
2026-09-12 21:42:44 +02:00
patrickandClaude Sonnet 5 11e2e5e399 feat(flutter): sicherer Zugangsdaten-Speicher + Auto-Relogin
CI / backend-tests (push) Successful in 3m15s
CI / frontend-build (push) Successful in 21s
Token-Speicherung von SharedPreferences (Klartext) auf
flutter_secure_storage (Android Keystore/iOS Keychain) umgestellt.
Optional werden Benutzername/Passwort mitgespeichert (Checkbox auf
dem Login-Screen, Default an, abwählbar - löscht dabei auch
vorhandene gespeicherte Zugangsdaten), damit die App nach Ablauf des
8h-Tokens automatisch neu einloggt statt den Nutzer zurück auf den
Login-Screen zu werfen (ApiClient.versucheAutoRelogin(), greift bei
401 in request()).

Tests auf FakeSecureStorage (In-Memory-Testdouble) statt
SharedPreferences.setMockInitialValues umgestellt.

Kein lokales Flutter-SDK in dieser Umgebung - Änderungen per
manuellem Code-Review statt flutter analyze/test verifiziert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-10 20:24:33 +02:00
patrickandClaude Sonnet 5 0909dacf2b Flutter-Tests: ApiClient, Offline-Queue, Login-/Objektliste-Widgets
CI / backend-tests (push) Successful in 1m5s
CI / frontend-build (push) Successful in 18s
ApiClient nimmt jetzt einen injizierbaren http.Client entgegen (Testbarkeit,
kein Verhaltensunterschied im Betrieb). Tests mocken ihn mit mocktail statt
echter Netzwerkaufrufe. offline_queue_test.dart nutzt sqflite_common_ffi
(reines Dart) für die Queue-Logik ohne Gerät/Emulator: Erfolg entfernt
Eintrag, Netzwerkfehler bleibt "wartet", 4xx setzt "fehler" ohne Auto-Retry.
Dazu Widget-Tests für Login-Flow und Objektliste-Suchfilter.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-04 18:38:17 +02:00
patrickandClaude Sonnet 5 564e98e5c6 Sprint 7: React-PWA-Frontend (Offline-Härtung) + Flutter-Android-Grundgerüst
CI / backend-tests (push) Successful in 54s
React/Vite-PWA (frontend/):
- Login, Objektliste (Prompt 11 Screen 1), Kontroll-Screen (Screens 2-6 kompakt:
  Start/Objekt-Sperre-Übernahme, Positionserfassung, Abschluss/Abbruch)
- Offline-Härtung (Prompt 17): IndexedDB-Queue (src/offline/queue.ts) puffert
  Positions-PUTs lokal, automatische Übertragung bei Reconnect + periodischem
  Sync-Versuch, Statusanzeige je Position (nicht gespeichert/wird übertragen/
  gespeichert/Fehler), Abschluss-Button bleibt gesperrt bis alles gespeichert
- Nutzt aus, dass PUT /kontrollen/{id}/positionen/{material_id} backend-seitig
  idempotent ist (Upsert) - Queue kann beliebig oft retryen ohne Duplikate
- Service Worker via vite-plugin-pwa für App-Shell-Caching (Start im Feld ohne
  Cold-Load); PWA-Icons als TODO vermerkt (noch keine echten Bilddateien)
- Client-Fehler (4xx) werden nicht automatisch wiederholt, nur Netzwerkfehler

Flutter-Android-Grundgerüst (flutter_app/), auf Nutzerwunsch parallel begonnen:
- Gleiche API als zweiter Client (Prompt 19 API-first), Login/Objektliste/
  Kontroll-Screen als Dart-Äquivalent zur PWA
- Bewusst OHNE Offline-Queue in dieser ersten Fassung (siehe flutter_app/README.md)
- Plattform-Ordner (android/, ios/) nicht von Hand erzeugt - müssen auf dem
  Zielsystem per `flutter create .` nachgezogen werden, sonst zu fehleranfällig
  ohne Testlauf

Offen: Playwright-E2E (Testphase 4), Praktiker-Session, PWA-Icons, Flutter-
Offline-Queue - brauchen laufendes Deployment bzw. sind kein reiner Code-Schritt.

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