From 0b01219b79e2b06800c5ff95956279de8a96e483 Mon Sep 17 00:00:00 2001 From: Keith Williams Date: Thu, 1 Feb 2024 12:24:14 -0300 Subject: [PATCH] perf: Don't process date overrides outside of requested boundaries --- packages/lib/date-ranges.ts | 2 +- packages/trpc/server/routers/viewer/slots/util.ts | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/lib/date-ranges.ts b/packages/lib/date-ranges.ts index fabd7cb5c7f828..d0a486356f1b1b 100644 --- a/packages/lib/date-ranges.ts +++ b/packages/lib/date-ranges.ts @@ -106,7 +106,7 @@ export function buildDateRanges({ ); const groupedDateOverrides = groupByDate( availability.reduce((processed: DateRange[], item) => { - if ("date" in item && !!item.date) { + if ("date" in item && !!item.date && item.date >= dateFrom && item.date <= dateTo) { processed.push(processDateOverride({ item, timeZone })); } return processed; diff --git a/packages/trpc/server/routers/viewer/slots/util.ts b/packages/trpc/server/routers/viewer/slots/util.ts index dadaac65de7d56..8e5dd87cf22e65 100644 --- a/packages/trpc/server/routers/viewer/slots/util.ts +++ b/packages/trpc/server/routers/viewer/slots/util.ts @@ -387,7 +387,7 @@ export async function getAvailableSlots({ input, ctx }: GetScheduleOptions) { }); /* We get all users working hours and busy slots */ - const userAvailability = await Promise.all( + const allUsersAvailability = await Promise.all( usersWithCredentials.map(async (currentUser) => { const { busy, @@ -448,15 +448,17 @@ export async function getAvailableSlots({ input, ctx }: GetScheduleOptions) { const checkForAvailabilityTime = 0; const getSlotsCount = 0; const checkForAvailabilityCount = 0; + const aggregatedAvailability = getAggregatedAvailability(allUsersAvailability, eventType.schedulingType); const timeSlots = getSlots({ inviteeDate: startTime, eventLength: input.duration || eventType.length, offsetStart: eventType.offsetStart, - dateRanges: getAggregatedAvailability(userAvailability, eventType.schedulingType), + dateRanges: aggregatedAvailability, minimumBookingNotice: eventType.minimumBookingNotice, frequency: eventType.slotInterval || input.duration || eventType.length, - organizerTimeZone: eventType.timeZone || eventType?.schedule?.timeZone || userAvailability?.[0]?.timeZone, + organizerTimeZone: + eventType.timeZone || eventType?.schedule?.timeZone || allUsersAvailability?.[0]?.timeZone, }); let availableTimeSlots: typeof timeSlots = [];