From 0cdee14d1879a5ddfdf52d9eb850b7e5d29047fe Mon Sep 17 00:00:00 2001 From: Thomas Ruoff Date: Thu, 7 Apr 2022 23:51:03 +0200 Subject: [PATCH] fix sending reject and confirmation mails --- db/index.ts | 5 +++-- pages/api/bookings/[uuid]/index.ts | 36 ++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/db/index.ts b/db/index.ts index 98acf42..e61364d 100644 --- a/db/index.ts +++ b/db/index.ts @@ -84,13 +84,14 @@ export async function createBooking({ export async function patchBooking( bookingUUID: string, bookingData: Booking -): Promise { +): 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( diff --git a/pages/api/bookings/[uuid]/index.ts b/pages/api/bookings/[uuid]/index.ts index a39064c..fef9a01 100644 --- a/pages/api/bookings/[uuid]/index.ts +++ b/pages/api/bookings/[uuid]/index.ts @@ -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, + status: BOOKING_STATUS +): boolean { + return ( + [BOOKING_STATUS.REQUESTED].includes(booking.status) && + updates.status === status + ) +} +function wasRejected(booking: Booking, updates: Partial): boolean { + return changedStatus(booking, updates, BOOKING_STATUS.REJECTED) +} + +function wasConfirmed(booking: Booking, updates: Partial): 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}`)