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ägtName,EmailundRequestedAt; Termin und Viertelstunden speichertEfBookingStore.AddAsyncin 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
IMailSendermit der Umsetzung für einen Ordner. - Der Bestätigungslink aus Lektion 2.8.5 läuft nach 24 Stunden ab. Er ist mit
ITimeLimitedDataProtectorgeschützt und führt auf/buchung/bestaetigen. Die Seite fragt, erst der Knopf bestätigt die Buchung mit einem POST, und/buchung/bestaetigtzeigt das Ergebnis. Die Buchung kennt dafürConfirmedAtundConfirm.
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.