fix: diverse Anpassungen (issues-206) #223

Merged
niboer merged 24 commits from issues-206 into main 2026-07-04 16:31:01 +02:00
Owner

PR fuer Branch issues-206

refs #206

PR fuer Branch issues-206 refs #206
refs #207

Aktuell: Seed enthaelt 12 aktive Personen, keine archivierten Testdaten.
Neu: 3 zusaetzliche archivierte Personen (1 solo ohne Haushalt, 2 in
gemeinsamem Haushalt) mit vollstaendigen Kontaktdaten. Neue UUIDs:
ARCHIVED_SOLO, ARCHIVED_HH_A, ARCHIVED_HH_B, ARCHIVED_GROUP.
refs #209

Aktuell: GET /api/v1/persons unterstuetzt nur archived-Filter.
Neu: withoutGroup=true filtert auf Personen ohne groupMember-Eintrag.
Prisma-Where: groupMembers: { none: { } }.
closes #209

Aktuell: Dialog laedt ALLE Personen via GET /api/v1/persons
und filtert clientseitig.
Neu: API-Call mit ?withoutGroup=true, Backend liefert nur
Personen ohne GroupMember-Eintrag. personsWithoutGroup()-
Filter kann entfallen (API liefert direkt korrekte Daten).
closes #208

Aktuell: needsSharedData ist false fuer tab='details' (default bei
direktem Aufruf ohne ?tab=). Dadurch wird isOrganizer nie ermittelt
und die Organisier-Tabs bleiben ausgeblendet.
Neu: needsSharedData inkludiert auch tab==='details', sodass
selfGuest immer geladen und isOrganizer korrekt bestimmt wird.
closes #210

Aktuell: Landing-Page hat keinen Backend-Health-Check,
Login-Button ist immer aktiv.
Neu: +page.server.ts ruft /health beim Laden auf.
Bei nicht-gesundem Backend ist Login-Button disabled
(grau, kein Klick) mit Hinweistext.
refs #207, closes #209, closes #208, closes #210

Aktuell: 4 Issues bearbeitet, 1 zurueckgestellt.
Neu: Done-Sektion aktualisiert, Branch-Name korrigiert,
MS-REST-Offene-Issues aktualisiert.
refs #218

Aktuell: StatusBadge in Personenliste und Personendetail zeigt
immer 'Aktiv', unabhaengig vom Archivierungsstatus.
Neu: Bedingte Labels: t('persons.active') bei nicht-archivierten,
t('persons.archived') bei archivierten Personen. Hardcodierte
Strings durch i18n ersetzt (DE/EN via persons.json).
refs #218

Aktuell: #218 nicht in PROJECT_STATE.
Neu: #218 in Done mit Kurzbeschreibung.
Aktuell: Ohne ?archived= wird '/api/v1/persons' ohne Filter
aufgerufen, zeigt alle Personen inkl. archivierter.
Neu: Standard-Filter ist archived=false (nur aktive Personen).
'alle'-Filter bleibt via ?archived= erreichbar.
refs #218

Aktuell: Default filter (baseUrl) und 'Alle'-Button zeigen beide
nur aktive Personen, weil kein ?archived=-param als 'false'
interpretiert wird.
Neu: 'Alle'-Button nutzt ?archived=all (kein API-Filter),
Default ohne param zeigt weiterhin nur aktive Personen.
- scripts/container.mjs: shared helper for docker/podman detection
- scripts/prepare-tokens.mjs: copies design-tokens to component dirs
- scripts/build.mjs: unified build orchestrator for all components
- .gitignore: add frontend/shared/ entry, update keycloak tokens comment
- package.json: add build:*, prepare-tokens scripts

refs #206
- frontend/src/app.css: change import path from ../../shared to ../shared
- frontend/package.json: add predev/prebuild hooks for prepare-tokens
- frontend/src/tests/design-tokens.test.ts: update expected import path

refs #206
- keycloak/Dockerfile: build Keycloak with custom theme baked in
- e2e/Dockerfile: minimal Playwright base image
- docker-compose.yml: keycloak/e2e-runner use build, add image names,
  remove volume mounts for tokens.css
- scripts/docker-test.mjs: import CMD/COMPOSE from container.mjs,
  use build.mjs for building, update step numbering

refs #206
- PROJECT_STATE.md: #206 done, branch aktualisiert, Next Tasks bereinigt
- docs/design/06-betrieb-entwicklung.md: Build-Prozess, Image-Tags,
  Dockerfiles, prepare-tokens dokumentiert

closes #206
refs #222

Aktuell: Keine einfache Moeglichkeit, Projekt-Statistiken und Ereignisse als HTML zu generieren
Neu: projektstatistik-events.json, scripts/generate-projektstatistik.mjs, .opencode/commands/generatestats.md, npm run generate-stats, projektstatistik.html in .gitignore
prebuild in frontend/package.json fuehrte node ../scripts/prepare-tokens.mjs
im Docker-Container aus, wo ../scripts/ nicht existiert.
build.mjs ruft prepare-tokens.mjs bereits vor dem Docker-Build auf,
die kopierte tokens.css wird via COPY . . mit ins Image genommen.
predev bleibt fuer lokale Entwicklung mit HMR erhalten.

refs #206
docker compose --profile dev up startet Backend + Frontend ohne E2E-Runner.
E2E-Runner bleibt nur unter --profile integration-test verfuegbar.

refs #206
KEYCLOAK_ORIGIN bleibt fuer Server-Fetch (Docker-intern http://keycloak:8080).
KEYCLOAK_PUBLIC_URL wird fuer Browser-Redirects genutzt (http://localhost:8080).
Analog zum BACKEND_ORIGIN/FRONTEND_ORIGIN-Pattern.

Geaendert:
- login/+server.ts: Redirect via KEYCLOAK_PUBLIC_URL
- logout/+server.ts: Logout-URL via KEYCLOAK_PUBLIC_URL
- auth.ts: buildAuthorizationUrl() via KEYCLOAK_PUBLIC_URL, fetch() bleibt KEYCLOAK_ORIGIN
- account/+page.server.ts: Account-Link via KEYCLOAK_PUBLIC_URL
- docker-compose.yml: KEYCLOAK_PUBLIC_URL im Frontend-Service
- .env.example: KEYCLOAK_PUBLIC_URL eingetragen
- docs/design/05-authentifizierung.md: Env-Vars dokumentiert

refs #206
SvelteKit blockiert Form-POSTs wenn Origin-Header nicht dem
erwarteten ORIGIN entspricht. Ohne ORIGIN-Env-Var nutzt
SvelteKit die Docker-interne Adresse, was den CSRF-Check
fuer Browser-Requests von localhost:5173 fehlschlaegt.

Verwendet FRONTEND_ORIGIN als Quelle um Redundanz zu vermeiden.
ORIGIN:

refs #206
BACKEND_ORIGIN in docker-compose.yml ist jetzt dynamisch
() statt hartkodiert.
.env.example auf backend-api korrigiert (passt zum Docker-Standard).
Bei lokalem HMR greift der Code-Fallback http://localhost:3000.

refs #206
niboer merged commit 392e55e5ed into main 2026-07-04 16:31:01 +02:00
Sign in to join this conversation.
No description provided.