From 5143083efb2a7ed9d194524005dd45db9ef1a665 Mon Sep 17 00:00:00 2001 From: "cal.com" Date: Fri, 5 Dec 2025 22:00:33 +0200 Subject: [PATCH] perf: handleChildrenEventType update existing events without mapping --- .../lib/handleChildrenEventTypes.ts | 94 ++++++++++--------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/packages/features/ee/managed-event-types/lib/handleChildrenEventTypes.ts b/packages/features/ee/managed-event-types/lib/handleChildrenEventTypes.ts index 0cf0994734..48650851bc 100644 --- a/packages/features/ee/managed-event-types/lib/handleChildrenEventTypes.ts +++ b/packages/features/ee/managed-event-types/lib/handleChildrenEventTypes.ts @@ -276,56 +276,58 @@ export default async function handleChildrenEventTypes({ const updatePayloadFiltered = Object.entries(updatePayload) .filter(([key, _]) => key !== "children") .reduce((newObj, [key, value]) => ({ ...newObj, [key]: value }), {}); + // Update event types for old users - const oldEventTypes = await Promise.all( - oldUserIds.map(async (userId) => { - const existingEventType = await prisma.eventType.findUnique({ - where: { - userId_parentId: { - userId, - parentId, - }, - }, - select: { - metadata: true, - }, - }); + const oldEventTypes = await prisma.eventType.findMany({ + where: { + parentId: parentId, + userId: { in: oldUserIds }, + }, + select: { + id: true, + metadata: true, + userId: true, + parentId: true, + }, + }); - const metadata = eventTypeMetaDataSchemaWithTypedApps.parse(existingEventType?.metadata || {}); + const updatedOldEventTypesData = oldEventTypes.map((et) => { + const metadata = eventTypeMetaDataSchemaWithTypedApps.parse(et?.metadata || {}); - return await prisma.eventType.update({ - where: { - userId_parentId: { - userId, - parentId, - }, - }, - data: { - ...updatePayloadFiltered, - hidden: children?.find((ch) => ch.owner.id === userId)?.hidden ?? false, - ...("schedule" in unlockedFieldProps ? {} : { scheduleId: eventType.scheduleId || null }), - restrictionScheduleId: null, - useBookerTimezone: false, - hashedLink: - "multiplePrivateLinks" in unlockedFieldProps - ? undefined - : { - deleteMany: {}, - }, - allowReschedulingCancelledBookings: - managedEventTypeValues.allowReschedulingCancelledBookings ?? false, - metadata: { - ...(eventType.metadata as Prisma.JsonObject), - ...(metadata?.multipleDuration && "length" in unlockedFieldProps - ? { multipleDuration: metadata.multipleDuration } - : {}), - ...(metadata?.apps && "apps" in unlockedFieldProps ? { apps: metadata.apps } : {}), - }, - }, - }); - }) - ); + return { + ...updatePayloadFiltered, + hidden: children?.find((ch) => ch.owner.id === et.userId)?.hidden ?? false, + ...("schedule" in unlockedFieldProps ? {} : { scheduleId: eventType.scheduleId || null }), + restrictionScheduleId: null, + useBookerTimezone: false, + hashedLink: + "multiplePrivateLinks" in unlockedFieldProps + ? undefined + : { + deleteMany: {}, + }, + allowReschedulingCancelledBookings: + managedEventTypeValues.allowReschedulingCancelledBookings ?? false, + metadata: { + ...(eventType.metadata as Prisma.JsonObject), + ...(metadata?.multipleDuration && "length" in unlockedFieldProps + ? { multipleDuration: metadata.multipleDuration } + : {}), + ...(metadata?.apps && "apps" in unlockedFieldProps ? { apps: metadata.apps } : {}), + }, + }; + }); + // Update old event types data + await prisma.eventType.updateMany({ + where: { + userId: { in: oldUserIds }, + parentId: parentId, + }, + data: updatedOldEventTypesData, + }); + + // create workflows for old users if new workflows were added if (currentWorkflowIds?.length) { await prisma.$transaction( currentWorkflowIds.flatMap((wfId) => {