Mit dem fünften Meilenstein kommt der zweite große Teil der Kladde dazu: öffentliche Ausschreibungen. Öffentliche Auftraggeber in der EU veröffentlichen ihre Ausschreibungen in TED (Tenders Electronic Daily), und TED bietet eine Such-Schnittstelle, die jeder ohne Schlüssel nutzen kann. In Modul 2.8 haben Sie dafür einen Client gebaut und einen nächtlichen Import, der zu festen CPV-Codes aus der Konfiguration liest. Jetzt wird daraus ein Import, den das Büro selbst steuert: Die Leitung legt fest, wonach gesucht wird, der Import holt jede Nacht nur das Neue, er übersteht Ausfälle von TED, und jede Person sieht, wie der letzte Lauf ausging.

Der Schnitt aus Lektion 2.11.1 mit der Änderung, die dort in Lösung 3 empfohlen ist: Die Läufe werden festgehalten, bevor die Abfrage den letzten erfolgreichen Lauf braucht.

Pull Request Branch Bringt Wo in dieser Lektion
1 feature/m5-search-criteria CPV-Codes und Länder, geprüft, gespeichert, von der Leitung gepflegt Übung 1 und „Pull Request 1“
2 feature/m5-import-runs jeder Lauf festgehalten, der letzte sichtbar, neu und geändert gezählt „Pull Request 2“
3 feature/m5-query-from-criteria die Abfrage aus den Kriterien, ab dem letzten Erfolg, alle Seiten der Antwort „Pull Request 3“
4 feature/m5-retry-run um 3 Uhr Ortszeit, nach einem Fehler bis zu dreimal neu, der Client wiederholt kein POST Übung 2 und „Pull Request 4“

Wo die Kladde steht

Nach Modul 2.8 und Meilenstein 4 gilt in den Lösungen:

  • TedClient im eigenen Projekt Kladde.Ted ist ein typisierter Client (Lektion 2.8.1) mit AllowAutoRedirect = false und Tests in tests/Kladde.Ted.Tests mit einem nachgemachten HttpMessageHandler für Erfolg, 500, Weiterleitung und kaputtes JSON. Die Abfrage baut TedQuery aus einem TenderSearch (CPV-Codes, Länder, Grenze) aus Kladde.Core.Tenders.
  • Ein Hintergrunddienst importiert jede Nacht die Bekanntmachungen zu den CPV-Codes und Ländern aus der Konfiguration (Tenders:Import, Lektion 2.8.2).
  • Der Import ist idempotent: Ein eindeutiger Index auf der Bekanntmachungsnummer verhindert Doppelte (Lektion 2.8.3). Der Standard-Resilienz-Handler wiederholt kein POST (DisableForUnsafeHttpMethods).
  • Unter /ausschreibungen steht eine einfache Liste der importierten Ausschreibungen.

Die Beispiele dieser Lektion geben TenderSearch eine Fabrikmethode mit den Regeln für die Eingaben der Leitung und lassen die Grenze weg, weil der Import jetzt alle Seiten liest; TedQuery bekommt den Tag des letzten Erfolgs dazu. Ändern Sie diese beiden Typen aus Modul 2.8, statt neue danebenzustellen. Heißen Ihre Dateien, Klassen oder Ordner anders, behalten Sie Ihre Namen und übertragen Sie die Schritte.