Einführung eines "Notified"-Flags in Einreichungen
Als Aufrufer des GET /v1/submissions Endpunktes möchte ich, dass die Antwort schnell verfügbar ist. Außerdem sollen auf diesem Weg neu ermittelte Einreichungen ein notify_submission Event Log Eintrag erzeugen.
Why
Beim Abrufen aller Einreichungen über den Endpunkt GET /v1/submissions wird für alle gelisteten Einreichungen geprüft, ob diese bereits ein notify_submission Event Log Eintrag besitzen, indem für jede Einreichung direkt in die event_log Tabelle geschaut wird. Dies erzeugt bei vielen Einreichungen eine hohe Anzahl an Anfragen und damit Last auf die Tabelle event_log (siehe planning#1514) .
IST:
Beim Abrufen aller Einreichungen über den Endpunkt GET /v1/submissions wird für alle gelisteten Einreichungen geprüft, ob diese bereits ein notify_submission Event Log Eintrag besitzen. Diese Prüfung findet direkt im Event Log statt. Dabei wird für jede Submission in der Tabelle event_log geprüft, ob es bereits ein notify_submission Event vom Type polling gibt.
SOLL:
Um zusätzliche Datenbank-Abfragen in der Tabelle event_log zu vermeiden, wurde diese Prüfung für die Replies abweichend implementiert. Die Entität Reply besitzt ein Flag notify_event_written, welches auf true gesetzt wird, sobald der Reply erstmalig über den GET /v1/replies Endpunkt gelistet wurde und damit das notify_reply Event vom Typ polling dem Event Log hinzugefügt wurde.
Analog hierzu soll die Prüfung auch für die Einreichungen - über ein Flag notify_event_written - erfolgen.
Links, Notes, Remarks
- Das Verhalten nach außen bleibt 1:1 bestehen (API Tests müssen also nicht angepasst werden.
- Bei diesem Issue liegt der Fokus auf der internen Verarbeitung.
Referenzen auf die Reply Implementierung:
-
notify_event_writtenColumn inreply: https://git.fitko.de/fit-connect/zustelldienst/blob/c8838dbf675f4a826d96faa3294b1aaaa26c5308/src/main/resources/db/migration/V018__Add_notified_to_reply_table.sql#L3 - Methode welche ein
notify_replyEvent vom Typpollingschreibt, sofern das Flag nochfalseist: https://git.fitko.de/fit-connect/zustelldienst/blob/c8838dbf675f4a826d96faa3294b1aaaa26c5308/src/main/java/de/fiep/zustelldienst/service/ReplyService.java#L184 -
@SpringBootTest"Should write 'notify-reply' event of type POLLING when GET /replies endpoint is called": https://git.fitko.de/fit-connect/zustelldienst/blob/bb7dacdc3dcf7cb8a656cb7d3b7b158d8ff57a80/src/test/java/de/fiep/zustelldienst/controller/ReplyRetrievalAPITest.java#L123
Acceptance criteria
-
Es gibt einen Test, der prüft, dass kein notify_submissionEvent vom Typpollinggeschrieben wird, wenn ein Flagnotify_event_writtenauftruegestellt ist. -
Es gibt einen Test, der prüft, dass ein notify_submissionEvent vom Typpollinggeschrieben wird, wenn ein Flagnotify_event_writtenauffalsegestellt ist. -
Es gibt einen Integrations Test ( @SpringBoot), welcher sicherstellt, dass beim Aufruf des EndpunktesGET /v1/submissionseinnotify_submissionEvent vom Typpollingin die Datenbank geschrieben wird. -
Notwendige Datenbankmigrationen erfolgen automatisiert und es werden sinnvolle Default-Werte gesetzt.
Implementation plan (to be completed by the developer)
-
... -
... -
... -
Definition of Done was checked.