remove if and at to query (#5838)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>pull/5841/head^2
parent
d8c1c103a1
commit
e293e590bd
|
@ -43,6 +43,9 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
where: {
|
where: {
|
||||||
method: WorkflowMethods.EMAIL,
|
method: WorkflowMethods.EMAIL,
|
||||||
scheduled: false,
|
scheduled: false,
|
||||||
|
scheduledDate: {
|
||||||
|
lte: dayjs().add(72, "hour").toISOString(),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
workflowStep: true,
|
workflowStep: true,
|
||||||
|
@ -61,116 +64,112 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const dateInSeventyTwoHours = dayjs().add(72, "hour");
|
|
||||||
|
|
||||||
for (const reminder of unscheduledReminders) {
|
for (const reminder of unscheduledReminders) {
|
||||||
if (dayjs(reminder.scheduledDate).isBefore(dateInSeventyTwoHours)) {
|
try {
|
||||||
try {
|
let sendTo;
|
||||||
let sendTo;
|
|
||||||
|
|
||||||
switch (reminder.workflowStep.action) {
|
switch (reminder.workflowStep.action) {
|
||||||
case WorkflowActions.EMAIL_HOST:
|
case WorkflowActions.EMAIL_HOST:
|
||||||
sendTo = reminder.booking?.user?.email;
|
sendTo = reminder.booking?.user?.email;
|
||||||
break;
|
break;
|
||||||
case WorkflowActions.EMAIL_ATTENDEE:
|
case WorkflowActions.EMAIL_ATTENDEE:
|
||||||
sendTo = reminder.booking?.attendees[0].email;
|
sendTo = reminder.booking?.attendees[0].email;
|
||||||
break;
|
break;
|
||||||
case WorkflowActions.EMAIL_ADDRESS:
|
case WorkflowActions.EMAIL_ADDRESS:
|
||||||
sendTo = reminder.workflowStep.sendTo;
|
sendTo = reminder.workflowStep.sendTo;
|
||||||
}
|
|
||||||
|
|
||||||
const name =
|
|
||||||
reminder.workflowStep.action === WorkflowActions.EMAIL_ATTENDEE
|
|
||||||
? reminder.booking?.attendees[0].name
|
|
||||||
: reminder.booking?.user?.name;
|
|
||||||
|
|
||||||
const attendeeName =
|
|
||||||
reminder.workflowStep.action === WorkflowActions.EMAIL_ATTENDEE
|
|
||||||
? reminder.booking?.user?.name
|
|
||||||
: reminder.booking?.attendees[0].name;
|
|
||||||
|
|
||||||
const timeZone =
|
|
||||||
reminder.workflowStep.action === WorkflowActions.EMAIL_ATTENDEE
|
|
||||||
? reminder.booking?.attendees[0].timeZone
|
|
||||||
: reminder.booking?.user?.timeZone;
|
|
||||||
|
|
||||||
let emailContent = {
|
|
||||||
emailSubject: reminder.workflowStep.emailSubject || "",
|
|
||||||
emailBody: {
|
|
||||||
text: reminder.workflowStep.reminderBody || "",
|
|
||||||
html: `<body style="white-space: pre-wrap;">${reminder.workflowStep.reminderBody || ""}</body>`,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
switch (reminder.workflowStep.template) {
|
|
||||||
case WorkflowTemplates.REMINDER:
|
|
||||||
emailContent = emailReminderTemplate(
|
|
||||||
reminder.booking?.startTime.toISOString() || "",
|
|
||||||
reminder.booking?.endTime.toISOString() || "",
|
|
||||||
reminder.booking?.eventType?.title || "",
|
|
||||||
timeZone || "",
|
|
||||||
attendeeName || "",
|
|
||||||
name || ""
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
case WorkflowTemplates.CUSTOM:
|
|
||||||
const variables: VariablesType = {
|
|
||||||
eventName: reminder.booking?.eventType?.title || "",
|
|
||||||
organizerName: reminder.booking?.user?.name || "",
|
|
||||||
attendeeName: reminder.booking?.attendees[0].name,
|
|
||||||
attendeeEmail: reminder.booking?.attendees[0].email,
|
|
||||||
eventDate: dayjs(reminder.booking?.startTime).tz(timeZone),
|
|
||||||
eventTime: dayjs(reminder.booking?.startTime).tz(timeZone),
|
|
||||||
timeZone: timeZone,
|
|
||||||
location: reminder.booking?.location || "",
|
|
||||||
additionalNotes: reminder.booking?.description,
|
|
||||||
customInputs: reminder.booking?.customInputs,
|
|
||||||
};
|
|
||||||
const emailSubject = await customTemplate(
|
|
||||||
reminder.workflowStep.emailSubject || "",
|
|
||||||
variables,
|
|
||||||
reminder.booking?.user?.locale || ""
|
|
||||||
);
|
|
||||||
emailContent.emailSubject = emailSubject.text;
|
|
||||||
emailContent.emailBody = await customTemplate(
|
|
||||||
reminder.workflowStep.reminderBody || "",
|
|
||||||
variables,
|
|
||||||
reminder.booking?.user?.locale || ""
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (emailContent.emailSubject.length > 0 && emailContent.emailBody.text.length > 0 && sendTo) {
|
|
||||||
const batchIdResponse = await client.request({
|
|
||||||
url: "/v3/mail/batch",
|
|
||||||
method: "POST",
|
|
||||||
});
|
|
||||||
|
|
||||||
const batchId = batchIdResponse[1].batch_id;
|
|
||||||
|
|
||||||
await sgMail.send({
|
|
||||||
to: sendTo,
|
|
||||||
from: senderEmail,
|
|
||||||
subject: emailContent.emailSubject,
|
|
||||||
text: emailContent.emailBody.text,
|
|
||||||
html: emailContent.emailBody.html,
|
|
||||||
batchId: batchId,
|
|
||||||
sendAt: dayjs(reminder.scheduledDate).unix(),
|
|
||||||
replyTo: reminder.booking?.user?.email || senderEmail,
|
|
||||||
});
|
|
||||||
|
|
||||||
await prisma.workflowReminder.update({
|
|
||||||
where: {
|
|
||||||
id: reminder.id,
|
|
||||||
},
|
|
||||||
data: {
|
|
||||||
scheduled: true,
|
|
||||||
referenceId: batchId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.log(`Error scheduling Email with error ${error}`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const name =
|
||||||
|
reminder.workflowStep.action === WorkflowActions.EMAIL_ATTENDEE
|
||||||
|
? reminder.booking?.attendees[0].name
|
||||||
|
: reminder.booking?.user?.name;
|
||||||
|
|
||||||
|
const attendeeName =
|
||||||
|
reminder.workflowStep.action === WorkflowActions.EMAIL_ATTENDEE
|
||||||
|
? reminder.booking?.user?.name
|
||||||
|
: reminder.booking?.attendees[0].name;
|
||||||
|
|
||||||
|
const timeZone =
|
||||||
|
reminder.workflowStep.action === WorkflowActions.EMAIL_ATTENDEE
|
||||||
|
? reminder.booking?.attendees[0].timeZone
|
||||||
|
: reminder.booking?.user?.timeZone;
|
||||||
|
|
||||||
|
let emailContent = {
|
||||||
|
emailSubject: reminder.workflowStep.emailSubject || "",
|
||||||
|
emailBody: {
|
||||||
|
text: reminder.workflowStep.reminderBody || "",
|
||||||
|
html: `<body style="white-space: pre-wrap;">${reminder.workflowStep.reminderBody || ""}</body>`,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
switch (reminder.workflowStep.template) {
|
||||||
|
case WorkflowTemplates.REMINDER:
|
||||||
|
emailContent = emailReminderTemplate(
|
||||||
|
reminder.booking?.startTime.toISOString() || "",
|
||||||
|
reminder.booking?.endTime.toISOString() || "",
|
||||||
|
reminder.booking?.eventType?.title || "",
|
||||||
|
timeZone || "",
|
||||||
|
attendeeName || "",
|
||||||
|
name || ""
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
case WorkflowTemplates.CUSTOM:
|
||||||
|
const variables: VariablesType = {
|
||||||
|
eventName: reminder.booking?.eventType?.title || "",
|
||||||
|
organizerName: reminder.booking?.user?.name || "",
|
||||||
|
attendeeName: reminder.booking?.attendees[0].name,
|
||||||
|
attendeeEmail: reminder.booking?.attendees[0].email,
|
||||||
|
eventDate: dayjs(reminder.booking?.startTime).tz(timeZone),
|
||||||
|
eventTime: dayjs(reminder.booking?.startTime).tz(timeZone),
|
||||||
|
timeZone: timeZone,
|
||||||
|
location: reminder.booking?.location || "",
|
||||||
|
additionalNotes: reminder.booking?.description,
|
||||||
|
customInputs: reminder.booking?.customInputs,
|
||||||
|
};
|
||||||
|
const emailSubject = await customTemplate(
|
||||||
|
reminder.workflowStep.emailSubject || "",
|
||||||
|
variables,
|
||||||
|
reminder.booking?.user?.locale || ""
|
||||||
|
);
|
||||||
|
emailContent.emailSubject = emailSubject.text;
|
||||||
|
emailContent.emailBody = await customTemplate(
|
||||||
|
reminder.workflowStep.reminderBody || "",
|
||||||
|
variables,
|
||||||
|
reminder.booking?.user?.locale || ""
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (emailContent.emailSubject.length > 0 && emailContent.emailBody.text.length > 0 && sendTo) {
|
||||||
|
const batchIdResponse = await client.request({
|
||||||
|
url: "/v3/mail/batch",
|
||||||
|
method: "POST",
|
||||||
|
});
|
||||||
|
|
||||||
|
const batchId = batchIdResponse[1].batch_id;
|
||||||
|
|
||||||
|
await sgMail.send({
|
||||||
|
to: sendTo,
|
||||||
|
from: senderEmail,
|
||||||
|
subject: emailContent.emailSubject,
|
||||||
|
text: emailContent.emailBody.text,
|
||||||
|
html: emailContent.emailBody.html,
|
||||||
|
batchId: batchId,
|
||||||
|
sendAt: dayjs(reminder.scheduledDate).unix(),
|
||||||
|
replyTo: reminder.booking?.user?.email || senderEmail,
|
||||||
|
});
|
||||||
|
|
||||||
|
await prisma.workflowReminder.update({
|
||||||
|
where: {
|
||||||
|
id: reminder.id,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
scheduled: true,
|
||||||
|
referenceId: batchId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`Error scheduling Email with error ${error}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res.status(200).json({ message: "Emails scheduled" });
|
res.status(200).json({ message: "Emails scheduled" });
|
||||||
|
|
|
@ -32,6 +32,9 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
where: {
|
where: {
|
||||||
method: WorkflowMethods.SMS,
|
method: WorkflowMethods.SMS,
|
||||||
scheduled: false,
|
scheduled: false,
|
||||||
|
scheduledDate: {
|
||||||
|
lte: dayjs().add(7, "day").toISOString(),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
workflowStep: true,
|
workflowStep: true,
|
||||||
|
@ -47,84 +50,80 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
|
|
||||||
if (!unscheduledReminders.length) res.json({ ok: true });
|
if (!unscheduledReminders.length) res.json({ ok: true });
|
||||||
|
|
||||||
const dateInSevenDays = dayjs().add(7, "day");
|
|
||||||
|
|
||||||
for (const reminder of unscheduledReminders) {
|
for (const reminder of unscheduledReminders) {
|
||||||
if (dayjs(reminder.scheduledDate).isBefore(dateInSevenDays)) {
|
try {
|
||||||
try {
|
const sendTo =
|
||||||
const sendTo =
|
reminder.workflowStep.action === WorkflowActions.SMS_NUMBER
|
||||||
reminder.workflowStep.action === WorkflowActions.SMS_NUMBER
|
? reminder.workflowStep.sendTo
|
||||||
? reminder.workflowStep.sendTo
|
: reminder.booking?.smsReminderNumber;
|
||||||
: reminder.booking?.smsReminderNumber;
|
|
||||||
|
|
||||||
const userName =
|
const userName =
|
||||||
reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE
|
reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE
|
||||||
? reminder.booking?.attendees[0].name
|
? reminder.booking?.attendees[0].name
|
||||||
: "";
|
: "";
|
||||||
|
|
||||||
const attendeeName =
|
const attendeeName =
|
||||||
reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE
|
reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE
|
||||||
? reminder.booking?.user?.name
|
? reminder.booking?.user?.name
|
||||||
: reminder.booking?.attendees[0].name;
|
: reminder.booking?.attendees[0].name;
|
||||||
|
|
||||||
const timeZone =
|
const timeZone =
|
||||||
reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE
|
reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE
|
||||||
? reminder.booking?.attendees[0].timeZone
|
? reminder.booking?.attendees[0].timeZone
|
||||||
: reminder.booking?.user?.timeZone;
|
: reminder.booking?.user?.timeZone;
|
||||||
|
|
||||||
let message: string | null = reminder.workflowStep.reminderBody;
|
let message: string | null = reminder.workflowStep.reminderBody;
|
||||||
switch (reminder.workflowStep.template) {
|
switch (reminder.workflowStep.template) {
|
||||||
case WorkflowTemplates.REMINDER:
|
case WorkflowTemplates.REMINDER:
|
||||||
message = smsReminderTemplate(
|
message = smsReminderTemplate(
|
||||||
reminder.booking?.startTime.toISOString() || "",
|
reminder.booking?.startTime.toISOString() || "",
|
||||||
reminder.booking?.eventType?.title || "",
|
reminder.booking?.eventType?.title || "",
|
||||||
timeZone || "",
|
timeZone || "",
|
||||||
attendeeName || "",
|
attendeeName || "",
|
||||||
userName
|
userName
|
||||||
);
|
|
||||||
break;
|
|
||||||
case WorkflowTemplates.CUSTOM:
|
|
||||||
const variables: VariablesType = {
|
|
||||||
eventName: reminder.booking?.eventType?.title,
|
|
||||||
organizerName: reminder.booking?.user?.name || "",
|
|
||||||
attendeeName: reminder.booking?.attendees[0].name,
|
|
||||||
attendeeEmail: reminder.booking?.attendees[0].email,
|
|
||||||
eventDate: dayjs(reminder.booking?.startTime).tz(timeZone),
|
|
||||||
eventTime: dayjs(reminder.booking?.startTime).tz(timeZone),
|
|
||||||
timeZone: timeZone,
|
|
||||||
location: reminder.booking?.location || "",
|
|
||||||
additionalNotes: reminder.booking?.description,
|
|
||||||
customInputs: reminder.booking?.customInputs,
|
|
||||||
};
|
|
||||||
const customMessage = await customTemplate(
|
|
||||||
reminder.workflowStep.reminderBody || "",
|
|
||||||
variables,
|
|
||||||
reminder.booking?.user?.locale || ""
|
|
||||||
);
|
|
||||||
message = customMessage.text;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (message?.length && message?.length > 0 && sendTo) {
|
|
||||||
const scheduledSMS = await twilio.scheduleSMS(
|
|
||||||
sendTo,
|
|
||||||
message,
|
|
||||||
reminder.scheduledDate,
|
|
||||||
reminder.workflowStep.sender || "Cal"
|
|
||||||
);
|
);
|
||||||
|
break;
|
||||||
await prisma.workflowReminder.update({
|
case WorkflowTemplates.CUSTOM:
|
||||||
where: {
|
const variables: VariablesType = {
|
||||||
id: reminder.id,
|
eventName: reminder.booking?.eventType?.title,
|
||||||
},
|
organizerName: reminder.booking?.user?.name || "",
|
||||||
data: {
|
attendeeName: reminder.booking?.attendees[0].name,
|
||||||
scheduled: true,
|
attendeeEmail: reminder.booking?.attendees[0].email,
|
||||||
referenceId: scheduledSMS.sid,
|
eventDate: dayjs(reminder.booking?.startTime).tz(timeZone),
|
||||||
},
|
eventTime: dayjs(reminder.booking?.startTime).tz(timeZone),
|
||||||
});
|
timeZone: timeZone,
|
||||||
}
|
location: reminder.booking?.location || "",
|
||||||
} catch (error) {
|
additionalNotes: reminder.booking?.description,
|
||||||
console.log(`Error scheduling SMS with error ${error}`);
|
customInputs: reminder.booking?.customInputs,
|
||||||
|
};
|
||||||
|
const customMessage = await customTemplate(
|
||||||
|
reminder.workflowStep.reminderBody || "",
|
||||||
|
variables,
|
||||||
|
reminder.booking?.user?.locale || ""
|
||||||
|
);
|
||||||
|
message = customMessage.text;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
if (message?.length && message?.length > 0 && sendTo) {
|
||||||
|
const scheduledSMS = await twilio.scheduleSMS(
|
||||||
|
sendTo,
|
||||||
|
message,
|
||||||
|
reminder.scheduledDate,
|
||||||
|
reminder.workflowStep.sender || "Cal"
|
||||||
|
);
|
||||||
|
|
||||||
|
await prisma.workflowReminder.update({
|
||||||
|
where: {
|
||||||
|
id: reminder.id,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
scheduled: true,
|
||||||
|
referenceId: scheduledSMS.sid,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`Error scheduling SMS with error ${error}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res.status(200).json({ message: "SMS scheduled" });
|
res.status(200).json({ message: "SMS scheduled" });
|
||||||
|
|
Loading…
Reference in New Issue