using System.Net.Http.Json; using System.Text.Json.Serialization; using EventSubscriber.Application; namespace EventSubscriber.Api; /// /// HTTP client to the ACL service. The subscriber enriches the projection with the zaak's reference /// (identificatie) by asking the ACL — the only code that may read ZGW (§8.1) — rather than reading /// OpenZaak itself (adr-proposal #78). /// public sealed class AclHttpClient(HttpClient http) : IAclClient { public async Task GetZaakReferenceAsync(Uri zaakUrl, CancellationToken ct = default) { ArgumentNullException.ThrowIfNull(zaakUrl); using var response = await http.PostAsJsonAsync( new Uri(http.BaseAddress!, "zaken/reference"), new ReferenceRequest(zaakUrl.ToString()), ct); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadFromJsonAsync(ct) ?? throw new InvalidOperationException("The ACL returned an empty reference response."); return body.Reference; } private sealed record ReferenceRequest([property: JsonPropertyName("zaakUrl")] string ZaakUrl); private sealed record ReferenceResponse([property: JsonPropertyName("reference")] string Reference); }