remove if and at to query (#5838)

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
pull/5841/head^2
Carina Wollendorfer 2022-12-02 14:43:07 +01:00 committed by GitHub
parent d8c1c103a1
commit e293e590bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 176 additions and 178 deletions

View File

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

View File

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