Skip to content

Fix PR review bevindingen: error handling, type-validatie en tests#6

Open
ericwout-overheid wants to merge 1 commit intofeature/multi-magazijn-aggregatiefrom
fix/pr-review-bevindingen
Open

Fix PR review bevindingen: error handling, type-validatie en tests#6
ericwout-overheid wants to merge 1 commit intofeature/multi-magazijn-aggregatiefrom
fix/pr-review-bevindingen

Conversation

@ericwout-overheid
Copy link
Contributor

Summary

  • 4 kritieke bugs gefixt: getBerichtById 404-vs-502 bug, stale cache bij re-fetch, silent failure in initStream, te brede exception catch
  • 8 belangrijke verbeteringen: zoekBerichten 409-guard, URL-encoding HAL links, TimeoutException handling, magazijn-b configuratie, type-validatie, startup URL-validatie
  • 2 nieuwe tests: zoekBerichten 409-guard, paginering buiten bereik

Geadresseerde review-bevindingen

Kritiek (must-fix)

  • getBerichtById vangt nu WebApplicationException(404) apart op — retourneert correct 404 i.p.v. 502
  • BerichtenCache.store() verwijdert oude cache-data bij lege lijst — voorkomt stale data bij re-fetch
  • initStream logt cache-fouten voordat recoverWithCompletion() ze opvangt — geen stille failures meer
  • BerichtenlijstService retourneert BerichtLookupResult sealed class i.p.v. WebApplicationException — error handling in resource, niet service (CLAUDE.md)

Belangrijk

  • zoekBerichten heeft nu dezelfde 409-guard als getBerichten — consistente lifecycle check
  • HAL pagination links URL-encoden de ontvanger parameter — voorkomt URI-injectie
  • await().atMost() vangt TimeoutException af en retourneert 503 Problem JSON
  • compose.yaml + application.properties configureren nu magazijn-a én magazijn-b
  • MagazijnStatusEvent valideert verplichte velden per event type via init
  • AggregationStatus controleert totaalMagazijnen >= 0
  • BerichtenPage valideert page >= 0, pageSize > 0, totalElements >= 0
  • MagazijnClientFactory valideert URLs bij startup
  • Backend-failures gelogd als ERROR i.p.v. WARN
  • Generieke foutmelding in SSE i.p.v. interne class names
  • Mock gebruikt ProcessingException i.p.v. RuntimeException — matcht echt REST client gedrag

Test plan

  • Alle 22 tests slagen (inclusief 2 nieuwe)
  • Handmatig testen met docker compose up + ./mvnw quarkus:dev
  • Controleer SSE-stream met 2 magazijnen in dev mode

🤖 Generated with Claude Code

…ng en tests

Kritieke fixes:
- getBerichtById: onderscheid WebApplicationException(404) van ProcessingException
  zodat 404 correct doorkomt i.p.v. 502
- BerichtenCache.store: verwijder oude cache-data bij lege berichten-lijst
  om stale data te voorkomen bij re-fetch
- BerichtenOphalenResource: log cache-fout bij initStream i.p.v. stil slikken
- BerichtenlijstService: gebruik sealed BerichtLookupResult i.p.v.
  WebApplicationException in de service-laag (CLAUDE.md: error handling in resource)

Belangrijke verbeteringen:
- zoekBerichten: voeg 409-guard toe (was inconsistent met getBerichten)
- HAL pagination links: URL-encode ontvanger parameter
- TimeoutException: vang af en retourneer 503 Problem JSON
- compose.yaml + application.properties: voeg magazijn-b toe
- MagazijnStatusEvent: init-validatie per event type
- AggregationStatus: require(totaalMagazijnen >= 0)
- BerichtenPage: init-validatie (page >= 0, pageSize > 0)
- MagazijnClientFactory: valideer URLs bij startup
- Log backend-failures als ERROR i.p.v. WARN
- Gebruik generieke foutmelding i.p.v. class name in SSE events
- MockMagazijnClientFactory: gebruik ProcessingException, verwijder ongebruikte alias

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant