Commit Graph

2 Commits

Author SHA1 Message Date
Matthias Hochmeister
632ba2b081 fix(verwaltung): BLOCKING-Befunde Fuhrpark & Benutzer beheben
- tests/e2e/verwaltung-fuhrpark.spec.ts: selectOption({ label: /HLF 2/ })
  uebergab eine RegExp an Playwrights string-typisierte label-Option
  (TS2345 -> tsc-Gate rot). Stattdessen erste echte Vorlage per
  { index: 1 } waehlen (Index 0 ist "Ohne Vorlage (frei)"). tsc clean.

- src/lib/validation/vehicle.ts: Pflichtmerkmale wurden nur pro Element
  geprueft; ein komplett ausgelassenes Pflichtmerkmal (z.B. []) entging
  der Validierung. buildMerkmalValuesSchema prueft jetzt auf Array-Ebene
  per superRefine, dass jede pflicht-Definition einen gesetzten,
  typgerechten, nicht-leeren Wert hat ("validieren, nicht vertrauen",
  Querschnittsstandard 4). Tests ergaenzt (TDD).

- src/server/actions/brigade.ts: bei fehlgeschlagenem Geocoding
  (geo.status !== "ok") werden lat/lng nun auf null gesetzt, analog zu
  createBrigadeWithFirstAdmin, damit keine veralteten Koordinaten
  zuruechbleiben (WS4-Konsistenz).

Verifikation offline: tsc --noEmit exit 0; vitest src/lib/validation
47/47 gruen. E2E (DB/Server) deferred (kein Postgres/Server im Sandbox).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 11:18:31 +02:00
Matthias Hochmeister
5cda09c411 Workstream 7: Wehr-Bereich — Fuhrpark & Benutzer (Phase 4)
Implementiert den auf die eigene brigadeId beschränkten Wehr-Bereich:
Profil (inkl. Inline-Geocoding via geocodeAddress), Fuhrpark (Fahrzeug per
Vorlage oder frei, typisierter Merkmal-Editor), Geräte (Kategorie, Werte,
Zuordnung Fahrzeug/„im Gerätehaus") und Benutzerkonten (wehr_admin/wehr_read).

- Schema importiert (nicht neu definiert); ASCII-Property wehrfuehrer.
- Default-deny dreifach: Layout-Guard requireWehrAdmin() + jede Server Action
  beginnt mit requireWehrAdmin(); fremde Entities -> notFound() (404).
- Validierung an der Grenze (Zod): buildMerkmalValuesSchema validiert Werte
  typgerecht gegen die serverseitig aufgelösten Definitionen; Rolle auf
  wehr_admin|wehr_read beschränkt (platform_admin abgelehnt).
- upsertMerkmalValues delete-then-insert mit typisierter Drizzle-Tx (kein any);
  boolean false/num 0 gelten als gesetzt.
- argon2id-Einmalpasswort beim Benutzeranlegen; Selbst-Deaktivierung verhindert.
- Audit vollständig: brigade.profile_update, vehicle.create/update/delete/status,
  equipment.create/update/delete/status, user.create/deactivate.
- Vorgabewerte aus drei typisierten Spalten (vorgabewert_num/_text/_bool).
- i18n via zentraler de.ts; loading/empty/error-konforme Listen.

Tests: 22 neue Unit-Tests (vehicle/equipment/brigade-user-Validierung,
upsertMerkmalValues) grün; Playwright-Specs verwaltung-fuhrpark + -scoping
geschrieben (deferred: kein Server/DB in der Sandbox).

Verifikation offline: tsc --noEmit clean, eslint clean, vitest 147 passed,
next build exit 0 (alle /verwaltung/*-Routen), drizzle-kit check ohne Drift.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 11:06:17 +02:00