From 29aad2c535a94dfdd02891cfe9aa9c079ca664bc Mon Sep 17 00:00:00 2001 From: Romit <85230081+romitg2@users.noreply.github.com> Date: Thu, 26 Jun 2025 03:26:32 +0530 Subject: [PATCH] fix: error because Seated slot reservations do not pass bookingUid (#22022) * fixed query * Update reserveSlot.handler.ts --------- Co-authored-by: Benny Joo --- .../routers/viewer/slots/reserveSlot.handler.ts | 13 ++++++++++--- packages/trpc/server/routers/viewer/slots/types.ts | 1 - 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/trpc/server/routers/viewer/slots/reserveSlot.handler.ts b/packages/trpc/server/routers/viewer/slots/reserveSlot.handler.ts index e730d4b2d1..22f27f1392 100644 --- a/packages/trpc/server/routers/viewer/slots/reserveSlot.handler.ts +++ b/packages/trpc/server/routers/viewer/slots/reserveSlot.handler.ts @@ -7,6 +7,7 @@ import { WEBAPP_URL } from "@calcom/lib/constants"; import { MINUTES_TO_BOOK } from "@calcom/lib/constants"; import { SelectedSlotsRepository } from "@calcom/lib/server/repository/selectedSlots"; import type { PrismaClient } from "@calcom/prisma"; +import { BookingStatus } from "@calcom/prisma/enums"; import { TRPCError } from "@trpc/server"; @@ -23,7 +24,8 @@ interface ReserveSlotOptions { export const reserveSlotHandler = async ({ ctx, input }: ReserveSlotOptions) => { const { prisma, req, res } = ctx; const uid = req?.cookies?.uid || uuid(); - const { slotUtcStartDate, slotUtcEndDate, eventTypeId, bookingUid, _isDryRun } = input; + + const { slotUtcStartDate, slotUtcEndDate, eventTypeId, _isDryRun } = input; const releaseAt = dayjs.utc().add(parseInt(MINUTES_TO_BOOK), "minutes").format(); const eventType = await prisma.eventType.findUnique({ where: { id: eventTypeId }, @@ -42,8 +44,13 @@ export const reserveSlotHandler = async ({ ctx, input }: ReserveSlotOptions) => // If this is a seated event then don't reserve a slot if (eventType.seatsPerTimeSlot) { // Check to see if this is the last attendee - const bookingWithAttendees = await prisma.booking.findUnique({ - where: { uid: bookingUid }, + const bookingWithAttendees = await prisma.booking.findFirst({ + where: { + eventTypeId, + startTime: slotUtcStartDate, + endTime: slotUtcEndDate, + status: BookingStatus.ACCEPTED, + }, select: { attendees: true }, }); const bookingAttendeesLength = bookingWithAttendees?.attendees?.length; diff --git a/packages/trpc/server/routers/viewer/slots/types.ts b/packages/trpc/server/routers/viewer/slots/types.ts index b6305474e5..d9a78e7ede 100644 --- a/packages/trpc/server/routers/viewer/slots/types.ts +++ b/packages/trpc/server/routers/viewer/slots/types.ts @@ -59,7 +59,6 @@ export const reserveSlotSchema = z slotUtcStartDate: z.string(), // endTime ISOString slotUtcEndDate: z.string(), - bookingUid: z.string().optional(), _isDryRun: z.boolean().optional(), }) .refine(