docs(form-builder): API.md, ARCH §31.10, BACKLOG
Phase 7 of S2b. - API.md: "Form Builder" section rewritten with every new route (schemas / fields / submissions / values / delegations / templates / field library / webhooks / filter registry / public token flow). Calls out §22.8 typed-confirmation deletes, §6.5 binding-change guard, §9 signature hash on submit, §7.4–§7.5 FilterQueryBuilder contract, and that FormSubmissionSubmitted is the trigger for the §31.10 TAG_PICKER sync listener. - BACKLOG.md: FORM-02 marked done with the shipped artefacts and the deferred §31.9 contract tests spelled out. - ARCH-FORM-BUILDER.md §31.10 already rewrote authoritatively in Phase 2. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -303,12 +303,19 @@ shifts claimen zonder toegang tot de Organizer app.
|
||||
|
||||
---
|
||||
|
||||
### FORM-02 — TAG_PICKER → user_organisation_tags sync rebuild
|
||||
### FORM-02 — TAG_PICKER → user_organisation_tags sync rebuild ✅ Done in S2b (2026-04-17)
|
||||
|
||||
**Aanleiding:** TagSyncService verwijderd in S2a Form Builder legacy purge. Semantiek (TAG_PICKER-antwoorden syncen naar user_organisation_tags bij registratie-goedkeuring) blijft valide.
|
||||
**Wat:** Herbouwen als listener op FormSubmissionSubmitted of FormSubmissionApproved tegen de nieuwe FormValue + TAG_PICKER field_type. Integreren met PersonController::approve() workflow zonder directe service-injection.
|
||||
**Wat:** Herbouwen als listener op FormSubmissionSubmitted tegen de nieuwe FormValue + TAG_PICKER field_type. Integreren via PersonIdentityService::confirmMatch zonder directe service-injection in PersonController.
|
||||
**Eerdere call-sites (nu verwijderd):** PersonController::approve(), PersonIdentityService::syncRegistrationTags().
|
||||
**Prioriteit:** Hoog — moet landen in S2b of S2c, vóór de frontend in S5 opnieuw op het registratieformulier aansluit.
|
||||
**Landed artefacts:**
|
||||
|
||||
- `App\Services\FormBuilder\FormTagSyncService::rebuildForPerson` — idempotent union-of-TAG_PICKER-values rebuild, only mutates `source=self_reported` rows, no-op when `person.user_id IS NULL`.
|
||||
- `App\Listeners\FormBuilder\SyncTagPickerSelectionsOnSubmit` — ShouldQueue listener on `FormSubmissionSubmitted`, filters to `event_registration` purpose with `subject_type=person` + at least one `TAG_PICKER` value. Logs + swallows errors so sibling listeners (§31.1/§31.3/§31.8) keep running.
|
||||
- `App\Services\PersonIdentityService::confirmMatch` — calls `FormTagSyncService::rebuildForPerson` after setting `person.user_id` (deferred-sync path for person who submitted before the user account existed).
|
||||
- Contract frozen in ARCH-FORM-BUILDER.md §31.10 (authoritative block) and covered by `tests/Feature/FormBuilder/Integration/TagPickerSyncListenerTest`.
|
||||
|
||||
**Deferred integration tests (move under FORM-03 if needed):** GdprDeleteCascadeTest, EmailNotificationFlowTest, CodeOfConductGatingTest, SupplierIntakeFlowTest, CrowdListAutoAddTest (§31.9). Only §31.10 ships with S2b; other contracts wait until their feature arrives.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user