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_written Column in reply: 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_reply Event vom Typ polling schreibt, sofern das Flag noch false ist: 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

  1. Es gibt einen Test, der prüft, dass kein notify_submission Event vom Typ polling geschrieben wird, wenn ein Flag notify_event_written auf true gestellt ist.
  2. Es gibt einen Test, der prüft, dass ein notify_submission Event vom Typ polling geschrieben wird, wenn ein Flag notify_event_written auf false gestellt ist.
  3. Es gibt einen Integrations Test (@SpringBoot), welcher sicherstellt, dass beim Aufruf des Endpunktes GET /v1/submissions ein notify_submission Event vom Typ polling in die Datenbank geschrieben wird.
  4. Notwendige Datenbankmigrationen erfolgen automatisiert und es werden sinnvolle Default-Werte gesetzt.

Implementation plan (to be completed by the developer)

  • ...
  • ...
  • ...
  • Definition of Done was checked.
Edited Jan 30, 2024 by Severin Kistner
Assignee Loading
Time tracking Loading