fix sending reject and confirmation mails

This commit is contained in:
Thomas Ruoff
2022-04-07 23:51:03 +02:00
parent ef11284c94
commit 0cdee14d18
2 changed files with 37 additions and 4 deletions

View File

@@ -84,13 +84,14 @@ export async function createBooking({
export async function patchBooking(
bookingUUID: string,
bookingData: Booking
): Promise<Booking> {
): Promise<{ current: Booking; previous: Booking }> {
await connect()
const booking = await getBookingByUUID(bookingUUID)
const oldBooking = booking.toJSON()
booking.set(bookingData)
await booking.save()
return booking.toJSON()
return { current: booking.toJSON(), previous: oldBooking }
}
export async function createBill(

View File

@@ -1,6 +1,30 @@
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,
} from '../../../../helpers/mail'
function changedStatus(
booking: Booking,
updates: Partial<Booking>,
status: BOOKING_STATUS
): boolean {
return (
[BOOKING_STATUS.REQUESTED].includes(booking.status) &&
updates.status === status
)
}
function wasRejected(booking: Booking, updates: Partial<Booking>): boolean {
return changedStatus(booking, updates, BOOKING_STATUS.REJECTED)
}
function wasConfirmed(booking: Booking, updates: Partial<Booking>): boolean {
return changedStatus(booking, updates, BOOKING_STATUS.CONFIRMED)
}
export default async function userHandler(
req: NextApiRequest,
@@ -27,8 +51,16 @@ export default async function userHandler(
}
try {
const booking = await patchBooking(uuid, req.body)
res.status(200).json(booking)
const { current, previous } = await patchBooking(uuid, req.body)
// TODO: this should really go into the schema
if (wasRejected(previous, current)) {
sendBookingRejected(current)
} else if (wasConfirmed(previous, current)) {
sendBookingConfirmed(current)
}
res.status(200).json(current)
} catch (error) {
console.error('failed patch booking', error)
res.status(400).end(`Failed to save booking: ${error.message}`)