* feat: skip platform billing for non-platform-managed users - Add isPlatformManaged to user select in saveBooking and findBookingQuery - Update 2024-04-15 booking controller to check isPlatformManaged before billing - Update 2024-08-13 bookings service billBooking methods to check isPlatformManaged - Update buildDryRunBooking to include isPlatformManaged in user object Co-Authored-By: morgan@cal.com <morgan@cal.com> * test: update buildDryRunBooking test to include uuid and isPlatformManaged fields Co-Authored-By: morgan@cal.com <morgan@cal.com> * refactor: simplify to only check isPlatformManaged in normal booking flow Co-Authored-By: morgan@cal.com <morgan@cal.com> * test: add E2E tests for billing behavior based on isPlatformManaged flag Co-Authored-By: morgan@cal.com <morgan@cal.com> * chore: only trigger platform billing for platform user bookingd * test: add E2E tests for cancel and recurring booking billing behavior Co-Authored-By: morgan@cal.com <morgan@cal.com> * fix: correct expected status code for cancel booking endpoint (201 instead of 200) Co-Authored-By: morgan@cal.com <morgan@cal.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import { withReporting } from "@calcom/lib/sentryWrapper";
|
|
import prisma from "@calcom/prisma";
|
|
|
|
// Define the function with underscore prefix
|
|
const _findBookingQuery = async (bookingId: number) => {
|
|
const foundBooking = await prisma.booking.findUnique({
|
|
where: {
|
|
id: bookingId,
|
|
},
|
|
select: {
|
|
uid: true,
|
|
location: true,
|
|
startTime: true,
|
|
endTime: true,
|
|
title: true,
|
|
description: true,
|
|
status: true,
|
|
responses: true,
|
|
metadata: true,
|
|
user: {
|
|
select: {
|
|
uuid: true,
|
|
name: true,
|
|
email: true,
|
|
timeZone: true,
|
|
username: true,
|
|
isPlatformManaged: true,
|
|
},
|
|
},
|
|
eventType: {
|
|
select: {
|
|
title: true,
|
|
description: true,
|
|
currency: true,
|
|
length: true,
|
|
lockTimeZoneToggleOnBookingPage: true,
|
|
requiresConfirmation: true,
|
|
requiresBookerEmailVerification: true,
|
|
price: true,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
// This should never happen but it's just typescript safe
|
|
if (!foundBooking) {
|
|
throw new Error("Internal Error. Couldn't find booking");
|
|
}
|
|
|
|
// Don't leak any sensitive data
|
|
return foundBooking;
|
|
};
|
|
|
|
export const findBookingQuery = withReporting(_findBookingQuery, "findBookingQuery");
|