feat(api)!: geef aanleveren een eigen resource zodat de generator-update kan landen - #147
dependabot[bot] wants to merge 4 commits into
Conversation
Pull request was converted to draft
Waarom deze bump nu niet door kan
Quarkus REST resolvet eerst op class-basispad. Dat dit géén discovery-probleem is (Quarkus die de class- Wat er wél in deze PR zitCommit 92004a8 haalt de dubbel gedefinieerde Verder VervolgOpgepakt in MinBZK/MijnOverheidZakelijk#870 — daar staan de oplossingsrichtingen (pinnen op 7.23.0, Voorstel: deze PR sluiten en 7.24.x in Dependabot negeren tot #870 is opgelost. De twee verbeteringen hierboven zijn los van de bump waardevol en kunnen in een eigen PR terugkomen. |
|
Ik weet niet of het handig is om dit ticket te sluiten. Dat laten we wat mij betreft over aan de implementatie van MinBZK/MijnOverheidZakelijk#870. Als er een update komt van een van beide projecten dan komt er volgens mij gewoon een nieuwe PR van dependabot. |
Bumps org.openapitools:openapi-generator-maven-plugin from 7.23.0 to 7.24.0. --- updated-dependencies: - dependency-name: org.openapitools:openapi-generator-maven-plugin dependency-version: 7.24.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
openapi-generator 7.24.0 verdeelt paden anders over class- en methode-niveau: zodra een common prefix routes van een andere tag zou shadowen, valt de class-`@Path` weg en dragen de methodes het volledige pad (upstream PR #23871). De resource-classes zetten zelf `@Path(ApiInfo.BASE_PATH + "/berichten")`, dus dat leverde `/api/v1/berichten/berichten` op — POST /api/v1/berichten gaf 405. Een 405 wordt beantwoord zonder de request-body te lezen; de aanlever-test die 25 MiB uploadt bleef daardoor schrijven tot GitHub de job na 6 uur afkapte. De prefix staat nu één keer in `quarkus.rest.path`. Resources die een gegenereerde interface implementeren dragen geen eigen `@Path` meer en volgen de spec; handgeschreven resources houden een relatief pad. HAL-links in het magazijn laten `.path(ApiInfo.BASE_PATH)` weg omdat `uriInfo.baseUri` de prefix nu al bevat. De test-job krijgt `timeout-minutes: 30` als vangnet tegen een hangende upload. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
De HAL-links in het magazijn laten `.path(ApiInfo.BASE_PATH)` weg sinds de prefix één keer via `quarkus.rest.path` gezet wordt: `uriInfo.baseUri` draagt hem dan al. De unit-test bouwde zijn base-URI echter zonder die prefix, waardoor de self-link-assertie op `/api/v1/berichten/...` niet meer kon slagen. De fixture bevat de prefix nu net als de runtime-waarde.
…één tag
De code-generator laat het class-basispad van een tag vervallen zodra dat pad de
routes van een andere tag zou afvangen; de operaties dragen dan hun volledige pad
op methodeniveau. Quarkus REST resolvet eerst op class-basispad en beantwoordt zo'n
operatie met 405. In het magazijn deelden Aanlever, Ophaal en Beheer allemaal
/berichten, waardoor aanleveren, status bijwerken en verwijderen onbereikbaar werden.
Elke tag bezit nu zijn eigen pad-subtree. Aanleveren verhuist naar
`POST /aanleveringen` — een eigen resource, symmetrisch met `POST /aanmeldingen`
in de uitvraag, en het houdt de afzender-kant gescheiden van de ontvanger-kant.
Ophaal en Beheer gaan samen onder één tag `Berichten`, want `GET` en
`PATCH`/`DELETE` op `/berichten/{berichtId}` delen hetzelfde pad en kunnen daarom
niet in verschillende tags zitten. De domeinlogica blijft wél gescheiden: alleen
de HTTP-laag komt samen in `BerichtenResource`, de services blijven los.
BREAKING CHANGE: aanleveren gebeurt op `POST /api/v1/aanleveringen` in plaats van
`POST /api/v1/berichten`. De lees- en beheerpaden onder `/berichten` blijven gelijk,
net als de `Location`-header en de HAL-links na een geslaagde aanlevering.
2d8ff9b to
7cbd040
Compare
JaCoCo coverage
Files
|
|
Vervangen door #203. Dezelfde vier commits — de bump naar 7.24.0, de pad-prefix naar Reden voor de verhuizing: de deploy-workflow slaat bouwen en preview-deployen bewust over voor bot-PR's, dus de drie |
|
OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
Wat er verandert
De code-generator-update naar 7.24.0 maakte drie van de zes magazijn-operaties onbereikbaar.
Deze PR neemt de update alsnog, door de oorzaak weg te nemen in plaats van de update tegen te
houden.
De oorzaak. Upstream "Fix path shadowing"
laat het class-basispad van een tag vervallen zodra dat pad de routes van een ándere tag zou
afvangen; de operaties dragen hun volledige pad dan op methodeniveau. Dat is geldige JAX-RS, maar
Quarkus REST resolvet eerst op class-basispad en beantwoordt zo'n operatie met 405. In het magazijn
deelden
Aanlever,OphaalenBeheerallemaal/berichten:@PathOphaalApi"/berichten"AanleverApi""POST /berichten→ 405BeheerApi""PATCH/DELETE /berichten/{berichtId}→ 405De oplossing. Elke tag bezit nu zijn eigen pad-subtree:
POST /berichtenPOST /aanleveringenAanlever/berichten…Ophaal→Berichten/berichten/{berichtId}Beheer→BerichtenGegenereerd wordt nu
AanleverApi @Path("/aanleveringen")naastBerichtenApi @Path("/berichten")—twee disjuncte subtrees, geen lege class-
@Pathmeer.OphaalenBeheermoesten één tag worden omdatGETenPATCH/DELETEop/berichten/{berichtId}hetzelfde pad delen; geen ADR-conforme hernoeming scheidt die. Alleen deHTTP-laag komt daardoor samen in
BerichtenResource—BerichtOphaalServiceenBerichtBeheerServiceblijven gescheiden, net als hun tests.Aanleveren houdt wél een eigen resource. Het is de afzender-kant die via de FSC-inway naar binnen
schrijft, tegenover de ontvanger-kant met
X-OntvangerenBerichtAutorisatie.vereisOntvanger(...).Die twee autorisatieregimes in één class zetten zou de verkeerde besparing zijn.
Waarom niet wachten
De bijbehorende Quarkus-issue (quarkusio/quarkus#26496)
is gesloten en gerepareerd in 3.24.0.CR1, ruim vóór onze 3.38.1. Die fix dekt
@Path("/base")tegenover
@Path("/base/{id}"), niet@Path("")tegenover@Path("/berichten")— gemeten: de 405'streden op onze huidige Quarkus-versie nog steeds op. De generator doet niets fouts, dus wachten
lost hier niets op.
Wel opgevallen en apart te melden bij OpenAPITools: de shadow-detectie is asymmetrisch.
Ophaal's commonPath/berichtenwas exact gelijk aanAanlever's pad, dus had ookOphaalzijnclass-
@Pathmoeten verliezen. Dan hadden alle drie de interfaces@Path("")gehad en had deroutering gewoon gewerkt.
Meegenomen fout
BerichtDtoMapperTestfaalde op deze branch, los van de bump. De HAL-links laten.path(ApiInfo.BASE_PATH)weg sinds de prefix één keer viaquarkus.rest.pathgezet wordt, maar detest-fixture bouwde zijn base-URI nog zonder die prefix. De fixture spiegelt nu de runtime-waarde.
Wat er meeverhuist
Alleen het schrijfpad.
MagazijnAanleverClientin de demo-console (class-@Pathnaar/api/v1,paden per methode, want POST en PATCH zitten nu op verschillende roots), de Bruno-map
berichten/→aanleveren/,demo/smoke.sh,apis.jsonen 34 POST-call-sites in tests. Delees-clients —
MagazijnClientin de sessiecache-library én in de uitvraag — raken/berichtenenblijven ongemoeid, net als de WireMock-mappings (die stubben leespaden).
Verificatie
./mvnw clean verify— alle modules groen: fbs-common 296, magazijnregister 30, sessiecache 295,magazijn 379, uitvraag 194, demo-console 43
RouteDekkingTestuit test(api): bewaak dat elk pad uit de spec ook echt bij een resource aankomt #192 tijdelijk meegedraaid op deze branch: 12/12 groen, waar dezelfdetest vóór deze wijziging drie 405's meldde
Volgorde
#192 landt eerst — die brengt
RouteDekkingTestals blijvende bewaker en haalt dedependabot-blokkade op deze generator weg. Daarna rebaset deze PR daarop;
PADENin demagazijn-variant van die test gaat dan van 3 naar 4.
Closes MinBZK/MijnOverheidZakelijk#870
🤖 Generated with Claude Code