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:
parent
6a2de993bb
commit
dfaa6d28e4
|
@ -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({
|
||||
|
|
|
@ -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",
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user