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 */
|
/* Schedule any workflow reminder that falls within 72 hours for email */
|
||||||
import client from "@sendgrid/client";
|
|
||||||
import type { NextApiRequest, NextApiResponse } from "next";
|
import type { NextApiRequest, NextApiResponse } from "next";
|
||||||
import { v4 as uuidv4 } from "uuid";
|
import { v4 as uuidv4 } from "uuid";
|
||||||
|
|
||||||
|
@ -19,7 +18,12 @@ import {
|
||||||
getAllUnscheduledReminders,
|
getAllUnscheduledReminders,
|
||||||
} from "../lib/getWorkflowReminders";
|
} from "../lib/getWorkflowReminders";
|
||||||
import { getiCalEventAsString } from "../lib/getiCalEventAsString";
|
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 type { VariablesType } from "../lib/reminders/templates/customTemplate";
|
||||||
import customTemplate from "../lib/reminders/templates/customTemplate";
|
import customTemplate from "../lib/reminders/templates/customTemplate";
|
||||||
import emailReminderTemplate from "../lib/reminders/templates/emailReminderTemplate";
|
import emailReminderTemplate from "../lib/reminders/templates/emailReminderTemplate";
|
||||||
|
@ -42,10 +46,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
const deletePromises: Promise<any>[] = [];
|
const deletePromises: Promise<any>[] = [];
|
||||||
|
|
||||||
for (const reminder of remindersToDelete) {
|
for (const reminder of remindersToDelete) {
|
||||||
const deletePromise = client.request({
|
const deletePromise = deleteScheduledSend(reminder.referenceId);
|
||||||
url: `/v3/user/scheduled_sends/${reminder.referenceId}`,
|
|
||||||
method: "DELETE",
|
|
||||||
});
|
|
||||||
deletePromises.push(deletePromise);
|
deletePromises.push(deletePromise);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,14 +74,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
const cancelUpdatePromises: Promise<any>[] = [];
|
const cancelUpdatePromises: Promise<any>[] = [];
|
||||||
|
|
||||||
for (const reminder of remindersToCancel) {
|
for (const reminder of remindersToCancel) {
|
||||||
const cancelPromise = client.request({
|
const cancelPromise = cancelScheduledEmail(reminder.referenceId);
|
||||||
url: "/v3/user/scheduled_sends",
|
|
||||||
method: "POST",
|
|
||||||
body: {
|
|
||||||
batch_id: reminder.referenceId,
|
|
||||||
status: "cancel",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const updatePromise = prisma.workflowReminder.update({
|
const updatePromise = prisma.workflowReminder.update({
|
||||||
where: {
|
where: {
|
||||||
|
@ -222,12 +216,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (emailContent.emailSubject.length > 0 && !emailBodyEmpty && sendTo) {
|
if (emailContent.emailSubject.length > 0 && !emailBodyEmpty && sendTo) {
|
||||||
const batchIdResponse = await client.request({
|
const batchId = await getBatchId();
|
||||||
url: "/v3/mail/batch",
|
|
||||||
method: "POST",
|
|
||||||
});
|
|
||||||
|
|
||||||
const batchId = batchIdResponse[1].batch_id;
|
|
||||||
|
|
||||||
if (reminder.workflowStep.action !== WorkflowActions.EMAIL_ADDRESS) {
|
if (reminder.workflowStep.action !== WorkflowActions.EMAIL_ADDRESS) {
|
||||||
sendEmailPromises.push(
|
sendEmailPromises.push(
|
||||||
|
@ -298,12 +287,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
!!reminder.booking.user?.hideBranding
|
!!reminder.booking.user?.hideBranding
|
||||||
);
|
);
|
||||||
if (emailContent.emailSubject.length > 0 && !emailBodyEmpty && sendTo) {
|
if (emailContent.emailSubject.length > 0 && !emailBodyEmpty && sendTo) {
|
||||||
const batchIdResponse = await client.request({
|
const batchId = await getBatchId();
|
||||||
url: "/v3/mail/batch",
|
|
||||||
method: "POST",
|
|
||||||
});
|
|
||||||
|
|
||||||
const batchId = batchIdResponse[1].batch_id;
|
|
||||||
|
|
||||||
sendEmailPromises.push(
|
sendEmailPromises.push(
|
||||||
sendSendgridMail(
|
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({
|
export default defaultHandler({
|
||||||
|
|
|
@ -77,3 +77,35 @@ export function sendSendgridMail(
|
||||||
sendAt: mailData.sendAt,
|
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