Backend: formFinal gegen event.formDefinition validieren #300

Open
opened 2026-07-19 13:29:54 +00:00 by niboer · 0 comments
Owner

Aktuelles

Die Endpunkte PUT /api/v1/events/{id}/guests/{pid}/respond und POST /api/v1/events/{id}/guests/batch-respond akzeptieren jedes beliebige JSON-Objekt als formFinal. Es gibt keine Validierung der formFinal-Struktur gegen die event.formDefinition.

Der einzige vorhandene Check: bei status: 'confirmed' muss formFinal mindestens einen Key enthalten (sonst 400).

Gewuenscht

Eine Validierungs-Utility in backend/src/lib/, die formFinal gegen event.formDefinition prueft:

  1. Required-Felder: Alle Felder mit required: true muessen in formFinal vorhanden sein (ausser status: 'declined')
  2. Feld-Existenz: Nur Keys, die auch in formDefinition definiert sind, duerfen in formFinal vorkommen
  3. select/radio: Der uebermittelte Wert muss in options enthalten sein
  4. checkbox: Alle uebermittelten Werte muessen in options enthalten sein
  5. Typ-Prüfung: text → string, number → number, checkbox → array

Die Validierung soll in forms.ts in beiden Endpunkten (respond, batch-respond) nach der AJV-Schema-Validierung und vor dem calculateContribution()-Aufruf eingebaut werden.

Betroffene Dateien

  • backend/src/routes/forms.tsrespond-Handler (Zeile 170), batch-respond-Handler (Zeile 250)
  • backend/src/lib/ — neue Datei form-validation.ts
  • backend/openapi.yaml — ggf. Schema-Erweiterung

Notes

  • Validierung nur bei status: 'confirmed' aktiv; bei declined wird formFinal ignoriert.
  • Die calculateContribution()-Funktion (Zeilen 11-37) in forms.ts iteriert bereits korrekt ueber formDefinition und formFinal — kann als Referenz dienen.
## Aktuelles Die Endpunkte `PUT /api/v1/events/{id}/guests/{pid}/respond` und `POST /api/v1/events/{id}/guests/batch-respond` akzeptieren jedes beliebige JSON-Objekt als `formFinal`. Es gibt keine Validierung der `formFinal`-Struktur gegen die `event.formDefinition`. Der einzige vorhandene Check: bei `status: 'confirmed'` muss `formFinal` mindestens einen Key enthalten (sonst 400). ## Gewuenscht Eine Validierungs-Utility in `backend/src/lib/`, die `formFinal` gegen `event.formDefinition` prueft: 1. **Required-Felder:** Alle Felder mit `required: true` muessen in `formFinal` vorhanden sein (ausser `status: 'declined'`) 2. **Feld-Existenz:** Nur Keys, die auch in `formDefinition` definiert sind, duerfen in `formFinal` vorkommen 3. **select/radio:** Der uebermittelte Wert muss in `options` enthalten sein 4. **checkbox:** Alle uebermittelten Werte muessen in `options` enthalten sein 5. **Typ-Prüfung:** `text` → string, `number` → number, `checkbox` → array Die Validierung soll in `forms.ts` in beiden Endpunkten (`respond`, `batch-respond`) nach der AJV-Schema-Validierung und vor dem `calculateContribution()`-Aufruf eingebaut werden. ## Betroffene Dateien - `backend/src/routes/forms.ts` — `respond`-Handler (Zeile 170), `batch-respond`-Handler (Zeile 250) - `backend/src/lib/` — neue Datei `form-validation.ts` - `backend/openapi.yaml` — ggf. Schema-Erweiterung ## Notes - Validierung nur bei `status: 'confirmed'` aktiv; bei `declined` wird `formFinal` ignoriert. - Die `calculateContribution()`-Funktion (Zeilen 11-37) in `forms.ts` iteriert bereits korrekt ueber `formDefinition` und `formFinal` — kann als Referenz dienen.
Sign in to join this conversation.
No description provided.