diff --git a/packages/features/ee/workflows/api/scheduleEmailReminders.ts b/packages/features/ee/workflows/api/scheduleEmailReminders.ts index 8dec83f79e..0c48d8ff27 100644 --- a/packages/features/ee/workflows/api/scheduleEmailReminders.ts +++ b/packages/features/ee/workflows/api/scheduleEmailReminders.ts @@ -1,5 +1,4 @@ /* Schedule any workflow reminder that falls within 72 hours for email */ -import client from "@sendgrid/client"; import type { NextApiRequest, NextApiResponse } from "next"; import { v4 as uuidv4 } from "uuid"; @@ -19,7 +18,12 @@ import { getAllUnscheduledReminders, } from "../lib/getWorkflowReminders"; import { getiCalEventAsString } from "../lib/getiCalEventAsString"; -import { sendSendgridMail } from "../lib/reminders/providers/sendgridProvider"; +import { + cancelScheduledEmail, + deleteScheduledSend, + getBatchId, + sendSendgridMail, +} from "../lib/reminders/providers/sendgridProvider"; import type { VariablesType } from "../lib/reminders/templates/customTemplate"; import customTemplate from "../lib/reminders/templates/customTemplate"; import emailReminderTemplate from "../lib/reminders/templates/emailReminderTemplate"; @@ -42,10 +46,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { const deletePromises: Promise[] = []; for (const reminder of remindersToDelete) { - const deletePromise = client.request({ - url: `/v3/user/scheduled_sends/${reminder.referenceId}`, - method: "DELETE", - }); + const deletePromise = deleteScheduledSend(reminder.referenceId); deletePromises.push(deletePromise); } @@ -73,14 +74,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { const cancelUpdatePromises: Promise[] = []; for (const reminder of remindersToCancel) { - const cancelPromise = client.request({ - url: "/v3/user/scheduled_sends", - method: "POST", - body: { - batch_id: reminder.referenceId, - status: "cancel", - }, - }); + const cancelPromise = cancelScheduledEmail(reminder.referenceId); const updatePromise = prisma.workflowReminder.update({ where: { @@ -222,12 +216,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { } if (emailContent.emailSubject.length > 0 && !emailBodyEmpty && sendTo) { - const batchIdResponse = await client.request({ - url: "/v3/mail/batch", - method: "POST", - }); - - const batchId = batchIdResponse[1].batch_id; + const batchId = await getBatchId(); if (reminder.workflowStep.action !== WorkflowActions.EMAIL_ADDRESS) { sendEmailPromises.push( @@ -298,12 +287,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { !!reminder.booking.user?.hideBranding ); if (emailContent.emailSubject.length > 0 && !emailBodyEmpty && sendTo) { - const batchIdResponse = await client.request({ - url: "/v3/mail/batch", - method: "POST", - }); - - const batchId = batchIdResponse[1].batch_id; + const batchId = await getBatchId(); sendEmailPromises.push( sendSendgridMail( @@ -343,7 +327,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { }); }); - res.status(200).json({ message: `${unscheduledReminders.length} Emails scheduled` }); + res.status(200).json({ message: `${unscheduledReminders.length} Emails to schedule` }); } export default defaultHandler({ diff --git a/packages/features/ee/workflows/lib/reminders/providers/sendgridProvider.ts b/packages/features/ee/workflows/lib/reminders/providers/sendgridProvider.ts index f4ba166af8..b09bc046a3 100644 --- a/packages/features/ee/workflows/lib/reminders/providers/sendgridProvider.ts +++ b/packages/features/ee/workflows/lib/reminders/providers/sendgridProvider.ts @@ -77,3 +77,35 @@ export function sendSendgridMail( sendAt: mailData.sendAt, }); } + +export function cancelScheduledEmail(referenceId: string | null) { + if (!referenceId) { + console.info("No referenceId provided, skip canceling email"); + return Promise.resolve(); + } + + assertSendgrid(); + + return client.request({ + url: "/v3/user/scheduled_sends", + method: "POST", + body: { + batch_id: referenceId, + status: "cancel", + }, + }); +} + +export function deleteScheduledSend(referenceId: string | null) { + if (!referenceId) { + console.info("No referenceId provided, skip deleting scheduledSend"); + return Promise.resolve(); + } + + assertSendgrid(); + + return client.request({ + url: `/v3/user/scheduled_sends/${referenceId}`, + method: "DELETE", + }); +}