diff --git a/packages/features/ee/workflows/components/NewWorkflowButton.tsx b/packages/features/ee/workflows/components/NewWorkflowButton.tsx index a6280c8818..8b4d53a098 100644 --- a/packages/features/ee/workflows/components/NewWorkflowButton.tsx +++ b/packages/features/ee/workflows/components/NewWorkflowButton.tsx @@ -231,7 +231,7 @@ export function NewWorkflowButton() { )} -
+
diff --git a/packages/trpc/server/routers/viewer/workflows.tsx b/packages/trpc/server/routers/viewer/workflows.tsx index dd78d7ac42..9864475749 100644 --- a/packages/trpc/server/routers/viewer/workflows.tsx +++ b/packages/trpc/server/routers/viewer/workflows.tsx @@ -56,14 +56,8 @@ export const workflowsRouter = createProtectedRouter() async resolve({ ctx, input }) { const workflow = await ctx.prisma.workflow.findFirst({ where: { - AND: [ - { - userId: ctx.user.id, - }, - { - id: input.id, - }, - ], + userId: ctx.user.id, + id: input.id, }, select: { id: true, @@ -136,41 +130,43 @@ export const workflowsRouter = createProtectedRouter() async resolve({ ctx, input }) { const { id } = input; - //delete all scheduled reminders of this workflow - const scheduledReminders = await ctx.prisma.workflowReminder.findMany({ + const workflowToDelete = await ctx.prisma.workflow.findFirst({ where: { - workflowStep: { - workflowId: id, - }, - scheduled: true, - NOT: { - referenceId: null, - }, + id, + userId: ctx.user.id, }, }); - scheduledReminders.forEach((reminder) => { - if (reminder.referenceId) { - if (reminder.method === WorkflowMethods.EMAIL) { - deleteScheduledEmailReminder(reminder.referenceId); - } else if (reminder.method === WorkflowMethods.SMS) { - deleteScheduledSMSReminder(reminder.referenceId); + if (workflowToDelete) { + const scheduledReminders = await ctx.prisma.workflowReminder.findMany({ + where: { + workflowStep: { + workflowId: id, + }, + scheduled: true, + NOT: { + referenceId: null, + }, + }, + }); + + scheduledReminders.forEach((reminder) => { + if (reminder.referenceId) { + if (reminder.method === WorkflowMethods.EMAIL) { + deleteScheduledEmailReminder(reminder.referenceId); + } else if (reminder.method === WorkflowMethods.SMS) { + deleteScheduledSMSReminder(reminder.referenceId); + } } - } - }); + }); - await ctx.prisma.workflow.deleteMany({ - where: { - AND: [ - { - userId: ctx.user.id, - }, - { - id, - }, - ], - }, - }); + await ctx.prisma.workflow.deleteMany({ + where: { + userId: ctx.user.id, + id, + }, + }); + } return { id, @@ -214,7 +210,6 @@ export const workflowsRouter = createProtectedRouter() if (!userWorkflow || userWorkflow.userId !== user.id) throw new TRPCError({ code: "UNAUTHORIZED" }); - //remove all scheduled Email and SMS reminders for eventTypes that are not active any more const oldActiveOnEventTypes = await ctx.prisma.workflowsOnEventTypes.findMany({ where: { workflowId: id, @@ -224,6 +219,46 @@ export const workflowsRouter = createProtectedRouter() }, }); + const newActiveEventTypes = activeOn.filter((eventType) => { + if ( + !oldActiveOnEventTypes || + !oldActiveOnEventTypes + .map((oldEventType) => { + return oldEventType.eventTypeId; + }) + .includes(eventType) + ) { + return eventType; + } + }); + + //check if new event types belong to user + for (const newEventTypeId of newActiveEventTypes) { + const newEventType = await ctx.prisma.eventType.findFirst({ + where: { + id: newEventTypeId, + }, + include: { + team: { + include: { + members: true, + }, + }, + }, + }); + + if ( + newEventType && + newEventType.userId !== user.id && + newEventType?.team?.members.filter((membership) => { + membership.userId === user.id; + }).length + ) { + throw new TRPCError({ code: "UNAUTHORIZED" }); + } + } + + //remove all scheduled Email and SMS reminders for eventTypes that are not active any more const removedEventTypes = oldActiveOnEventTypes .map((eventType) => { return eventType.eventTypeId; @@ -300,18 +335,7 @@ export const workflowsRouter = createProtectedRouter() let newEventTypes: number[] = []; if (activeOn.length) { if (trigger === WorkflowTriggerEvents.BEFORE_EVENT) { - newEventTypes = activeOn.filter((eventType) => { - if ( - !oldActiveOnEventTypes || - !oldActiveOnEventTypes - .map((oldEventType) => { - return oldEventType.eventTypeId; - }) - .includes(eventType) - ) { - return eventType; - } - }); + newEventTypes = newActiveEventTypes; } if (newEventTypes.length > 0) { //create reminders for all bookings with newEventTypes