From 7f13a0063f6faf9eac4472eb931a98728b2a340b Mon Sep 17 00:00:00 2001 From: Thomas Ruoff Date: Fri, 8 Apr 2022 00:01:52 +0200 Subject: [PATCH] also add mail when user cancels --- helpers/mail.ts | 31 +++++++++++++++++++++++++++++- pages/api/bookings/[uuid]/index.ts | 28 ++++++++++++++++++--------- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/helpers/mail.ts b/helpers/mail.ts index c829c38..23a6dee 100644 --- a/helpers/mail.ts +++ b/helpers/mail.ts @@ -64,10 +64,11 @@ einsehen und stornieren. ${footer} ` } + function getBookingRejectedText(booking: Booking): string { return `Hallo liebe/r ${booking.name}, -es tut uns leid aber deine Buchungsanfrage zum ${daysFormatFrontend( +es tut uns leid, aber deine Buchungsanfrage zum ${daysFormatFrontend( booking.days )} konnten wir leider nicht bestätigen. @@ -78,6 +79,18 @@ ${footer} ` } +function getBookingCanceledText(booking: Booking): string { + return `Hallo liebe/r ${booking.name}, + +deine Buchungsanfrage zum ${daysFormatFrontend(booking.days)} wurde storniert. + +Willst du das Bussle an einem anderen Termin buchen? Dann stelle bitte nochmal +eine Buchungsanfrage auf ${getBaseURL()}. + +${footer} +` +} + function getReceivedBookingAdminText(booking: { uuid: string }): string { return `Hallo lieber Admin, @@ -163,6 +176,22 @@ export async function sendBookingRejected(booking: Booking): Promise { } } +export async function sendBookingCanceled(booking: Booking): Promise { + try { + await sendMail({ + to: [{ email: booking.email, name: booking.name }], + from: { email: FROM_EMAIL, name: 'Pfadi-Bussle Wart' }, + subject: `Deine Pfadi-Bussle Buchung wurde storniert!`, + textPlainContent: getBookingCanceledText(booking), + }) + } catch (error) { + console.error( + `Failed in sendBookingCanceledMail for ${booking.uuid}`, + error + ) + } +} + async function sendMail({ to, from, diff --git a/pages/api/bookings/[uuid]/index.ts b/pages/api/bookings/[uuid]/index.ts index fef9a01..6b9d80d 100644 --- a/pages/api/bookings/[uuid]/index.ts +++ b/pages/api/bookings/[uuid]/index.ts @@ -1,29 +1,37 @@ import { NextApiRequest, NextApiResponse } from 'next' -import Book from '../../../../components/book' import { Booking } from '../../../../db/booking' import { BOOKING_STATUS } from '../../../../db/enums' import { patchBooking } from '../../../../db/index' import { sendBookingConfirmed, sendBookingRejected, + sendBookingCanceled, } from '../../../../helpers/mail' function changedStatus( - booking: Booking, - updates: Partial, + previous: Booking, + current: Partial, status: BOOKING_STATUS ): boolean { return ( - [BOOKING_STATUS.REQUESTED].includes(booking.status) && - updates.status === status + [BOOKING_STATUS.REQUESTED].includes(previous.status) && + current.status === status ) } -function wasRejected(booking: Booking, updates: Partial): boolean { - return changedStatus(booking, updates, BOOKING_STATUS.REJECTED) +function wasRejected(previous: Booking, current: Partial): boolean { + return changedStatus(previous, current, BOOKING_STATUS.REJECTED) } -function wasConfirmed(booking: Booking, updates: Partial): boolean { - return changedStatus(booking, updates, BOOKING_STATUS.CONFIRMED) +function wasConfirmed(previous: Booking, current: Partial): boolean { + return changedStatus(previous, current, BOOKING_STATUS.CONFIRMED) +} + +function wasCanceled(previous: Booking, current: Partial): boolean { + return ( + [BOOKING_STATUS.REQUESTED, BOOKING_STATUS.CONFIRMED].includes( + previous.status + ) && current.status === BOOKING_STATUS.CANCELED + ) } export default async function userHandler( @@ -58,6 +66,8 @@ export default async function userHandler( sendBookingRejected(current) } else if (wasConfirmed(previous, current)) { sendBookingConfirmed(current) + } else if (wasCanceled(previous, current)) { + sendBookingCanceled(current) } res.status(200).json(current)