Skip to content

Commit eaaedec

Browse files
committed
Handle more dry-run cases
1 parent ec920eb commit eaaedec

File tree

6 files changed

+32
-5
lines changed

6 files changed

+32
-5
lines changed

packages/features/bookings/lib/handleNewBooking.ts

+14-2
Original file line numberDiff line numberDiff line change
@@ -1788,6 +1788,7 @@ async function handler(
17881788
...webhookData,
17891789
paymentId: payment?.id,
17901790
},
1791+
isDryRun,
17911792
});
17921793

17931794
req.statusCode = 201;
@@ -1865,13 +1866,23 @@ async function handler(
18651866
});
18661867

18671868
// Send Webhook call if hooked to BOOKING_CREATED & BOOKING_RESCHEDULED
1868-
await monitorCallbackAsync(handleWebhookTrigger, { subscriberOptions, eventTrigger, webhookData });
1869+
await monitorCallbackAsync(handleWebhookTrigger, {
1870+
subscriberOptions,
1871+
eventTrigger,
1872+
webhookData,
1873+
isDryRun,
1874+
});
18691875
} else {
18701876
// if eventType requires confirmation we will trigger the BOOKING REQUESTED Webhook
18711877
const eventTrigger: WebhookTriggerEvents = WebhookTriggerEvents.BOOKING_REQUESTED;
18721878
subscriberOptions.triggerEvent = eventTrigger;
18731879
webhookData.status = "PENDING";
1874-
await monitorCallbackAsync(handleWebhookTrigger, { subscriberOptions, eventTrigger, webhookData });
1880+
await monitorCallbackAsync(handleWebhookTrigger, {
1881+
subscriberOptions,
1882+
eventTrigger,
1883+
webhookData,
1884+
isDryRun,
1885+
});
18751886
}
18761887

18771888
try {
@@ -1937,6 +1948,7 @@ async function handler(
19371948
isFirstRecurringEvent: req.body.allRecurringDates ? req.body.isFirstRecurringSlot : undefined,
19381949
hideBranding: !!eventType.owner?.hideBranding,
19391950
seatReferenceUid: evt.attendeeSeatId,
1951+
isDryRun,
19401952
});
19411953
} catch (error) {
19421954
loggerWithEventDetails.error("Error while scheduling workflow reminders", JSON.stringify({ error }));

packages/features/bookings/lib/handleSeats/handleSeats.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ const handleSeats = async (newSeatedBookingObject: NewSeatedBookingObject) => {
3232
evt,
3333
workflows,
3434
rescheduledBy,
35+
isDryRun = false,
3536
} = newSeatedBookingObject;
36-
37+
// TODO: We could allow doing more things to support good dry run for seats
38+
if (isDryRun) return;
3739
const loggerWithEventDetails = createLoggerWithEventDetails(eventType.id, reqBodyUser, eventType.slug);
3840

3941
let resultBooking: HandleSeatsResultBooking = null;
@@ -124,6 +126,7 @@ const handleSeats = async (newSeatedBookingObject: NewSeatedBookingObject) => {
124126
isFirstRecurringEvent: true,
125127
emailAttendeeSendToOverride: bookerEmail,
126128
seatReferenceUid: evt.attendeeSeatId,
129+
isDryRun,
127130
});
128131
} catch (error) {
129132
loggerWithEventDetails.error("Error while scheduling workflow reminders", JSON.stringify({ error }));
@@ -149,7 +152,7 @@ const handleSeats = async (newSeatedBookingObject: NewSeatedBookingObject) => {
149152
rescheduledBy,
150153
};
151154

152-
await handleWebhookTrigger({ subscriberOptions, eventTrigger, webhookData });
155+
await handleWebhookTrigger({ subscriberOptions, eventTrigger, webhookData, isDryRun });
153156
}
154157

155158
return resultBooking;

packages/features/bookings/lib/handleSeats/types.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export type NewSeatedBookingObject = {
4343
responses: z.infer<ReturnType<typeof getBookingDataSchema>>["responses"] | null;
4444
rescheduledBy?: string;
4545
workflows: Workflow[];
46+
isDryRun?: boolean;
4647
};
4748

4849
export type RescheduleSeatedBookingObject = NewSeatedBookingObject & { rescheduleUid: string };

packages/features/bookings/lib/handleWebhookTrigger.ts

+8
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,16 @@ export async function handleWebhookTrigger(args: {
99
subscriberOptions: GetSubscriberOptions;
1010
eventTrigger: string;
1111
webhookData: WebhookPayloadType;
12+
/**
13+
* It is marked as required field so that it is not accidentally passed as undefined when in dry-run mode
14+
* It could be problematic if that happens, as dry-run is used in automations and can increase the load on the system
15+
*/
16+
isDryRun: boolean;
1217
}) {
1318
try {
19+
if (args.isDryRun) {
20+
return;
21+
}
1422
const subscribers = await getWebhooks(args.subscriberOptions);
1523

1624
const promises = subscribers.map((sub) =>

packages/features/ee/workflows/lib/reminders/reminderScheduler.ts

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export interface ScheduleWorkflowRemindersArgs extends ProcessWorkflowStepParams
3737
isNotConfirmed?: boolean;
3838
isRescheduleEvent?: boolean;
3939
isFirstRecurringEvent?: boolean;
40+
isDryRun?: boolean;
4041
}
4142

4243
const processWorkflowStep = async (
@@ -159,7 +160,9 @@ export const scheduleWorkflowReminders = async (args: ScheduleWorkflowRemindersA
159160
emailAttendeeSendToOverride = "",
160161
hideBranding,
161162
seatReferenceUid,
163+
isDryRun = false,
162164
} = args;
165+
if (isDryRun) return;
163166
if (isNotConfirmed || !workflows.length) return;
164167

165168
for (const workflow of workflows) {

packages/trpc/server/routers/viewer/bookings/confirm.handler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ export const confirmHandler = async ({ ctx, input }: ConfirmOptions) => {
418418
status: BookingStatus.REJECTED,
419419
smsReminderNumber: booking.smsReminderNumber || undefined,
420420
};
421-
await handleWebhookTrigger({ subscriberOptions, eventTrigger, webhookData });
421+
await handleWebhookTrigger({ subscriberOptions, eventTrigger, webhookData, isDryRun: false });
422422
}
423423

424424
const message = `Booking ${confirmed}` ? "confirmed" : "rejected";

0 commit comments

Comments
 (0)