fix: scheduling/canceling workflow emails in cron api call (#13123)

* set credentials for sendgrid client on all requests

* fix typo

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
This commit is contained in:
Carina Wollendorfer 2024-01-10 11:44:37 -05:00 committed by GitHub
parent 6a2de993bb
commit dfaa6d28e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 27 deletions

View File

@ -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<any>[] = [];
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<any>[] = [];
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({

View File

@ -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",
});
}