also add mail when user cancels

This commit is contained in:
Thomas Ruoff
2022-04-08 00:01:52 +02:00
parent 0cdee14d18
commit 7f13a0063f
2 changed files with 49 additions and 10 deletions

View File

@@ -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<void> {
}
}
export async function sendBookingCanceled(booking: Booking): Promise<void> {
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,

View File

@@ -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<Booking>,
previous: Booking,
current: Partial<Booking>,
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<Booking>): boolean {
return changedStatus(booking, updates, BOOKING_STATUS.REJECTED)
function wasRejected(previous: Booking, current: Partial<Booking>): boolean {
return changedStatus(previous, current, BOOKING_STATUS.REJECTED)
}
function wasConfirmed(booking: Booking, updates: Partial<Booking>): boolean {
return changedStatus(booking, updates, BOOKING_STATUS.CONFIRMED)
function wasConfirmed(previous: Booking, current: Partial<Booking>): boolean {
return changedStatus(previous, current, BOOKING_STATUS.CONFIRMED)
}
function wasCanceled(previous: Booking, current: Partial<Booking>): 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)