feat(domain): BIG Domain Service skeleton with the Registration aggregate (closes #6) #61
Reference in New Issue
Block a user
Delete Branch "feat/6-domain-service"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
S-05: the BIG Domain Service skeleton with the
Registrationaggregate. Submitting aregistration creates the aggregate (
INGEDIEND), starts the Flowableregistratieprocess, and— via a hosted external-task worker — opens a zaak through the ACL and records it on the aggregate.
This is the upstream half of the walking skeleton: it produces the zaak that S-06 (#7) projects.
Orchestration (ADR-0009):
POST /registrationsis fast and returns 202; theOpenZaakAanmakenexternal-worker job is driven off the request path by a pollingBackgroundService. The Workflow Client is the only code that talks to Flowable (§8.2); theworker opens the zaak only through the ACL (§8.1). The REST contract was verified against a live
flowable-rest engine.
Layering mirrors the other services:
Big.Domain(pure) →Big.Application(use cases overports) →
Big.Infrastructure(Flowable + ACL clients, in-memory store, job pump) →Big.Api.Closes #6
Closes #60
Definition of Done
refs #6).docker compose upreaches green health checks (domain service health-checked, verified locally).docs/architecture/adr-0009-external-task-job-worker.md.docs/demo-script.md.Notes for reviewers
floor). The
OpenZaakJobPumphosted-shell is excluded; two genuinely-equivalent mutants are// Stryker disable-d with reasons.read path is the projection, S-06) — an EF-backed domain store is a documented follow-up; the
IRegistrationStoreport keeps that additive. The state machine is minimal (INGEDIENDonly).verify-domainend-to-end: seeds a published BIG zaaktype, recreates theaclservicepointed at it (the zaaktype URL is server-assigned, so it isn't knowable at bring-up) host-
consistently, then submits a registration and asserts the worker opens a zaak. This leg
(domain→ACL→OpenZaak) could not be exercised in the dev environment (no
selectielijstegress /full compose); it mirrors the configuration the ACL integration test already proves, so CI is its
first real run.
ACL_OPENZAAK_BASEURLcompose var (default unchanged) and a machine-readableZAAKTYPE_URLline fromseed_catalogus.py.Closes #62
Update — CI fix folded in
ac874bfmakes themutationjob's Stryker report uploads best-effort (continue-on-error: true): the Gitea artifact backend returns 500 toupload-artifact@v3(server-side), which was failing the job on every run (main included) despite the ratchet passing. The mutation gate stays the Stryker ratchet. See gitea-actions-gotchas.md §4 (#62).🤖 Generated with Claude Code
The BIG Domain Service Api wires the use cases and the hosted job worker: POST /registrations creates the aggregate and starts the registratie process, returning 202 with a location; GET /registrations/{id} reads the aggregate so the eventually-opened zaak URL can be observed (ADR-0009). The Workflow Client is registered once behind both Flowable ports; the ACL client and in-memory store complete the wiring. Verified against a live flowable-rest: submit starts a parked process and the worker polls it. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>