From 46266781b5d373dee9dbe3c99c41391787835dce Mon Sep 17 00:00:00 2001 From: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Date: Tue, 12 Jul 2022 09:16:34 -0400 Subject: [PATCH] Update calendar when new attendees are added to bookings w/ seats (#3257) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Omar López Co-authored-by: Alex van Andel --- apps/web/pages/api/book/event.ts | 22 +++++++++++++++++++--- packages/core/EventManager.ts | 6 +++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/apps/web/pages/api/book/event.ts b/apps/web/pages/api/book/event.ts index da9ca8794b..5b2fd3b5cc 100644 --- a/apps/web/pages/api/book/event.ts +++ b/apps/web/pages/api/book/event.ts @@ -234,6 +234,7 @@ async function handler(req: NextApiRequest) { !eventTypeId && !!eventTypeSlug ? getDefaultEvent(eventTypeSlug) : await getEventTypesFromDB(eventTypeId); if (!eventType) throw new HttpError({ statusCode: 404, message: "eventType.notFound" }); + let user: User | null = null; let users = !eventTypeId ? await prisma.user.findMany({ where: { @@ -362,8 +363,19 @@ async function handler(req: NextApiRequest) { where: { uid: reqBody.bookingUid, }, - include: { + select: { + id: true, attendees: true, + references: { + select: { + type: true, + uid: true, + meetingId: true, + meetingPassword: true, + meetingUrl: true, + externalCalendarId: true, + }, + }, }, }); if (!booking) throw new HttpError({ statusCode: 404, message: "Booking not found" }); @@ -401,6 +413,11 @@ async function handler(req: NextApiRequest) { await sendScheduledSeatsEmails(evt, invitee[0], newSeat); + user = users[0]; + const credentials = await refreshCredentials(user.credentials); + const eventManager = new EventManager({ ...user, credentials }); + await eventManager.updateCalendarAttendees(evt, booking); + req.statusCode = 201; return booking; } @@ -577,7 +594,6 @@ async function handler(req: NextApiRequest) { let results: EventResult[] = []; let referencesToCreate: PartialReference[] = []; - let user: User | null = null; /** Let's start checking for availability */ for (const currentUser of users) { @@ -683,7 +699,7 @@ async function handler(req: NextApiRequest) { if (originalRescheduledBooking?.uid) { // Use EventManager to conditionally use all needed integrations. - const updateManager = await eventManager.update( + const updateManager = await eventManager.reschedule( evt, originalRescheduledBooking.uid, booking?.id, diff --git a/packages/core/EventManager.ts b/packages/core/EventManager.ts index 9bc0485255..aebfaf4dc7 100644 --- a/packages/core/EventManager.ts +++ b/packages/core/EventManager.ts @@ -156,7 +156,7 @@ export default class EventManager { * * @param event */ - public async update( + public async reschedule( event: CalendarEvent, rescheduleUid: string, newBookingId?: number, @@ -266,6 +266,10 @@ export default class EventManager { }; } + public async updateCalendarAttendees(event: CalendarEvent, booking: PartialBooking) { + await this.updateAllCalendarEvents(event, booking); + } + /** * Creates event entries for all calendar integrations given in the credentials. * When noMail is true, no mails will be sent. This is used when the event is