chore: Add logging and try/catch blocks in handleNewBooking (#20665)
* Add logging and try/catch blocks * Add additional logging around `deleteEventsAndMeetings` * Type fix
This commit is contained in:
@@ -448,53 +448,79 @@ async function handler(input: CancelBookingInput) {
|
||||
allRemainingBookings
|
||||
);
|
||||
|
||||
const bookingToDeleteEventTypeMetadata = eventTypeMetaDataSchemaWithTypedApps.parse(
|
||||
bookingToDelete.eventType?.metadata || null
|
||||
);
|
||||
try {
|
||||
const bookingToDeleteEventTypeMetadataParsed = eventTypeMetaDataSchemaWithTypedApps.safeParse(
|
||||
bookingToDelete.eventType?.metadata || null
|
||||
);
|
||||
|
||||
const credentials = await getAllCredentials(bookingToDelete.user, {
|
||||
...bookingToDelete.eventType,
|
||||
metadata: bookingToDeleteEventTypeMetadata,
|
||||
});
|
||||
if (!bookingToDeleteEventTypeMetadataParsed.success) {
|
||||
log.error(
|
||||
`Error parsing metadata`,
|
||||
safeStringify({ error: bookingToDeleteEventTypeMetadataParsed?.error })
|
||||
);
|
||||
throw new Error("Error parsing metadata");
|
||||
}
|
||||
|
||||
const eventManager = new EventManager(
|
||||
{ ...bookingToDelete.user, credentials },
|
||||
bookingToDeleteEventTypeMetadata?.apps
|
||||
);
|
||||
const bookingToDeleteEventTypeMetadata = bookingToDeleteEventTypeMetadataParsed.data;
|
||||
|
||||
await eventManager.cancelEvent(evt, bookingToDelete.references, isBookingInRecurringSeries);
|
||||
|
||||
const bookingReferenceDeletes = prisma.bookingReference.deleteMany({
|
||||
where: {
|
||||
bookingId: bookingToDelete.id,
|
||||
},
|
||||
});
|
||||
|
||||
const webhookTriggerPromises = [];
|
||||
const workflowReminderPromises = [];
|
||||
|
||||
for (const booking of updatedBookings) {
|
||||
// delete scheduled webhook triggers of cancelled bookings
|
||||
webhookTriggerPromises.push(deleteWebhookScheduledTriggers({ booking }));
|
||||
|
||||
//Workflows - cancel all reminders for cancelled bookings
|
||||
workflowReminderPromises.push(WorkflowRepository.deleteAllWorkflowReminders(booking.workflowReminders));
|
||||
}
|
||||
|
||||
await Promise.all([...webhookTriggerPromises, ...workflowReminderPromises]).catch((error) => {
|
||||
log.error("An error occurred when deleting workflow reminders and webhook triggers", error);
|
||||
});
|
||||
|
||||
if (internalNote && teamId) {
|
||||
await handleInternalNote({
|
||||
internalNote,
|
||||
booking: bookingToDelete,
|
||||
userId: userId || -1,
|
||||
teamId: teamId,
|
||||
const credentials = await getAllCredentials(bookingToDelete.user, {
|
||||
...bookingToDelete.eventType,
|
||||
metadata: bookingToDeleteEventTypeMetadata,
|
||||
});
|
||||
|
||||
const eventManager = new EventManager(
|
||||
{ ...bookingToDelete.user, credentials },
|
||||
bookingToDeleteEventTypeMetadata?.apps
|
||||
);
|
||||
|
||||
await eventManager.cancelEvent(evt, bookingToDelete.references, isBookingInRecurringSeries);
|
||||
|
||||
await prisma.bookingReference.deleteMany({
|
||||
where: {
|
||||
bookingId: bookingToDelete.id,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
log.error(`Error deleting integrations`, safeStringify({ error }));
|
||||
}
|
||||
|
||||
const prismaPromises: Promise<unknown>[] = [bookingReferenceDeletes];
|
||||
try {
|
||||
const webhookTriggerPromises = [];
|
||||
const workflowReminderPromises = [];
|
||||
|
||||
for (const booking of updatedBookings) {
|
||||
// delete scheduled webhook triggers of cancelled bookings
|
||||
webhookTriggerPromises.push(deleteWebhookScheduledTriggers({ booking }));
|
||||
|
||||
//Workflows - cancel all reminders for cancelled bookings
|
||||
workflowReminderPromises.push(WorkflowRepository.deleteAllWorkflowReminders(booking.workflowReminders));
|
||||
}
|
||||
|
||||
await Promise.allSettled([...webhookTriggerPromises, ...workflowReminderPromises]).then((results) => {
|
||||
const rejectedReasons = results
|
||||
.filter((result): result is PromiseRejectedResult => result.status === "rejected")
|
||||
.map((result) => result.reason);
|
||||
|
||||
if (rejectedReasons.length > 0) {
|
||||
log.error("An error occurred when deleting workflow reminders and webhook triggers", rejectedReasons);
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
log.error("Error deleting scheduled webhooks and workflows", safeStringify({ error }));
|
||||
}
|
||||
|
||||
try {
|
||||
if (internalNote && teamId) {
|
||||
await handleInternalNote({
|
||||
internalNote,
|
||||
booking: bookingToDelete,
|
||||
userId: userId || -1,
|
||||
teamId: teamId,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
log.error("Error handlingInternalNote", safeStringify({ error }));
|
||||
}
|
||||
|
||||
try {
|
||||
// TODO: if emails fail try to requeue them
|
||||
@@ -505,7 +531,7 @@ async function handler(input: CancelBookingInput) {
|
||||
bookingToDelete?.eventType?.metadata as EventTypeMetadata
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("Error deleting event", error);
|
||||
log.error("Error deleting event", error);
|
||||
}
|
||||
return {
|
||||
success: true,
|
||||
|
||||
@@ -588,6 +588,7 @@ export default class EventManager {
|
||||
bookingReferences: PartialReference[];
|
||||
isBookingInRecurringSeries?: boolean;
|
||||
}) {
|
||||
const log = logger.getSubLogger({ prefix: [`[deleteEventsAndMeetings]: ${event?.uid}`] });
|
||||
const calendarReferences = [],
|
||||
videoReferences = [],
|
||||
crmReferences = [],
|
||||
|
||||
Reference in New Issue
Block a user