Nach Meilenstein 3 ist eine Buchung nur angefragt. Wer sie angefragt hat, bekommt eine Mail, aber noch fehlt, was eine Buchung verlässlich macht: Sie muss bestätigt werden, sie lässt sich absagen, und wer sie nie bestätigt, gibt die Zeit nach einem Tag wieder frei. Der vierte Meilenstein bringt diese drei Wege und sorgt dafür, dass zwischen Buchung und Mail nichts verloren geht.

Bausteine dafür kennen Sie aus Modul 2.8: den Postausgang (Outbox) aus Lektion 2.8.4, den Port IMailSender mit der Umsetzung, die Mails als Dateien in einen Ordner schreibt, und den Bestätigungslink aus Lektion 2.8.5.

Pull Request Branch Bringt Wo in dieser Lektion
1 feature/m4-confirm-idempotent Bestätigen mit Rückfrage, ein zweiter Klick ändert nichts, eine Seite für abgelaufene Links „Pull Request 1“
2 feature/m4-cancel-link der Absagelink; nach dem Beginn keine Absage mehr Übung 1
3 feature/m4-cleanup unbestätigte Buchungen verschwinden nach 24 Stunden Übung 2
4 feature/m4-outbox-restart Postausgang in der Transaktion der Buchung, Mail beim Senden, kein Verlust, nichts doppelt „Pull Request 4“

Wo die Kladde steht

Nach Meilenstein 3 gilt in den Lösungen:

  • Eine Buchung (Booking) legt einen Termin an. Sie trägt Name, Email und RequestedAt; Termin und Viertelstunden speichert EfBookingStore.AddAsync in einem Schritt.
  • Aus Lektion 2.8.4 gibt es einen Postausgang: eine Tabelle, in die eine Änderung ihre Nachricht schreibt, und einen Hintergrunddienst, der sie sendet und als gesendet markiert. Aus Lektion 2.8.5 gibt es IMailSender mit der Umsetzung für einen Ordner.
  • Der Bestätigungslink aus Lektion 2.8.5 läuft nach 24 Stunden ab. Er ist mit ITimeLimitedDataProtector geschützt und führt auf /buchung/bestaetigen. Die Seite fragt, erst der Knopf bestätigt die Buchung mit einem POST, und /buchung/bestaetigt zeigt das Ergebnis. Die Buchung kennt dafür ConfirmedAt und Confirm.

Dieser Meilenstein legt Bestätigen und Absagen nebeneinander: Die Seite aus Lektion 2.8.5 zieht nach /termin/bestaetigen, neben /termin/absagen, und die Mail verlinkt die neue Adresse. Weil die Buchung seit Meilenstein 3 eine neue Form hat, kommen ConfirmedAt und die Regel in Pull Request 1 mit ihr noch einmal vor, genauer als in Lektion 2.8.5. Heißen Ihre Dateien, Klassen oder Ordner anders, behalten Sie Ihre Namen und übertragen Sie die Schritte.