From e293e590bdc205ebd39429b35f9e2ba73293646d Mon Sep 17 00:00:00 2001 From: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Date: Fri, 2 Dec 2022 14:43:07 +0100 Subject: [PATCH] remove if and at to query (#5838) Co-authored-by: CarinaWolli --- .../workflows/api/scheduleEmailReminders.ts | 213 +++++++++--------- .../ee/workflows/api/scheduleSMSReminders.ts | 141 ++++++------ 2 files changed, 176 insertions(+), 178 deletions(-) diff --git a/packages/features/ee/workflows/api/scheduleEmailReminders.ts b/packages/features/ee/workflows/api/scheduleEmailReminders.ts index 53b381513f..68003ddf19 100644 --- a/packages/features/ee/workflows/api/scheduleEmailReminders.ts +++ b/packages/features/ee/workflows/api/scheduleEmailReminders.ts @@ -43,6 +43,9 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { where: { method: WorkflowMethods.EMAIL, scheduled: false, + scheduledDate: { + lte: dayjs().add(72, "hour").toISOString(), + }, }, include: { workflowStep: true, @@ -61,116 +64,112 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { return; } - const dateInSeventyTwoHours = dayjs().add(72, "hour"); - for (const reminder of unscheduledReminders) { - if (dayjs(reminder.scheduledDate).isBefore(dateInSeventyTwoHours)) { - try { - let sendTo; + try { + let sendTo; - switch (reminder.workflowStep.action) { - case WorkflowActions.EMAIL_HOST: - sendTo = reminder.booking?.user?.email; - break; - case WorkflowActions.EMAIL_ATTENDEE: - sendTo = reminder.booking?.attendees[0].email; - break; - case WorkflowActions.EMAIL_ADDRESS: - 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: `${reminder.workflowStep.reminderBody || ""}`, - }, - }; - - 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}`); + switch (reminder.workflowStep.action) { + case WorkflowActions.EMAIL_HOST: + sendTo = reminder.booking?.user?.email; + break; + case WorkflowActions.EMAIL_ATTENDEE: + sendTo = reminder.booking?.attendees[0].email; + break; + case WorkflowActions.EMAIL_ADDRESS: + 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: `${reminder.workflowStep.reminderBody || ""}`, + }, + }; + + 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" }); diff --git a/packages/features/ee/workflows/api/scheduleSMSReminders.ts b/packages/features/ee/workflows/api/scheduleSMSReminders.ts index fbee89cb48..f0186cb219 100644 --- a/packages/features/ee/workflows/api/scheduleSMSReminders.ts +++ b/packages/features/ee/workflows/api/scheduleSMSReminders.ts @@ -32,6 +32,9 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { where: { method: WorkflowMethods.SMS, scheduled: false, + scheduledDate: { + lte: dayjs().add(7, "day").toISOString(), + }, }, include: { workflowStep: true, @@ -47,84 +50,80 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { if (!unscheduledReminders.length) res.json({ ok: true }); - const dateInSevenDays = dayjs().add(7, "day"); - for (const reminder of unscheduledReminders) { - if (dayjs(reminder.scheduledDate).isBefore(dateInSevenDays)) { - try { - const sendTo = - reminder.workflowStep.action === WorkflowActions.SMS_NUMBER - ? reminder.workflowStep.sendTo - : reminder.booking?.smsReminderNumber; + try { + const sendTo = + reminder.workflowStep.action === WorkflowActions.SMS_NUMBER + ? reminder.workflowStep.sendTo + : reminder.booking?.smsReminderNumber; - const userName = - reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE - ? reminder.booking?.attendees[0].name - : ""; + const userName = + reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE + ? reminder.booking?.attendees[0].name + : ""; - const attendeeName = - reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE - ? reminder.booking?.user?.name - : reminder.booking?.attendees[0].name; + const attendeeName = + reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE + ? reminder.booking?.user?.name + : reminder.booking?.attendees[0].name; - const timeZone = - reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE - ? reminder.booking?.attendees[0].timeZone - : reminder.booking?.user?.timeZone; + const timeZone = + reminder.workflowStep.action === WorkflowActions.SMS_ATTENDEE + ? reminder.booking?.attendees[0].timeZone + : reminder.booking?.user?.timeZone; - let message: string | null = reminder.workflowStep.reminderBody; - switch (reminder.workflowStep.template) { - case WorkflowTemplates.REMINDER: - message = smsReminderTemplate( - reminder.booking?.startTime.toISOString() || "", - reminder.booking?.eventType?.title || "", - timeZone || "", - attendeeName || "", - 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" + let message: string | null = reminder.workflowStep.reminderBody; + switch (reminder.workflowStep.template) { + case WorkflowTemplates.REMINDER: + message = smsReminderTemplate( + reminder.booking?.startTime.toISOString() || "", + reminder.booking?.eventType?.title || "", + timeZone || "", + attendeeName || "", + userName ); - - await prisma.workflowReminder.update({ - where: { - id: reminder.id, - }, - data: { - scheduled: true, - referenceId: scheduledSMS.sid, - }, - }); - } - } catch (error) { - console.log(`Error scheduling SMS with error ${error}`); + 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" + ); + + 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" });