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} ${footer}
` `
} }
function getBookingRejectedText(booking: Booking): string { function getBookingRejectedText(booking: Booking): string {
return `Hallo liebe/r ${booking.name}, 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 booking.days
)} konnten wir leider nicht bestätigen. )} 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 { function getReceivedBookingAdminText(booking: { uuid: string }): string {
return `Hallo lieber Admin, 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({ async function sendMail({
to, to,
from, from,

View File

@@ -1,29 +1,37 @@
import { NextApiRequest, NextApiResponse } from 'next' import { NextApiRequest, NextApiResponse } from 'next'
import Book from '../../../../components/book'
import { Booking } from '../../../../db/booking' import { Booking } from '../../../../db/booking'
import { BOOKING_STATUS } from '../../../../db/enums' import { BOOKING_STATUS } from '../../../../db/enums'
import { patchBooking } from '../../../../db/index' import { patchBooking } from '../../../../db/index'
import { import {
sendBookingConfirmed, sendBookingConfirmed,
sendBookingRejected, sendBookingRejected,
sendBookingCanceled,
} from '../../../../helpers/mail' } from '../../../../helpers/mail'
function changedStatus( function changedStatus(
booking: Booking, previous: Booking,
updates: Partial<Booking>, current: Partial<Booking>,
status: BOOKING_STATUS status: BOOKING_STATUS
): boolean { ): boolean {
return ( return (
[BOOKING_STATUS.REQUESTED].includes(booking.status) && [BOOKING_STATUS.REQUESTED].includes(previous.status) &&
updates.status === status current.status === status
) )
} }
function wasRejected(booking: Booking, updates: Partial<Booking>): boolean { function wasRejected(previous: Booking, current: Partial<Booking>): boolean {
return changedStatus(booking, updates, BOOKING_STATUS.REJECTED) return changedStatus(previous, current, BOOKING_STATUS.REJECTED)
} }
function wasConfirmed(booking: Booking, updates: Partial<Booking>): boolean { function wasConfirmed(previous: Booking, current: Partial<Booking>): boolean {
return changedStatus(booking, updates, BOOKING_STATUS.CONFIRMED) 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( export default async function userHandler(
@@ -58,6 +66,8 @@ export default async function userHandler(
sendBookingRejected(current) sendBookingRejected(current)
} else if (wasConfirmed(previous, current)) { } else if (wasConfirmed(previous, current)) {
sendBookingConfirmed(current) sendBookingConfirmed(current)
} else if (wasCanceled(previous, current)) {
sendBookingCanceled(current)
} }
res.status(200).json(current) res.status(200).json(current)