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:

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)

Edited by Severin Kistner