All checks were successful
## What & why First half of **S-12c** (behandel-portal backend), per **ADR-0013** (decisions recorded in #84): - **BFF multi-realm auth.** A second JWT bearer scheme (`medewerker`) alongside the default `digid` scheme. On validation it lifts Keycloak's `realm_access.roles` onto the principal, and a `behandelaar` policy (medewerker scheme + `behandelaar` role) gates `/behandel/*`. Self-service keeps the digid scheme. - **Werkbak = Flowable tasks.** The domain `Werkbak` query reads the open `Beoordelen` tasks (§8.2, S-12b's `IUserTaskClient`) and enriches each with its aggregate's bsn + status; `GET /behandel/werkbak` (domain) is proxied by the BFF `GET /behandel/werkbak` behind the behandelaar policy. The read projection stays the anonymous openbaar model (no premature `IN_BEHANDELING`/personal-data plumbing — deferred in ADR-0008). Behavior: `/behandel/werkbak` is **401** without a token, **403** for a medewerker lacking the role, **200 + werkbak** for a behandelaar. **S-12c-2** (next): `POST /behandel/registrations/{id}/decide` → domain decision + complete the Flowable task. ## Definition of Done - [x] Linked issue: #13 (umbrella, `refs`); closes the adr-proposal #84 - [x] Tests first; red → green per layer - [x] Unit + acceptance green (`make unit`): domain 78, bff 23, acceptance 9 (+ acl/event-subscriber unaffected) - [x] api-client `test` green; openapi.json regenerated (drift guard passes) - [x] Mutation ≥ break(90): **domain 100%, bff 100%** - [x] ADR-0013 added; `Keycloak__MedewerkerAuthority` wired into compose - [ ] CI green (pending) Part of #13. closes #84 Reviewed-on: #85
33 lines
1.4 KiB
C#
33 lines
1.4 KiB
C#
namespace Big.Application;
|
|
|
|
/// <summary>One row of the behandelaar's werkbak: a registration awaiting beoordeling, with the
|
|
/// public-facing reference (its id) plus the bsn and status a behandelaar needs to triage it.</summary>
|
|
public sealed record WerkbakItem(string RegistrationId, string Bsn, string Status);
|
|
|
|
/// <summary>
|
|
/// The werkbak query (S-12c): the registrations awaiting a behandelaar's beoordeling. It reads the
|
|
/// open <c>Beoordelen</c> tasks from the workflow engine (§8.2, via <see cref="IUserTaskClient"/>) —
|
|
/// the authoritative set of work items — and enriches each with its aggregate (bsn + status). A task
|
|
/// whose registration the domain doesn't know is skipped rather than invented.
|
|
/// </summary>
|
|
public sealed class Werkbak(IUserTaskClient tasks, IRegistrationStore store)
|
|
{
|
|
public async Task<IReadOnlyList<WerkbakItem>> GetAsync(CancellationToken ct = default)
|
|
{
|
|
var open = await tasks.GetOpenBeoordelingenAsync(ct);
|
|
|
|
var items = new List<WerkbakItem>(open.Count);
|
|
foreach (var task in open)
|
|
{
|
|
var registration = await store.GetAsync(task.RegistrationId, ct);
|
|
if (registration is null)
|
|
continue;
|
|
|
|
items.Add(new WerkbakItem(
|
|
registration.Id.ToString(), registration.Bsn, registration.Status.ToString()));
|
|
}
|
|
|
|
return items;
|
|
}
|
|
}
|