mirror of
https://github.com/tomru/pfadi-bussle.git
synced 2026-03-04 15:07:13 +01:00
also add mail when user cancels
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user