feat(ociserve): zelfinschrijving voor klassikaal aanbod en eigen boekingen #2131

Merged
brenno merged 2 commits from feature/planning-d0-d5 into main 2026-09-20 09:23:35 +00:00
Owner

Samenvatting

Planning/zelfinschrijving voor OciServe (issues #2122–#2127):

  • D-0 (#2122) — getypte gateway + modellen voor me/course-offerings en me/bookings (aanbod, inschrijven, afmelden, bevestigen, afzien) met expliciete idempotency-sleutels; OciServeProblem met Retry-After in gesaniteerde exceptions; contractpin bijgewerkt en de drift-test dekt alle zeven self-service routes.
  • D-1 (#2123) — Mijn inschrijvingen: binnenkort/geweest, statuschips met wachtlijstpositie, aangeboden-plek-flow, sessietijden in de IANA-zone van de bijeenkomst (package:timezone, gebundeld, offline) met de apparaatzone ernaast.
  • D-2 (#2124) — Aanbod: inschrijfbare uitvoeringen, sessiekeuze per klassikale les, wachtlijst bij volle sessies, resultaatoverzicht, server-weigeringen in producttaal.
  • D-3 (#2125) — voucherinvoer met Crockford Base32-checksum en transcriptie-tolerante invoer; de code gaat alleen mee in het éne verzoek — nooit bewaard, nooit gelogd; Retry-After blokkeert de knop.
  • D-4 (#2126) — toelatingseisen en uitkomsten per uitvoering; inschrijven gated bij onvoldane eisen. Er is géén self-service ontheffings-endpoint, dus de UI legt uit dat de organisatie ontheffing verleent i.p.v. een actie voor te wenden.
  • D-5 (#2127) — zelf afmelden met bevestigingsdialoog, het annuleervenster van de uitvoering en uitleg als die verstreken is.

Waardebewaking

Deze wijziging raakt het .md-formaat niet en voegt geen opslag toe. Één nieuwe dependency (timezone, pure Dart, gebundelde tz-data, volledig offline) voor de IANA-tijdzone-eis in D-1. Alle endpoints zijn zelf-gescoped (me/…) op de al geconfigureerde OciServe — geen nieuwe partij.

Testplan

  • make check volledig groen (format, analyze, conventies, projectiegrens, methodenlengte, volledige testsuite, coverage-vloer per bestand, goldens)
  • Nieuwe tests: ociserve_planning_test (gateway+modellen), ociserve_planning_ui_test (beide schermen incl. foutpaden), session_timezone_test, voucher_code_test, provider-tests voor de nieuwe methoden
  • l10n: 65 nieuwe strings in alle 31 talen, parity/orphans groen
  • SBOM + THIRD_PARTY_NOTICES bijgewerkt voor timezone
  • Source map aangevuld voor de vier nieuwe bibliotheken

Generated with Devin

## Samenvatting Planning/zelfinschrijving voor OciServe (issues #2122–#2127): - **D-0 (#2122)** — getypte gateway + modellen voor `me/course-offerings` en `me/bookings` (aanbod, inschrijven, afmelden, bevestigen, afzien) met expliciete idempotency-sleutels; `OciServeProblem` met `Retry-After` in gesaniteerde exceptions; contractpin bijgewerkt en de drift-test dekt alle zeven self-service routes. - **D-1 (#2123)** — **Mijn inschrijvingen**: binnenkort/geweest, statuschips met wachtlijstpositie, aangeboden-plek-flow, sessietijden in de IANA-zone van de bijeenkomst (`package:timezone`, gebundeld, offline) met de apparaatzone ernaast. - **D-2 (#2124)** — **Aanbod**: inschrijfbare uitvoeringen, sessiekeuze per klassikale les, wachtlijst bij volle sessies, resultaatoverzicht, server-weigeringen in producttaal. - **D-3 (#2125)** — voucherinvoer met Crockford Base32-checksum en transcriptie-tolerante invoer; de code gaat alleen mee in het éne verzoek — nooit bewaard, nooit gelogd; `Retry-After` blokkeert de knop. - **D-4 (#2126)** — toelatingseisen en uitkomsten per uitvoering; inschrijven gated bij onvoldane eisen. Er is géén self-service ontheffings-endpoint, dus de UI legt uit dat de organisatie ontheffing verleent i.p.v. een actie voor te wenden. - **D-5 (#2127)** — zelf afmelden met bevestigingsdialoog, het annuleervenster van de uitvoering en uitleg als die verstreken is. #### Waardebewaking Deze wijziging raakt het `.md`-formaat niet en voegt geen opslag toe. Één nieuwe dependency (`timezone`, pure Dart, gebundelde tz-data, volledig offline) voor de IANA-tijdzone-eis in D-1. Alle endpoints zijn zelf-gescoped (`me/…`) op de al geconfigureerde OciServe — geen nieuwe partij. #### Testplan - [x] `make check` volledig groen (format, analyze, conventies, projectiegrens, methodenlengte, volledige testsuite, coverage-vloer per bestand, goldens) - [x] Nieuwe tests: `ociserve_planning_test` (gateway+modellen), `ociserve_planning_ui_test` (beide schermen incl. foutpaden), `session_timezone_test`, `voucher_code_test`, provider-tests voor de nieuwe methoden - [x] l10n: 65 nieuwe strings in alle 31 talen, parity/orphans groen - [x] SBOM + THIRD_PARTY_NOTICES bijgewerkt voor `timezone` - [x] Source map aangevuld voor de vier nieuwe bibliotheken Generated with [Devin](https://devin.ai)
#2122 (D-0): getypte gateway + modellen voor me/course-offerings en
me/bookings — aanbod, inschrijven, afmelden, bevestigen en afzien met
expliciete idempotency-sleutels; problem-details met Retry-After als
gesaniteerde OciServeException; contractpin bijgewerkt naar de actuele
OciServe-spec en de drift-test dekt nu alle zeven self-service routes.

#2123 (D-1): 'Mijn inschrijvingen' in de leeromgeving-dialoog —
binnenkort/geweest, statuschips incl. wachtlijstpositie, de
aangeboden-plek-flow en sessietijden in de IANA-zone van de bijeenkomst
(package:timezone, gebundeld en offline) met eigen zone ernaast.

#2124 (D-2): 'Aanbod' — inschrijfbare uitvoeringen, sessiekeuze per
klassikale les, wachtlijst bij volle sessies, resultaatoverzicht en
server-weigeringen in producttaal.

#2125 (D-3): voucherinvoer met Crockford Base32-checksum en
transcriptie-tolerante invoer; de code wordt alleen in het ene verzoek
gebruikt — nooit bewaard of gelogd; Retry-After blokkeert de knop.

#2126 (D-4): toelatingseisen en uitkomsten per uitvoering; inschrijven
blijft uit bij not_met/verlopen eisen. Er bestaat geen self-service
ontheffings-endpoint, dus de UI legt uit dat de organisatie dat doet in
plaats van een actie voor te wenden.

#2127 (D-5): zelf afmelden met bevestigingsdialoog, het
annuleervenster van de uitvoering en een uitleg als die is verstreken.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Merge remote-tracking branch 'origin/main' into feature/planning-d0-d5
All checks were successful
scans / scans (pull_request) Successful in 3m43s
static-gate / static-gate (pull_request) Successful in 10m53s
web-gate / web-gate (pull_request) Successful in 9m38s
927fd2646c
# Conflicts:
#	test/app_localizations_test.dart
brenno merged commit 4eedc658a3 into main 2026-09-20 09:23:35 +00:00
Sign in to join this conversation.
No description provided.