namespace Acl.Application; /// The ACL's single operation: open a zaak from a domain payload, /// default-filling the ZGW-mandatory fields (ADR-0003). public sealed class AclService(IZaakGateway gateway, AclDefaults defaults, IClock clock) { public Task OpenZaakAsync(DomainRegistration registration, CancellationToken ct = default) { ArgumentNullException.ThrowIfNull(registration); var request = new ZaakRequest( defaults.Bronorganisatie, defaults.VerantwoordelijkeOrganisatie, defaults.Vertrouwelijkheidaanduiding, defaults.ZaaktypeUrl, clock.Today, registration.Reference); return gateway.OpenZaakAsync(request, ct); } /// /// Approve a zaak: set it to the eindstatus of the configured BIG zaaktype (ADR-0003 default). The /// domain hands over only the zaak URL; the ACL owns which statustype means "approved" (§8.1). /// public Task ApproveZaakAsync(Uri zaakUrl, CancellationToken ct = default) { ArgumentNullException.ThrowIfNull(zaakUrl); return gateway.SetZaakToEindstatusAsync(zaakUrl, defaults.ZaaktypeUrl, clock.Today, ct); } /// The zaak's reference (its ZGW identificatie), for the read projection (#78). public Task GetZaakReferenceAsync(Uri zaakUrl, CancellationToken ct = default) { ArgumentNullException.ThrowIfNull(zaakUrl); return gateway.GetZaakIdentificatieAsync(zaakUrl, ct); } /// /// Store an uploaded diploma against the zaak (S-10b): default-fill the ZGW-mandatory document /// fields (informatieobjecttype, bronorganisatie, vertrouwelijkheidaanduiding, taal, creatiedatum) /// and hand the file to the gateway, which creates the informatieobject and relates it to the zaak. /// The domain supplies only the zaak, the bytes, and the file's name/type (§8.1). /// public Task StoreDiplomaAsync(Uri zaakUrl, byte[] content, string fileName, string contentType, CancellationToken ct = default) { ArgumentNullException.ThrowIfNull(zaakUrl); ArgumentNullException.ThrowIfNull(content); ArgumentException.ThrowIfNullOrWhiteSpace(fileName); ArgumentException.ThrowIfNullOrWhiteSpace(contentType); var request = new DocumentRequest( defaults.Bronorganisatie, defaults.InformatieobjecttypeUrl, defaults.Vertrouwelijkheidaanduiding, zaakUrl, clock.Today, Titel: "Diploma", Auteur: "zorgprofessional", Taal: "nld", Bestandsnaam: fileName, Formaat: contentType, Inhoud: content); return gateway.StoreDocumentAsync(request, ct); } }