diff --git a/apps/web/app/api/recorded-daily-video/route.ts b/apps/web/app/api/recorded-daily-video/route.ts index 2737e7c1752e0d..9c5a0c8a66b468 100644 --- a/apps/web/app/api/recorded-daily-video/route.ts +++ b/apps/web/app/api/recorded-daily-video/route.ts @@ -136,8 +136,22 @@ export async function postHandler(request: NextRequest) { log.error("Failed to Submit Transcription Batch Processor Job:", safeStringify(err)); } + // Get Cal Video settings to check if recording emails for guests are disabled + const calVideoSettings = await prisma.calVideoSettings.findUnique({ + where: { + eventTypeId: booking.eventTypeId, + }, + select: { + disableRecordingEmailsForGuests: true, + }, + }); + // send emails to all attendees only when user has team plan - await sendDailyVideoRecordingEmails(evt, downloadLink); + await sendDailyVideoRecordingEmails( + evt, + downloadLink, + calVideoSettings?.disableRecordingEmailsForGuests ?? false + ); return NextResponse.json({ message: "Success" }); } else if (body.type === "meeting.ended") { diff --git a/packages/emails/daily-video-emails.ts b/packages/emails/daily-video-emails.ts index 84287f719204d1..f906c73a0d4371 100644 --- a/packages/emails/daily-video-emails.ts +++ b/packages/emails/daily-video-emails.ts @@ -32,18 +32,26 @@ export const sendDailyVideoTranscriptEmails = async (calEvent: CalendarEvent, tr await Promise.all(emailsToSend); }; -export const sendDailyVideoRecordingEmails = async (calEvent: CalendarEvent, downloadLink: string) => { +export const sendDailyVideoRecordingEmails = async ( + calEvent: CalendarEvent, + downloadLink: string, + disableRecordingEmailsForGuests = false +) => { const calendarEvent = formatCalEvent(calEvent); const emailsToSend: Promise[] = []; + // Always send to organizer emailsToSend.push( sendEmail(() => new OrganizerDailyVideoDownloadRecordingEmail(calendarEvent, downloadLink)) ); - for (const attendee of calendarEvent.attendees) { - emailsToSend.push( - sendEmail(() => new AttendeeDailyVideoDownloadRecordingEmail(calendarEvent, attendee, downloadLink)) - ); + // Only send to attendees if not disabled + if (!disableRecordingEmailsForGuests) { + for (const attendee of calendarEvent.attendees) { + emailsToSend.push( + sendEmail(() => new AttendeeDailyVideoDownloadRecordingEmail(calendarEvent, attendee, downloadLink)) + ); + } } await Promise.all(emailsToSend); }; diff --git a/packages/emails/email-manager.ts b/packages/emails/email-manager.ts index a3768657262b0b..884a220d5327b0 100644 --- a/packages/emails/email-manager.ts +++ b/packages/emails/email-manager.ts @@ -728,18 +728,26 @@ export const sendNoShowFeeChargedEmail = async ( await sendEmail(() => new NoShowFeeChargedEmail(evt, attendee)); }; -export const sendDailyVideoRecordingEmails = async (calEvent: CalendarEvent, downloadLink: string) => { +export const sendDailyVideoRecordingEmails = async ( + calEvent: CalendarEvent, + downloadLink: string, + disableRecordingEmailsForGuests = false +) => { const calendarEvent = formatCalEvent(calEvent); const emailsToSend: Promise[] = []; + // Always send to organizer emailsToSend.push( sendEmail(() => new OrganizerDailyVideoDownloadRecordingEmail(calendarEvent, downloadLink)) ); - for (const attendee of calendarEvent.attendees) { - emailsToSend.push( - sendEmail(() => new AttendeeDailyVideoDownloadRecordingEmail(calendarEvent, attendee, downloadLink)) - ); + // Only send to attendees if not disabled + if (!disableRecordingEmailsForGuests) { + for (const attendee of calendarEvent.attendees) { + emailsToSend.push( + sendEmail(() => new AttendeeDailyVideoDownloadRecordingEmail(calendarEvent, attendee, downloadLink)) + ); + } } await Promise.all(emailsToSend); }; diff --git a/packages/features/eventtypes/components/Locations.tsx b/packages/features/eventtypes/components/Locations.tsx index a71f2540cfdb46..584825999abca4 100644 --- a/packages/features/eventtypes/components/Locations.tsx +++ b/packages/features/eventtypes/components/Locations.tsx @@ -423,6 +423,21 @@ const Locations: React.FC = ({ /> )} + { + return ( + + ); + }} + /> + { disableRecordingForGuests: calVideoSettings.disableRecordingForGuests ?? false, disableRecordingForOrganizer: calVideoSettings.disableRecordingForOrganizer ?? false, redirectUrlOnExit: calVideoSettings.redirectUrlOnExit ?? null, + disableRecordingEmailsForGuests: calVideoSettings.disableRecordingEmailsForGuests ?? false, }, }; } diff --git a/packages/trpc/server/routers/viewer/eventTypes/types.ts b/packages/trpc/server/routers/viewer/eventTypes/types.ts index f7e0ae2464a73d..e68452faef4913 100644 --- a/packages/trpc/server/routers/viewer/eventTypes/types.ts +++ b/packages/trpc/server/routers/viewer/eventTypes/types.ts @@ -33,6 +33,7 @@ const calVideoSettingsSchema = z disableTranscriptionForGuests: z.boolean().optional().nullable(), disableTranscriptionForOrganizer: z.boolean().optional().nullable(), redirectUrlOnExit: z.string().url().optional().nullable(), + disableRecordingEmailsForGuests: z.boolean().optional().nullable(), }) .optional() .nullable();