Paginierte Listen-Endpunkte verbessern
Why
Die drei Endpunkte
- GET /v1/destinations
- GET /v1/submissions
- GET /v1/cases/{caseId}/events
sind mit Limit-Offset paginierte Listen, deren Implementierungen derzeit aber folgende Schwächen aufweisen:
- Es werden pro Request n+1 Datenbankabfragen gemacht, wobei n die Seitengröße ist, was natürlich schnell sehr ineffizient werden kann.
- Die Ordnung der Elemente innerhalb einer Seite ist nicht stabil bzw deterministisch. Die DB-Abfragen beinhalten zwar ORDER BY Klauseln, aber die Ergebnisse werden zu Sets verarbeitet, auf denen keine Ordnung definiert ist. Die faktische Ordnung ergibt sich derzeit rein aus Implementierungsdetails der Sets und die Ordnung der Elemente innerhalb einer Seite ist nicht notwendigerweise konsistent mit der globalen, seitenübergreifenden Ordnung.
Acceptance criteria
-
Es sollten nur noch 2 Datenbank-Abfragen pro Request stattfinden (einer für totalCount und einer für die Elemente der Seite). -
Die Ordnung der Elemente sollte nachvollziehbar, stabil und deterministisch sein.
Implementation plan (to be completed by the developer)
-
Man verwende Page und Pageable von spring-data-jpa. -
Signaturen sollten von Set und Collection auf List migriert werden, um die Ordnung der Elemente deutlich zu machen und zu erhalten. -
Definition of Done was checked.
Edited by Jonas Gröger