Co-authored-by: Bailey Pumfleet <pumfleet@hey.com>
This commit is contained in:
parent
a9a6d69ba6
commit
aff45e3451
3 changed files with 33 additions and 33 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue