From e5f15cb1df4908e3d3209ce1d772248bcdeac30e Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Tue, 8 Aug 2023 03:03:01 +0100 Subject: [PATCH] perf: Improved buildDateRanges performance + cleanup (#10610) Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> --- packages/core/getAggregatedAvailability.ts | 5 +---- packages/lib/date-ranges.ts | 2 +- packages/trpc/server/routers/viewer/slots/util.ts | 12 ------------ 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/packages/core/getAggregatedAvailability.ts b/packages/core/getAggregatedAvailability.ts index 5311383d56..37b32b6970 100644 --- a/packages/core/getAggregatedAvailability.ts +++ b/packages/core/getAggregatedAvailability.ts @@ -3,10 +3,7 @@ import { intersect } from "@calcom/lib/date-ranges"; import { SchedulingType } from "@calcom/prisma/enums"; export const getAggregatedAvailability = ( - userAvailability: (Omit< - Awaited["getUserAvailability"]>>, - "currentSeats" - > & { user?: { isFixed?: boolean } })[], + userAvailability: { dateRanges: DateRange[]; user?: { isFixed?: boolean } }[], schedulingType: SchedulingType | null ): DateRange[] => { const fixedHosts = userAvailability.filter( diff --git a/packages/lib/date-ranges.ts b/packages/lib/date-ranges.ts index ee26ebdb39..3587df9291 100644 --- a/packages/lib/date-ranges.ts +++ b/packages/lib/date-ranges.ts @@ -93,7 +93,7 @@ export function buildDateRanges({ ...groupedDateOverrides, }).map( // remove 0-length overrides that were kept to cancel out working dates until now. - (ranges) => ranges.filter((range) => !range.start.isSame(range.end)) + (ranges) => ranges.filter((range) => range.start.valueOf() !== range.end.valueOf()) ); return dateRanges.flat(); diff --git a/packages/trpc/server/routers/viewer/slots/util.ts b/packages/trpc/server/routers/viewer/slots/util.ts index 37a708ab48..0526413d8f 100644 --- a/packages/trpc/server/routers/viewer/slots/util.ts +++ b/packages/trpc/server/routers/viewer/slots/util.ts @@ -1,7 +1,6 @@ import { countBy } from "lodash"; import { v4 as uuid } from "uuid"; -import { getAggregateWorkingHours } from "@calcom/core/getAggregateWorkingHours"; import { getAggregatedAvailability } from "@calcom/core/getAggregatedAvailability"; import type { CurrentSeats } from "@calcom/core/getUserAvailability"; import { getUserAvailability } from "@calcom/core/getUserAvailability"; @@ -229,8 +228,6 @@ export async function getAvailableSlots(input: TGetScheduleInputSchema) { usersWithCredentials.map(async (currentUser) => { const { busy, - workingHours, - dateOverrides, dateRanges, currentSeats: _currentSeats, timeZone, @@ -254,8 +251,6 @@ export async function getAvailableSlots(input: TGetScheduleInputSchema) { if (!currentSeats && _currentSeats) currentSeats = _currentSeats; return { timeZone, - workingHours, - dateOverrides, dateRanges, busy, user: currentUser, @@ -263,11 +258,6 @@ export async function getAvailableSlots(input: TGetScheduleInputSchema) { }) ); - // flattens availability of multiple users - const dateOverrides = userAvailability.flatMap((availability) => - availability.dateOverrides.map((override) => ({ userId: availability.user.id, ...override })) - ); - const workingHours = getAggregateWorkingHours(userAvailability, eventType.schedulingType); const availabilityCheckProps = { eventLength: input.duration || eventType.length, currentSeats, @@ -290,8 +280,6 @@ export async function getAvailableSlots(input: TGetScheduleInputSchema) { const timeSlots = getSlots({ inviteeDate: startTime, eventLength: input.duration || eventType.length, - workingHours, - dateOverrides, offsetStart: eventType.offsetStart, dateRanges: getAggregatedAvailability(userAvailability, eventType.schedulingType), minimumBookingNotice: eventType.minimumBookingNotice,