Add DiplomaOrigin (Binnenlands/Buitenlands) to the Registration aggregate and submit command, and thread it through the process-start port so the workflow's DMN can route on it (ADR proposal #100). Failing Workflow Client test asserts the diplomaOrigin start variable; the client takes the origin but does not emit it yet. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
37 lines
1.8 KiB
C#
37 lines
1.8 KiB
C#
using Big.Domain;
|
|
|
|
namespace Big.Application;
|
|
|
|
/// <summary>A zorgprofessional's request to register, in domain language. No ZGW concepts. The
|
|
/// diploma origin defaults to domestic (the DigiD path); a foreign (eIDAS) submission sets it to
|
|
/// <see cref="DiplomaOrigin.Buitenlands"/> so the workflow's DMN routes it through CBGV-advies (S-13).</summary>
|
|
public sealed record SubmitRegistrationCommand(string Bsn, DiplomaOrigin DiplomaOrigin = DiplomaOrigin.Binnenlands);
|
|
|
|
/// <summary>
|
|
/// The submit use case: create the <see cref="Registration"/> aggregate (INGEDIEND), persist it,
|
|
/// then start the registratie workflow process and record its instance id. It returns as soon as
|
|
/// the process is started — opening the zaak happens later, off the request path, in the external-task
|
|
/// worker (ADR-0009). Persisting <em>before</em> starting the process closes the race where the worker
|
|
/// acquires the OpenZaakAanmaken job before the aggregate it correlates to exists.
|
|
/// </summary>
|
|
public sealed class SubmitRegistration(IRegistrationStore store, IWorkflowClient workflow)
|
|
{
|
|
public async Task<RegistrationId> HandleAsync(SubmitRegistrationCommand command, CancellationToken ct = default)
|
|
{
|
|
ArgumentNullException.ThrowIfNull(command);
|
|
|
|
var registration = Registration.Submit(command.Bsn, command.DiplomaOrigin);
|
|
|
|
// Persist before starting the process so the worker can correlate the OpenZaakAanmaken
|
|
// job back to an aggregate that already exists (ADR-0009).
|
|
await store.SaveAsync(registration, ct);
|
|
|
|
var processInstanceId = await workflow.StartRegistrationProcessAsync(
|
|
registration.Id, registration.DiplomaOrigin, ct);
|
|
registration.RecordProcessStarted(processInstanceId);
|
|
await store.SaveAsync(registration, ct);
|
|
|
|
return registration.Id;
|
|
}
|
|
}
|