From 84cff3613aa115b1c9ac9f77be52f2333f95e659 Mon Sep 17 00:00:00 2001 From: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Date: Thu, 1 Sep 2022 04:39:34 +0530 Subject: [PATCH] feat: reschedule workflow added (#3996) --- apps/web/pages/api/book/event.ts | 3 +- apps/web/public/static/locales/en/common.json | 1 + .../features/ee/workflows/lib/constants.ts | 1 + .../lib/reminders/emailReminderManager.ts | 3 +- .../lib/reminders/reminderScheduler.ts | 94 ++++++++++--------- .../lib/reminders/smsReminderManager.ts | 5 +- .../migration.sql | 2 + packages/prisma/schema.prisma | 1 + .../trpc/server/routers/viewer/bookings.tsx | 1 + turbo.json | 1 + 10 files changed, 62 insertions(+), 50 deletions(-) create mode 100644 packages/prisma/migrations/20220827082641_reschedule_workflow_trigger_added/migration.sql diff --git a/apps/web/pages/api/book/event.ts b/apps/web/pages/api/book/event.ts index 349f074bff..2b4cd971d7 100644 --- a/apps/web/pages/api/book/event.ts +++ b/apps/web/pages/api/book/event.ts @@ -892,7 +892,8 @@ async function handler(req: NextApiRequest) { eventType.workflows, reqBody.smsReminderNumber as string | null, evt, - evt.requiresConfirmation || false + evt.requiresConfirmation || false, + rescheduleUid ? true : false ); // booking successful req.statusCode = 201; diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index f7f54ef848..30e2ccd88b 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -943,6 +943,7 @@ "workflows": "Workflows", "new_workflow_btn": "New Workflow", "add_new_workflow": "Add a new workflow", + "reschedule_event_trigger": "when event is rescheduled", "trigger": "Trigger", "triggers": "Triggers", "action": "Action", diff --git a/packages/features/ee/workflows/lib/constants.ts b/packages/features/ee/workflows/lib/constants.ts index e940af661c..e496cfd9cc 100644 --- a/packages/features/ee/workflows/lib/constants.ts +++ b/packages/features/ee/workflows/lib/constants.ts @@ -4,6 +4,7 @@ export const WORKFLOW_TRIGGER_EVENTS = [ WorkflowTriggerEvents.BEFORE_EVENT, WorkflowTriggerEvents.EVENT_CANCELLED, WorkflowTriggerEvents.NEW_EVENT, + WorkflowTriggerEvents.RESCHEDULE_EVENT, ] as const; export const WORKFLOW_ACTIONS = [ diff --git a/packages/features/ee/workflows/lib/reminders/emailReminderManager.ts b/packages/features/ee/workflows/lib/reminders/emailReminderManager.ts index 055b0ef05c..588962b4fa 100644 --- a/packages/features/ee/workflows/lib/reminders/emailReminderManager.ts +++ b/packages/features/ee/workflows/lib/reminders/emailReminderManager.ts @@ -98,7 +98,8 @@ export const scheduleEmailReminder = async ( if ( triggerEvent === WorkflowTriggerEvents.NEW_EVENT || - triggerEvent === WorkflowTriggerEvents.EVENT_CANCELLED + triggerEvent === WorkflowTriggerEvents.EVENT_CANCELLED || + triggerEvent === WorkflowTriggerEvents.RESCHEDULE_EVENT ) { try { await sgMail.send({ diff --git a/packages/features/ee/workflows/lib/reminders/reminderScheduler.ts b/packages/features/ee/workflows/lib/reminders/reminderScheduler.ts index ede8b20bc7..ba0c452d3d 100644 --- a/packages/features/ee/workflows/lib/reminders/reminderScheduler.ts +++ b/packages/features/ee/workflows/lib/reminders/reminderScheduler.ts @@ -19,55 +19,57 @@ export const scheduleWorkflowReminders = async ( })[], smsReminderNumber: string | null, evt: CalendarEvent, - needsConfirmation: boolean + needsConfirmation: boolean, + isRescheduleEvent: boolean ) => { if (workflows.length > 0 && !needsConfirmation) { workflows.forEach((workflowReference) => { - if (workflowReference.workflow.steps.length > 0) { - const workflow = workflowReference.workflow; - if ( - workflow.trigger === WorkflowTriggerEvents.BEFORE_EVENT || - workflow.trigger === WorkflowTriggerEvents.NEW_EVENT - ) { - workflow.steps.forEach(async (step) => { - if (step.action === WorkflowActions.SMS_ATTENDEE || step.action === WorkflowActions.SMS_NUMBER) { - const sendTo = step.action === WorkflowActions.SMS_ATTENDEE ? smsReminderNumber : step.sendTo; - await scheduleSMSReminder( - evt, - sendTo, - workflow.trigger, - step.action, - { - time: workflow.time, - timeUnit: workflow.timeUnit, - }, - step.reminderBody || "", - step.id, - step.template - ); - } else if ( - step.action === WorkflowActions.EMAIL_ATTENDEE || - step.action === WorkflowActions.EMAIL_HOST - ) { - const sendTo = - step.action === WorkflowActions.EMAIL_HOST ? evt.organizer.email : evt.attendees[0].email; - scheduleEmailReminder( - evt, - workflow.trigger, - step.action, - { - time: workflow.time, - timeUnit: workflow.timeUnit, - }, - sendTo, - step.emailSubject || "", - step.reminderBody || "", - step.id, - step.template - ); - } - }); - } + if (workflowReference.workflow.steps.length === 0) return; + + const workflow = workflowReference.workflow; + if ( + workflow.trigger === WorkflowTriggerEvents.BEFORE_EVENT || + (workflow.trigger === WorkflowTriggerEvents.NEW_EVENT && !isRescheduleEvent) || + (workflow.trigger === WorkflowTriggerEvents.RESCHEDULE_EVENT && isRescheduleEvent) + ) { + workflow.steps.forEach(async (step) => { + if (step.action === WorkflowActions.SMS_ATTENDEE || step.action === WorkflowActions.SMS_NUMBER) { + const sendTo = step.action === WorkflowActions.SMS_ATTENDEE ? smsReminderNumber : step.sendTo; + await scheduleSMSReminder( + evt, + sendTo, + workflow.trigger, + step.action, + { + time: workflow.time, + timeUnit: workflow.timeUnit, + }, + step.reminderBody || "", + step.id, + step.template + ); + } else if ( + step.action === WorkflowActions.EMAIL_ATTENDEE || + step.action === WorkflowActions.EMAIL_HOST + ) { + const sendTo = + step.action === WorkflowActions.EMAIL_HOST ? evt.organizer.email : evt.attendees[0].email; + scheduleEmailReminder( + evt, + workflow.trigger, + step.action, + { + time: workflow.time, + timeUnit: workflow.timeUnit, + }, + sendTo, + step.emailSubject || "", + step.reminderBody || "", + step.id, + step.template + ); + } + }); } }); } diff --git a/packages/features/ee/workflows/lib/reminders/smsReminderManager.ts b/packages/features/ee/workflows/lib/reminders/smsReminderManager.ts index dfab44c213..ab3adf5656 100644 --- a/packages/features/ee/workflows/lib/reminders/smsReminderManager.ts +++ b/packages/features/ee/workflows/lib/reminders/smsReminderManager.ts @@ -85,10 +85,11 @@ export const scheduleSMSReminder = async ( } if (message.length > 0 && reminderPhone) { - //send SMS when event is booked/cancelled + //send SMS when event is booked/cancelled/Reschdeuled if ( triggerEvent === WorkflowTriggerEvents.NEW_EVENT || - triggerEvent === WorkflowTriggerEvents.EVENT_CANCELLED + triggerEvent === WorkflowTriggerEvents.EVENT_CANCELLED || + triggerEvent === WorkflowTriggerEvents.RESCHEDULE_EVENT ) { try { await twilio.sendSMS(reminderPhone, message); diff --git a/packages/prisma/migrations/20220827082641_reschedule_workflow_trigger_added/migration.sql b/packages/prisma/migrations/20220827082641_reschedule_workflow_trigger_added/migration.sql new file mode 100644 index 0000000000..f0752ec01d --- /dev/null +++ b/packages/prisma/migrations/20220827082641_reschedule_workflow_trigger_added/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "WorkflowTriggerEvents" ADD VALUE 'RESCHEDULE_EVENT'; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index b4f6840fc5..311ba91f65 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -530,6 +530,7 @@ enum WorkflowTriggerEvents { BEFORE_EVENT EVENT_CANCELLED NEW_EVENT + RESCHEDULE_EVENT } enum WorkflowActions { diff --git a/packages/trpc/server/routers/viewer/bookings.tsx b/packages/trpc/server/routers/viewer/bookings.tsx index 1516f8e2fa..ecb58766fa 100644 --- a/packages/trpc/server/routers/viewer/bookings.tsx +++ b/packages/trpc/server/routers/viewer/bookings.tsx @@ -472,6 +472,7 @@ export const bookingsRouter = createProtectedRouter() updatedBooking.eventType.workflows, updatedBooking.smsReminderNumber, evtOfBooking, + false, false ); } diff --git a/turbo.json b/turbo.json index 5e78df236e..f28746fc4f 100644 --- a/turbo.json +++ b/turbo.json @@ -196,6 +196,7 @@ "$CI", "$CLOSECOM_API_KEY", "$SENDGRID_API_KEY", + "$SENDGRID_EMAIL", "$CRON_API_KEY", "$DAILY_API_KEY", "$DAILY_SCALE_PLAN",