From 1251091300402d9bb8d1d3937e62850a4d9d2c59 Mon Sep 17 00:00:00 2001 From: Amit Sharma <74371312+Amit91848@users.noreply.github.com> Date: Mon, 17 Jun 2024 21:00:41 +0530 Subject: [PATCH] fix: Offer seats events invites everyone regardless their availability schedule (#15171) * fix: Offer seats events invites everyone regardless their availibility schedule * chore: add test * uncomment * remove timeout * only check when first seat --------- Co-authored-by: Peer Richelsen Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> --- apps/web/playwright/booking-pages.e2e.ts | 6 ++++- apps/web/playwright/fixtures/users.ts | 3 +++ .../features/bookings/lib/handleNewBooking.ts | 22 ++++++++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/apps/web/playwright/booking-pages.e2e.ts b/apps/web/playwright/booking-pages.e2e.ts index df3c1df958..371cc49f7f 100644 --- a/apps/web/playwright/booking-pages.e2e.ts +++ b/apps/web/playwright/booking-pages.e2e.ts @@ -484,13 +484,17 @@ testBothFutureAndLegacyRoutes.describe("Booking round robin event", () => { schedulingType: SchedulingType.ROUND_ROBIN, teamEventLength: 120, teammates: teamMatesObj, + seatsPerTimeSlot: 5, } ); const team = await testUser.getFirstTeamMembership(); await page.goto(`/team/${team.team.slug}`); }); - test("Does not book round robin host outside availability with date override", async ({ page, users }) => { + test("Does not book seated round robin host outside availability with date override", async ({ + page, + users, + }) => { const [testUser] = users.get(); await testUser.apiLogin(); diff --git a/apps/web/playwright/fixtures/users.ts b/apps/web/playwright/fixtures/users.ts index 75d69830ff..7c7834694a 100644 --- a/apps/web/playwright/fixtures/users.ts +++ b/apps/web/playwright/fixtures/users.ts @@ -91,6 +91,7 @@ const createTeamEventType = async ( teamEventTitle?: string; teamEventSlug?: string; teamEventLength?: number; + seatsPerTimeSlot?: number; } ) => { return await prisma.eventType.create({ @@ -120,6 +121,7 @@ const createTeamEventType = async ( title: scenario?.teamEventTitle ?? `${teamEventTitle}-team-id-${team.id}`, slug: scenario?.teamEventSlug ?? `${teamEventSlug}-team-id-${team.id}`, length: scenario?.teamEventLength ?? 30, + seatsPerTimeSlot: scenario?.seatsPerTimeSlot, }, }); }; @@ -253,6 +255,7 @@ export const createUsersFixture = ( isDnsSetup?: boolean; hasSubteam?: true; isUnpublished?: true; + seatsPerTimeSlot?: number; } = {} ) => { const _user = await prisma.user.create({ diff --git a/packages/features/bookings/lib/handleNewBooking.ts b/packages/features/bookings/lib/handleNewBooking.ts index 85bc9fbdee..4ab5fad3f5 100644 --- a/packages/features/bookings/lib/handleNewBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking.ts @@ -1258,9 +1258,29 @@ async function handler( } let luckyUserResponse; + let isFirstSeat = true; + + if (eventType.seatsPerTimeSlot) { + const booking = await prisma.booking.findFirst({ + where: { + OR: [ + { + uid: rescheduleUid || reqBody.bookingUid, + }, + { + eventTypeId: eventType.id, + startTime: new Date(dayjs(reqBody.start).utc().format()), + }, + ], + status: BookingStatus.ACCEPTED, + }, + }); + + if (booking) isFirstSeat = false; + } //checks what users are available - if (!eventType.seatsPerTimeSlot) { + if (isFirstSeat) { const eventTypeWithUsers: Awaited> & { users: IsFixedAwareUser[]; } = {