MS-FE-2: Gruppen/Personen UI umsetzen #102
Labels
No labels
component/backend
component/docs
component/e2e
component/frontend
component/infra
component/keycloak
prio/high
prio/low
prio/medium
type/bug
type/chore
type/feature
type/refactor
type/test
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
WompSchmiede/FamilienFeierPlaner#102
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Uebersicht
Frontend-UI fuer Haushaltsverwaltung (Groups) und Personenverwaltung. Baut auf den MS-FE-1-Platzhalter-Routen (
/app/groups,/app/groups/[groupId]) und der bereits implementierten Personen-Liste und Self-Service-Seite auf.API-Grundlage (Backend bereits fertig)
Alle benoetigten Backend-Endpunkte sind in MS-BE-API-1 (#112-#115) implementiert und getestet:
GET /api/v1/groups+POST /api/v1/groupsGET/PUT/DELETE /api/v1/groups/{group_id}GET/POST /api/v1/groups/{group_id}/members+DELETE .../members/{person_id}POST /api/v1/groups/{group_id}/join-request+PUT .../join-request/{person_id}GET /api/v1/persons,GET/PUT /api/v1/persons/{person_id}POST /api/v1/persons/{person_id}/archivePOST /api/v1/persons/{person_id}/switch-groupVorhandene Frontend-Struktur (MS-FE-1)
/app/groups):+page.server.tsmit load-Funktion (fetch/api/v1/groups→Group[]),+page.sveltemit EmptyState und MS-FE-2-Hinweis/app/groups/[groupId]): load-Funktion (fetch/api/v1/groups/{id}→Group), Page mit EmptyState/app/persons): DataTable mit Name/Status/Erstellt am, Links zu Self-Service/app/persons/[personId]): Self-Service mit Einladungen, Confirm/Decline, Formularfelderngroups.test.ts(Platzhalter-Tests),persons.test.ts(Grundfunktionen)Schritt-fuer-Schritt-Plan (5 Commits)
Commit 1:
chore(frontend): Orval-Typen fuer MS-FE-2 regeneriertAenderungen:
npm run generate:apiausfuehren →frontend/src/lib/api/generated.tsaktualisierenGroup,GroupMember,CreateGroup,JoinRequestActionetc. korrekt generiert sind+page.server.ts-Dateien anpassenTests:
groups.test.tsundpersons.test.tslaufen weiterhin gruenapi-conventions.test.ts)Lint/Check:
npm run test && npm run checkCommit 2:
feat(frontend): Gruppenliste mit Create/Edit/Delete umgesetztAenderungen an
/app/groups/+page.svelte:POST /api/v1/groupsnur requireAuth braucht)requireCompositeRole('edit-group')-Permissionedit-group-Permission?/create,?/update,?/delete) mituse:enhanceAenderungen an
/app/groups/+page.server.ts:GroupMember[]pro Gruppe laden (via separatem fetch oder aggregiert)error-Handling: Fehler pro Aktion unterscheidbar machencreate,update,deletemit Validierung und API-CallsTests (
groups.test.tserweitern):Commit 3:
feat(frontend): Gruppendetail mit Mitgliederverwaltung und Join-RequestsAenderungen an
/app/groups/[groupId]/+page.svelte:Aenderungen an
/app/groups/[groupId]/+page.server.ts:addMember,removeMember,approveJoin,rejectJoin,updateGroup,deleteGroupTests (
groups.test.tserweitern):Commit 4:
feat(frontend): Personenliste mit Archivierungs-Filter erweitertAenderungen an
/app/persons/+page.svelte:?archived=true|falsean API weiterreichenrequireOwnData)Aenderungen an
/app/persons/+page.server.ts:archivedaus URL-Params lesen und an API-Request weiterreichen/api/v1/persons/me) um "Archivieren"-Button nur bei eigener Person zu zeigenTests (
persons.test.tserweitern):?archived=truewird weitergeleitet, default (kein Filter) = alleCommit 5:
feat(frontend): Personendetail um Haushaltsinfo und Self-Archivierung (closes #102)Aenderungen an
/app/persons/[personId]/+page.svelte:/app/groups/[groupId]Aenderungen an
/app/persons/[personId]/+page.server.ts:archive(POST /api/v1/persons/{person_id}/archive)Tests (
self-service.test.tserweitern):Autorisierungs-Matrix (preHandler fuer Frontend-Aktionen)
GET /api/v1/groupsrequireAuth + requireConsentPOST /api/v1/groupsrequireAuthPUT /api/v1/groups/{id}requireAuth + edit-groupDELETE /api/v1/groups/{id}requireAuth + edit-groupGET .../membersrequireAuthPOST .../membersrequireAuth + requireGroupMemberDELETE .../members/{pid}requireAuth + requireOwnDataDELETE .../members/{pid}requireAuth + edit-groupPOST .../join-requestrequireAuthPUT .../join-request/{pid}requireAuth + requireGroupMemberGET /api/v1/personsrequireAuth + requireConsentPOST .../archiverequireAuth + requireOwnDataAbhaengigkeiten und Randbedingungen
request.user.rolesaus dem JWT (fuer edit-group-Pruefung)