CI / lint (pull_request) Successful in 1m25s
CI / build (pull_request) Successful in 1m14s
CI / unit (pull_request) Successful in 1m26s
CI / frontend (pull_request) Successful in 3m7s
CI / mutation (pull_request) Successful in 6m13s
CI / verify-stack (pull_request) Successful in 9m32s
The ACL upserts with PATCH, so every approval notification carries actie `partial_update`. Accepting it makes the INGEDIEND → INGESCHREVEN transition project. `update` stays accepted so a PUT-shaped write behaves the same; `destroy` deliberately does not — removing a registration from the public register is its own decision, not a side effect of this one. ADR-0030 records why the actie list is what it is.
41 lines
2.1 KiB
C#
41 lines
2.1 KiB
C#
namespace EventSubscriber.Application;
|
|
|
|
/// <summary>
|
|
/// An inbound NRC (Open Notificaties) notification, as Open Notificaties POSTs it to an
|
|
/// abonnement callback. Only the fields the projection needs are modelled.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Since S-19b-2 the subscriber listens on the <c>objecten</c> kanaal, not <c>zaken</c>: the
|
|
/// register record in Objecten is what the projection is derived from (ADR-0030), so the
|
|
/// projection is a cache of the register rather than a re-derivation of the case system. An
|
|
/// Objecten notification carries <b>no record data</b> — only the object URL (as both
|
|
/// <c>hoofdObject</c> and <c>resourceUrl</c>) and the objecttype as a kenmerk — so the record
|
|
/// itself is read back through the ACL.
|
|
/// </remarks>
|
|
public sealed record Notification(
|
|
string Kanaal,
|
|
string Resource,
|
|
string Actie,
|
|
Uri ResourceUrl)
|
|
{
|
|
/// <summary>
|
|
/// A register record written to Objecten — <c>create</c> on submit and <c>partial_update</c> on
|
|
/// approval, since the ACL upserts the same object for a registration (§8.6).
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// <c>partial_update</c> is what a PATCH actually reports: DRF routes it through the notifying
|
|
/// <c>update()</c> but names the action <c>partial_update</c>, and that is what Objecten puts in
|
|
/// the notification. <c>update</c> is accepted too, so a PUT-shaped write would project the same
|
|
/// way. <c>destroy</c> is deliberately not: removing a registration from the public register is
|
|
/// its own decision, not a side effect of this one.
|
|
/// </remarks>
|
|
public bool IsRegisterRecordWritten =>
|
|
Kanaal == "objecten" && Resource == "object"
|
|
&& Actie is "create" or "update" or "partial_update";
|
|
|
|
/// <summary>The object holding the register record. For a <c>resource: object</c> notification
|
|
/// Objecten sends the object as both <c>hoofdObject</c> and <c>resourceUrl</c> — the object is
|
|
/// the main resource — so the notification's own <c>hoofdObject</c> is not modelled.</summary>
|
|
public Uri ObjectUrl => ResourceUrl;
|
|
}
|