diff --git a/db/booking.ts b/db/booking.ts index 104afc6..7e2c21f 100644 --- a/db/booking.ts +++ b/db/booking.ts @@ -64,6 +64,25 @@ BookingSchema.virtual('days').get(function () { return getDays({ startDate: this.startDate, endDate: this.endDate }) }) +BookingSchema.static('findBookedDays', async function (): string[] { + console.log('in findBookedDays this is', this) + const bookings = await this.find( + { + status: { $in: [BOOKING_STATUS.REQUESTED, BOOKING_STATUS.CONFIRMED] }, + $or: [ + { endDate: { $gt: new Date() } }, + { startDate: { $gt: new Date() } }, + ], + }, + 'startDate endDate' + ).exec() + + return bookings + .map((booking: Booking) => booking.days) + .flat() + .sort() +}) + const Model: mongoose.Model = mongoose.models.Booking || mongoose.model('Booking', BookingSchema) diff --git a/db/index.ts b/db/index.ts index e21dd67..4e3eb9d 100644 --- a/db/index.ts +++ b/db/index.ts @@ -20,22 +20,7 @@ function connect() { export async function getBookedDays() { await connect() - - const bookings = await Booking.find( - { - status: { $in: [BOOKING_STATUS.REQUESTED, BOOKING_STATUS.CONFIRMED] }, - $or: [ - { endDate: { $gt: new Date() } }, - { startDate: { $gt: new Date() } }, - ], - }, - 'startDate endDate' - ).exec() - - return bookings - .map((booking) => booking.days) - .flat() - .sort() + return Booking.findBookedDays() } export async function getBookingByUUID(uuid: string) { @@ -62,10 +47,7 @@ export async function createBooking({ if (booking.days.some((day: string) => bookedDays.includes(day))) { const error = new mongoose.Error.ValidationError(booking) - error.addError( - 'endDate', - 'At least on one day the van is not avaliable. Choose another startDate or endDate.' - ) + error.addError('endDate', new mongoose.Error.ValidatorError()) throw error }