Fixed #598 - handleLegacyConfirmationMail (#601)

Co-authored-by: Bailey Pumfleet <pumfleet@hey.com>
This commit is contained in:
Alex van Andel 2021-09-08 12:21:19 +01:00 committed by GitHub
parent a9a6d69ba6
commit aff45e3451
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 33 deletions

View file

@ -1,6 +1,5 @@
import EventOrganizerMail from "./emails/EventOrganizerMail"; import EventOrganizerMail from "./emails/EventOrganizerMail";
import EventOrganizerRescheduledMail from "./emails/EventOrganizerRescheduledMail"; import EventOrganizerRescheduledMail from "./emails/EventOrganizerRescheduledMail";
import EventAttendeeRescheduledMail from "./emails/EventAttendeeRescheduledMail";
import prisma from "./prisma"; import prisma from "./prisma";
import { Credential } from "@prisma/client"; import { Credential } from "@prisma/client";
import CalEventParser from "./CalEventParser"; import CalEventParser from "./CalEventParser";
@ -616,20 +615,11 @@ const updateEvent = async (
if (!noMail) { if (!noMail) {
const organizerMail = new EventOrganizerRescheduledMail(calEvent, newUid); const organizerMail = new EventOrganizerRescheduledMail(calEvent, newUid);
const attendeeMail = new EventAttendeeRescheduledMail(calEvent, newUid);
try { try {
await organizerMail.sendEmail(); await organizerMail.sendEmail();
} catch (e) { } catch (e) {
console.error("organizerMail.sendEmail failed", e); console.error("organizerMail.sendEmail failed", e);
} }
if (!updateResult || !updateResult.disableConfirmationEmail) {
try {
await attendeeMail.sendEmail();
} catch (e) {
console.error("attendeeMail.sendEmail failed", e);
}
}
} }
return { return {

View file

@ -7,6 +7,7 @@ import { LocationType } from "@lib/location";
import { v5 as uuidv5 } from "uuid"; import { v5 as uuidv5 } from "uuid";
import merge from "lodash.merge"; import merge from "lodash.merge";
import EventAttendeeMail from "@lib/emails/EventAttendeeMail"; import EventAttendeeMail from "@lib/emails/EventAttendeeMail";
import EventAttendeeRescheduledMail from "@lib/emails/EventAttendeeRescheduledMail";
export interface EventResult { export interface EventResult {
type: string; type: string;
@ -70,21 +71,7 @@ export default class EventManager {
if (isDedicated) { if (isDedicated) {
results.push(await this.createVideoEvent(event, maybeUid)); results.push(await this.createVideoEvent(event, maybeUid));
} else { } else {
if (!results.length || !results.some((eRes) => eRes.createdEvent.disableConfirmationEmail)) { await this.sendAttendeeMail("new", results, event, maybeUid);
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);
}
}
} }
const referencesToCreate: Array<PartialReference> = results.map((result) => { const referencesToCreate: Array<PartialReference> = 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 and only if event type is a dedicated meeting, update the dedicated video meeting as well.
if (isDedicated) { if (isDedicated) {
results.push(await this.updateVideoEvent(event, booking)); 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. // Now we can delete the old booking and its references.
@ -319,4 +308,33 @@ export default class EventManager {
return event; 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);
}
}
}
} }

View file

@ -1,7 +1,6 @@
import type { NextApiRequest, NextApiResponse } from "next"; import type { NextApiRequest, NextApiResponse } from "next";
import { getSession } from "@lib/auth"; import { getSession } from "@lib/auth";
import prisma from "../../../lib/prisma"; import prisma from "../../../lib/prisma";
import { handleLegacyConfirmationMail } from "./[user]";
import { CalendarEvent } from "@lib/calendarClient"; import { CalendarEvent } from "@lib/calendarClient";
import EventRejectionMail from "@lib/emails/EventRejectionMail"; import EventRejectionMail from "@lib/emails/EventRejectionMail";
import EventManager from "@lib/events/EventManager"; 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 eventManager = new EventManager(currentUser.credentials);
const scheduleResult = await eventManager.create(evt, booking.uid); const scheduleResult = await eventManager.create(evt, booking.uid);
await handleLegacyConfirmationMail(
scheduleResult.results,
{ requiresConfirmation: false },
evt,
booking.uid
);
await prisma.booking.update({ await prisma.booking.update({
where: { where: {
id: bookingId, id: bookingId,