From 2174885f5a64011f1235880c6c93c46e27ccaac1 Mon Sep 17 00:00:00 2001 From: Thomas Ruoff Date: Sat, 27 Feb 2021 23:51:44 +0100 Subject: [PATCH] fix days validation on updating booking days validation needs to ignore own days --- db/booking.ts | 11 ++++++++--- db/index.ts | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/db/booking.ts b/db/booking.ts index 731ce7f..2fb585e 100644 --- a/db/booking.ts +++ b/db/booking.ts @@ -26,7 +26,7 @@ export interface BookingDocument mongoose.SchemaTimestampsConfig {} export interface BookingModel extends mongoose.Model { - findBookedDays(): Promise + findBookedDays(uuidsToIngore?: string[]): Promise } const BookingSchema = new mongoose.Schema( @@ -74,7 +74,9 @@ const BookingSchema = new mongoose.Schema( required: true, validate: { validator: async function (days: string[]) { - const bookedDays = await getBookedDays() + const booking = this as Booking + const uuid = booking.uuid && [booking.uuid] + const bookedDays = await getBookedDays(uuid) const doubleBookedDays = days.filter((day: string) => bookedDays.includes(day) @@ -112,13 +114,16 @@ BookingSchema.pre('validate', function (next: () => void) { next() }) -BookingSchema.static('findBookedDays', async function (): Promise { +BookingSchema.static('findBookedDays', async function ( + uuidsToIngore: string[] = [] +): Promise { const model = this as BookingModel const now = nowInTz() const bookedDays = await model .find( { status: { $in: [BOOKING_STATUS.REQUESTED, BOOKING_STATUS.CONFIRMED] }, + uuid: { $nin: uuidsToIngore }, // dateFormatBackend uses YYYY-MM-DD, which is startOfDay anyway endDate: { $gt: dateFormatBackend(now) }, }, diff --git a/db/index.ts b/db/index.ts index 621980c..b4e0679 100644 --- a/db/index.ts +++ b/db/index.ts @@ -20,9 +20,9 @@ function connect() { return connectedPromise } -export async function getBookedDays() { +export async function getBookedDays(uuidsToIngore?: string[]) { await connect() - return BookingModel.findBookedDays() + return BookingModel.findBookedDays(uuidsToIngore) } export async function getBookingByUUID(uuid: string) {