Phase 0: Fundament der Feuerwehr-Verwaltungsplattform
Legt den kompletten Unterbau an, auf dem die Fachmodule aufsetzen. Betrieb: - docker-compose.yml mit Traefik, App, Worker, PostgreSQL 17 + PostGIS, Redis, MinIO und Gotenberg; Entwicklungs-Override ohne Traefik, dafuer mit Mailpit und Adminer - Mehrstufiges Dockerfile: eigener Benutzer, tini als PID 1, Healthcheck - .env.example mit einem Kommentar zu jeder Variable Mandantentrennung: - Row Level Security auf allen mandantenpflichtigen Tabellen - Zwei getrennte Datenbankverbindungen: florian_app mit aktiver RLS fuer die Anwendung, Eigentuemer-Zugang nur fuer Migration, Seed und Anmeldung - fuerOrganisation() als einziger Weg zu Fachdaten Nachvollziehbarkeit: - AuditLog append-only per Trigger; UPDATE ist dauerhaft gesperrt, DELETE nur im gekennzeichneten Aufbewahrungslauf - Geheimnisse werden vor dem Schreiben entfernt Anmeldung: - OIDC gegen ein extern betriebenes authentik, Rollen aus Gruppen nur als Vorbelegung beim ersten Login - Lokaler E-Mail/Passwort-Login als Rueckfallweg - Terminal per PIN und RFID mit zwei Schranken (Geraet, dann Person) Weiteres: - lib/authz.ts mit 9 Rollen und 38 Einzelrechten - lib/storage.ts (MinIO), lib/audit.ts, lib/warteschlange.ts (BullMQ) - Integrationen fuer Mail, Telegram und LLM hinter abschaltbaren Interfaces - tRPC v11, Basis-Layout mit Seitenleiste und dunkler Darstellung - Seed mit einer Beispielwehr: 16 Personen, 3 Fahrzeuge, 40 Geraete - 32 Vitest-Tests (davon 8 gegen eine echte Datenbank), 10 Playwright-Tests - README, Anleitung mit Screenshots, Roadmap, Aufwandsschaetzung, Devlog, Versionierungsregeln und Changelog Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# Changelog
|
||||
|
||||
Alle nennenswerten Änderungen an FLORIAN. Format nach
|
||||
[Keep a Changelog](https://keepachangelog.com/de/1.1.0/), Versionierung nach
|
||||
[Semantic Versioning](https://semver.org/lang/de/).
|
||||
|
||||
Die Regeln dazu stehen in [docs/VERSIONIERUNG.md](docs/VERSIONIERUNG.md).
|
||||
|
||||
## [Unveröffentlicht]
|
||||
|
||||
Noch nichts. Nächster Schritt ist Phase 1 (Stammdatenverwaltung).
|
||||
|
||||
## [0.1.0] — 2026-09-03
|
||||
|
||||
Phase 0: das Fundament. Ab hier steht ein lauffähiger Stack mit
|
||||
Mandantentrennung, Anmeldung, Dateiablage und lückenloser Protokollierung.
|
||||
|
||||
### Hinzugefügt
|
||||
|
||||
**Betrieb**
|
||||
|
||||
- `docker-compose.yml` mit Traefik, App, Worker, PostgreSQL 17 + PostGIS,
|
||||
Redis, MinIO und Gotenberg.
|
||||
- `docker-compose.override.yml` für die Entwicklung: ohne Traefik, mit
|
||||
Mailpit als SMTP-Auffangkorb und Adminer für den Blick in die Datenbank.
|
||||
Host-Ports bewusst abseits der Standardwerte (3100, 5442, 6389, 9010/9011),
|
||||
damit FLORIAN neben anderen lokalen Stacks laufen kann.
|
||||
- Mehrstufiges `docker/Dockerfile`: eigener Benutzer `florian` (UID 1001,
|
||||
kein root), `tini` als PID 1, Healthcheck gegen `/api/health`,
|
||||
Standalone-Build von Next.js.
|
||||
- `docker/entrypoint.sh` wendet ausstehende Migrationen an — nur im
|
||||
App-Container, nicht im Worker.
|
||||
- `docker/postgres/10-init-app-role.sh` legt beim ersten Start die Rolle
|
||||
`florian_app` (`NOBYPASSRLS`) samt Vorgabeprivilegien an.
|
||||
- `.env.example` mit einem Kommentar zu jeder einzelnen Variable.
|
||||
|
||||
**Datenmodell**
|
||||
|
||||
- Prisma-Schema mit `Organisation`, `Person`, `Rolle`, `Berechtigung`,
|
||||
`RolleBerechtigung`, `PersonRolle`, `AusweisToken`, `AuditLog`, `Datei`.
|
||||
- `Fahrzeug` und `Geraet` bereits schmal angelegt, damit der Seed eine
|
||||
realistische Wehr aufbauen kann. Phase 1 erweitert beide.
|
||||
- Migration `20260902000100_rls_policies`: Row Level Security auf allen
|
||||
mandantenpflichtigen Tabellen, Funktion `aktuelle_organisation()`,
|
||||
Append-only-Trigger auf `audit_log`.
|
||||
- Migration `20260902000200_audit_bereinigung`: `UPDATE` auf `audit_log`
|
||||
bleibt dauerhaft gesperrt, `DELETE` ist nur im gekennzeichneten
|
||||
Aufbewahrungslauf möglich.
|
||||
|
||||
**Anwendungskern**
|
||||
|
||||
- `lib/env.ts` — Zod-Validierung der gesamten Umgebung beim Start.
|
||||
- `lib/db.ts` — getrennte Verbindungen für Anwendung (RLS aktiv) und System
|
||||
(RLS-frei), `fuerOrganisation()` als einziger Weg zu Fachdaten.
|
||||
- `lib/authz.ts` — 9 Rollen, 38 Einzelrechte, zentrale Prüffunktionen.
|
||||
- `lib/storage.ts` — MinIO, presignte Up- und Downloads, SHA-256-Prüfsumme.
|
||||
- `lib/audit.ts` — Protokolleinträge mit Vorher/Nachher-Vergleich, entfernt
|
||||
Geheimnisse vor dem Schreiben.
|
||||
- `lib/auth.ts` — Auth.js mit OIDC gegen authentik, lokalem Passwort-Login
|
||||
und Terminal-Anmeldung über PIN oder RFID.
|
||||
- `lib/warteschlange.ts` und `src/worker/` — BullMQ-Gerüst mit den
|
||||
Auftragsarten für Fristen, Erinnerungen, PDF und Aufbewahrung.
|
||||
- `lib/integrations/` — Mail, Telegram und LLM hinter abschaltbaren
|
||||
Schnittstellen.
|
||||
- tRPC v11 mit den Prozedurarten `oeffentlich`, `angemeldet` und
|
||||
`mitRecht(...)`.
|
||||
|
||||
**Oberfläche**
|
||||
|
||||
- Basis-Layout mit Seitenleiste, heller und dunkler Darstellung
|
||||
(Systemvorgabe als Standard) und durchgängig deutschen Texten.
|
||||
- Anmeldeseite, die genau die eingerichteten Anmeldewege zeigt.
|
||||
- Übersicht mit Kennzahlen und dem Sicherheitshinweis zur analogen
|
||||
Atemschutzüberwachung.
|
||||
- Farbwelt in OKLCH mit festen Statusfarben für Gerätezustände.
|
||||
|
||||
**Daten und Tests**
|
||||
|
||||
- Seed mit einer vollständigen Beispielwehr: 15 Personen mit Rollen und
|
||||
Terminal-Ausweisen, 3 Fahrzeuge, 40 Geräte mit gemischten Prüffristen.
|
||||
- Vitest: 32 Tests, darunter acht, die die Mandantentrennung gegen eine echte
|
||||
Datenbank prüfen.
|
||||
- Playwright: 10 Tests über Desktop und Tablet.
|
||||
- `npm run screenshots` erzeugt die Bilder für die Anleitung.
|
||||
|
||||
**Dokumentation**
|
||||
|
||||
- README mit Schnellstart in sechs Zeilen.
|
||||
- Anleitung, Roadmap, Aufwandsschätzung, Devlog und Versionierungsregeln.
|
||||
Reference in New Issue
Block a user