MS-FE-4: Formular UI umsetzen #104
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#104
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?
Aufgaben
Backend-Endpunkte sind vollstaendig implementiert (MS-BE-API-3, #120-#122, geschlossen). Das Frontend baut auf dem bestehenden Event-Detail (MS-FE-1, #101) und der Self-Service-Seite (MS-FE-1) auf.
Umsetzungsplan (Stand 2026-06-28)
chore(frontend): Orval-Typen fuer MS-FE-4 regeneriertnpm run generate:api, Typen auf Vollstaendigkeit prüfenfeat(frontend): Formular-Editor-Komponente und Event-Detail-TabFormEditor.svelte-Komponente, Tab "Formular" im Event-Detail, Felder-Hinzufuegen/Loeschen/Umordnen, "Aus Vorlage laden"feat(frontend): Haushaltsweiser Formular-Draft und finale Eingabefeat(frontend): Formular-Antworten fuer Organisator anzeigen und ueberschreibenfeat(frontend): Formular-Vorlagen CRUD-Seite (closes #104)/app/templatesmit Liste, CRUD-Actions, wiederverwendet FormEditor-Komponente, Sidebar-LinkDetails im Umsetzungsplan-Kommentar.
Abhaengigkeiten und Entscheidungen
Umsetzungsplan (Stand 2026-06-28)
Backend-Voraussetzungen
Saemtliche Backend-Endpunkte sind bereits implementiert (MS-BE-API-3, #120-#122):
GET/PUT /api/v1/events/{id}/form— Formular-Definition lesen/schreibenGET/PUT /api/v1/events/{id}/guests/{pid}/form-draft— Haushalts-Draft lesen/speichernPUT /api/v1/events/{id}/guests/{pid}/form-final— Finale Antwort absendenPUT /api/v1/events/{id}/guests/{pid}/form-override— Organisator-Override mit GrundGET /api/v1/templates— Vorlagen-ListePOST /api/v1/templates— Vorlage anlegenGET/PUT/DELETE /api/v1/templates/{id}— Vorlagen-DetailKein neues DB-Schema oder API-Endpunkt noetig. Orval-Typen sind bereits vorhanden (FormDraftRequest, FormFinalRequest, FormOverrideRequest, FormDefinitionRequest, Template, CreateTemplate, UpdateTemplate).
Bereits erledigt (MS-FE-1 #101)
formDefinitiongerendert (text/select/date)Schritt-fuer-Schritt-Plan
Commit 1:
chore(frontend): Orval-Typen fuer MS-FE-4 regeneriertnpm run generate:apiausfuehrennpm run testgruenCommit 2:
feat(frontend): Formular-Editor-Komponente und Event-Detail-TabNeue Komponente:
$lib/components/form-editor.svelteformDefinition(initiales Array),templates(fuer "Aus Vorlage laden")onSave(formDefinition)— ruft PUT auflabel(Text-Input, required)type(Select: text, number, select, date)required(Checkbox)options(Textarea, nur bei type=select, komma-getrennt)+page.server.ts Aenderungen (events/[eventId]):
/api/v1/templatesladen →templates: Template[]updateFormDefinition:formDefinitionmuss Array seinPUT /api/v1/events/{eventId}/formmit{ formDefinition }+page.svelte Aenderungen:
switchTab('form')events.test.ts:
updateFormDefinitionmit gueltigen/ungueltigen DatenCommit 3:
feat(frontend): Haushaltsweiser Formular-Draft und finale Eingabe+page.server.ts Aenderungen (persons/[personId]):
GET /api/v1/events/{eventId}/guests/{personId}/form-draft(fuer erste Invitation mit formDefinition)saveDraft: Validiert formDraft-Objekt, sendetPUT /events/{id}/guests/{pid}/form-draftsubmitFinal: Validiert formFinal-Objekt, sendetPUT /events/{id}/guests/{pid}/form-final+page.svelte Aenderungen:
formDefinitionenthaelt und Statusinvited:formDraftvorausfuellen (falls vorhanden)saveDraft-Action auf)submitFinal-Action auf)formOverridevorhanden: "!!"-Indikator neben geaenderten Feldernself-service.test.ts:
saveDraftmit gueltigen DatensubmitFinalsetzt respondedAtCommit 4:
feat(frontend): Formular-Antworten fuer Organisator anzeigen und ueberschreiben+page.server.ts Aenderungen (events/[eventId]):
formFinalundformOverridepro Guest mitgebenoverrideForm:personId,formOverride(object),overrideReason(string, min 3 Zeichen)PUT /api/v1/events/{eventId}/guests/{personId}/form-override+page.svelte Aenderungen:
switchTab('answers')events.test.ts:
overrideFormmit/ohne Grund, ungueltigen personIdCommit 5:
feat(frontend): Formular-Vorlagen CRUD-Seite (closes #104)Neue Route:
/app/templates+page.server.ts (Liste):
GET /api/v1/templates→templates: Template[]deleteTemplate→DELETE /api/v1/templates/{templateId}+page.svelte (Liste):
Neue Route:
/app/templates/new+page.server.ts:
createTemplate: Validiert name, description, formDefinition, sendetPOST /api/v1/templates/app/templates/{templateId}bei Erfolg+page.svelte:
Neue Route:
/app/templates/[templateId]+page.server.ts:
GET /api/v1/templates/{templateId}→template: TemplateupdateTemplate(PUT),deleteTemplate(DELETE, Redirect zu /app/templates)+page.svelte:
sidebar.svelte Aenderungen:
/app/templates(nach "Mein Haushalt")Neue Tests:
templates.test.ts:closes #104 im Commit-Body
Detaillierte Commit-Beschreibungen (fuer Commit-Body)
Commit 1
Commit 2
Commit 3
Commit 4
Commit 5
Ueberschneidungen
Commits 1+2 abgeschlossen (20c7d46)
Commit 1: Orval-Typen regeneriert (bereits in vorheriger Session)
Commit 2:
feat(frontend): Formular-Editor-Komponente und Event-Detail-TabEnthaelt:
FormEditor.sveltein$lib/components/— Felder-CRUD (add/remove/move), Template-Load,onSave-Callback+page.server.ts: Template-Import, Templates-Ladung im Form-Tab,updateFormDefinition-Action+page.svelte: FormEditor-Import, Formular-Tab-Button, formSuccess/formError-Anzeige, Editor-UINaechste Schritte: Commit 3 (Haushaltsweiser Draft & finale Eingabe)