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( export async function patchBooking(
bookingUUID: string, bookingUUID: string,
bookingData: Booking bookingData: Booking
): Promise<Booking> { ): Promise<{ current: Booking; previous: Booking }> {
await connect() await connect()
const booking = await getBookingByUUID(bookingUUID) const booking = await getBookingByUUID(bookingUUID)
const oldBooking = booking.toJSON()
booking.set(bookingData) booking.set(bookingData)
await booking.save() await booking.save()
return booking.toJSON() return { current: booking.toJSON(), previous: oldBooking }
} }
export async function createBill( export async function createBill(

View File

@@ -1,6 +1,30 @@
import { NextApiRequest, NextApiResponse } from 'next' import { NextApiRequest, NextApiResponse } from 'next'
import Book from '../../../../components/book'
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 {
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( export default async function userHandler(
req: NextApiRequest, req: NextApiRequest,
@@ -27,8 +51,16 @@ export default async function userHandler(
} }
try { try {
const booking = await patchBooking(uuid, req.body) const { current, previous } = await patchBooking(uuid, req.body)
res.status(200).json(booking)
// 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) { } catch (error) {
console.error('failed patch booking', error) console.error('failed patch booking', error)
res.status(400).end(`Failed to save booking: ${error.message}`) res.status(400).end(`Failed to save booking: ${error.message}`)