From aff45e345139fa9a1f77a3aa8c46a13a391973f0 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Wed, 8 Sep 2021 12:21:19 +0100 Subject: [PATCH] Fixed #598 - handleLegacyConfirmationMail (#601) Co-authored-by: Bailey Pumfleet --- lib/calendarClient.ts | 10 -------- lib/events/EventManager.ts | 48 ++++++++++++++++++++++++++------------ pages/api/book/confirm.ts | 8 ------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/lib/calendarClient.ts b/lib/calendarClient.ts index 1e7aab36..e82d5325 100644 --- a/lib/calendarClient.ts +++ b/lib/calendarClient.ts @@ -1,6 +1,5 @@ import EventOrganizerMail from "./emails/EventOrganizerMail"; import EventOrganizerRescheduledMail from "./emails/EventOrganizerRescheduledMail"; -import EventAttendeeRescheduledMail from "./emails/EventAttendeeRescheduledMail"; import prisma from "./prisma"; import { Credential } from "@prisma/client"; import CalEventParser from "./CalEventParser"; @@ -616,20 +615,11 @@ const updateEvent = async ( if (!noMail) { const organizerMail = new EventOrganizerRescheduledMail(calEvent, newUid); - const attendeeMail = new EventAttendeeRescheduledMail(calEvent, newUid); try { await organizerMail.sendEmail(); } catch (e) { console.error("organizerMail.sendEmail failed", e); } - - if (!updateResult || !updateResult.disableConfirmationEmail) { - try { - await attendeeMail.sendEmail(); - } catch (e) { - console.error("attendeeMail.sendEmail failed", e); - } - } } return { diff --git a/lib/events/EventManager.ts b/lib/events/EventManager.ts index f4af4217..482d621c 100644 --- a/lib/events/EventManager.ts +++ b/lib/events/EventManager.ts @@ -7,6 +7,7 @@ import { LocationType } from "@lib/location"; import { v5 as uuidv5 } from "uuid"; import merge from "lodash.merge"; import EventAttendeeMail from "@lib/emails/EventAttendeeMail"; +import EventAttendeeRescheduledMail from "@lib/emails/EventAttendeeRescheduledMail"; export interface EventResult { type: string; @@ -70,21 +71,7 @@ export default class EventManager { if (isDedicated) { results.push(await this.createVideoEvent(event, maybeUid)); } else { - if (!results.length || !results.some((eRes) => eRes.createdEvent.disableConfirmationEmail)) { - const metadata: { hangoutLink?: string; conferenceData?: unknown; entryPoints?: unknown } = {}; - if (results.length) { - // TODO: Handle created event metadata more elegantly - metadata.hangoutLink = results[0].createdEvent?.hangoutLink; - metadata.conferenceData = results[0].createdEvent?.conferenceData; - metadata.entryPoints = results[0].createdEvent?.entryPoints; - } - const attendeeMail = new EventAttendeeMail(event, maybeUid, metadata); - try { - await attendeeMail.sendEmail(); - } catch (e) { - console.error("attendeeMail.sendEmail failed", e); - } - } + await this.sendAttendeeMail("new", results, event, maybeUid); } const referencesToCreate: Array = results.map((result) => { @@ -135,6 +122,8 @@ export default class EventManager { // If and only if event type is a dedicated meeting, update the dedicated video meeting as well. if (isDedicated) { results.push(await this.updateVideoEvent(event, booking)); + } else { + await this.sendAttendeeMail("reschedule", results, event, rescheduleUid); } // Now we can delete the old booking and its references. @@ -319,4 +308,33 @@ export default class EventManager { return event; } + + private async sendAttendeeMail(type: "new" | "reschedule", results, event, maybeUid) { + if ( + !results.length || + !results.some((eRes) => (eRes.createdEvent || eRes.updatedEvent).disableConfirmationEmail) + ) { + const metadata: { hangoutLink?: string; conferenceData?: unknown; entryPoints?: unknown } = {}; + if (results.length) { + // TODO: Handle created event metadata more elegantly + metadata.hangoutLink = results[0].createdEvent?.hangoutLink; + metadata.conferenceData = results[0].createdEvent?.conferenceData; + metadata.entryPoints = results[0].createdEvent?.entryPoints; + } + let attendeeMail; + switch (type) { + case "reschedule": + attendeeMail = new EventAttendeeRescheduledMail(event, maybeUid, metadata); + break; + case "new": + attendeeMail = new EventAttendeeMail(event, maybeUid, metadata); + break; + } + try { + await attendeeMail.sendEmail(); + } catch (e) { + console.error("attendeeMail.sendEmail failed", e); + } + } + } } diff --git a/pages/api/book/confirm.ts b/pages/api/book/confirm.ts index f84dd1ae..1dcf89bf 100644 --- a/pages/api/book/confirm.ts +++ b/pages/api/book/confirm.ts @@ -1,7 +1,6 @@ import type { NextApiRequest, NextApiResponse } from "next"; import { getSession } from "@lib/auth"; import prisma from "../../../lib/prisma"; -import { handleLegacyConfirmationMail } from "./[user]"; import { CalendarEvent } from "@lib/calendarClient"; import EventRejectionMail from "@lib/emails/EventRejectionMail"; import EventManager from "@lib/events/EventManager"; @@ -71,13 +70,6 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const eventManager = new EventManager(currentUser.credentials); const scheduleResult = await eventManager.create(evt, booking.uid); - await handleLegacyConfirmationMail( - scheduleResult.results, - { requiresConfirmation: false }, - evt, - booking.uid - ); - await prisma.booking.update({ where: { id: bookingId,