diff --git a/packages/features/bookings/lib/handleNewBooking.ts b/packages/features/bookings/lib/handleNewBooking.ts index 4977e6926a..cdb384eec5 100644 --- a/packages/features/bookings/lib/handleNewBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking.ts @@ -91,26 +91,23 @@ import { addVideoCallDataToEvent } from "./handleNewBooking/addVideoCallDataToEv import { checkBookingAndDurationLimits } from "./handleNewBooking/checkBookingAndDurationLimits"; import { checkIfBookerEmailIsBlocked } from "./handleNewBooking/checkIfBookerEmailIsBlocked"; import { createBooking } from "./handleNewBooking/createBooking"; +import type { Booking } from "./handleNewBooking/createBooking"; import { ensureAvailableUsers } from "./handleNewBooking/ensureAvailableUsers"; import { getBookingData } from "./handleNewBooking/getBookingData"; import { getCustomInputsResponses } from "./handleNewBooking/getCustomInputsResponses"; import { getEventTypesFromDB } from "./handleNewBooking/getEventTypesFromDB"; import type { getEventTypeResponse } from "./handleNewBooking/getEventTypesFromDB"; import { getLocationValuesForDb } from "./handleNewBooking/getLocationValuesForDb"; -import { getOriginalRescheduledBooking } from "./handleNewBooking/getOriginalRescheduledBooking"; import { getRequiresConfirmationFlags } from "./handleNewBooking/getRequiresConfirmationFlags"; import { getSeatedBooking } from "./handleNewBooking/getSeatedBooking"; import { getVideoCallDetails } from "./handleNewBooking/getVideoCallDetails"; import { handleAppsStatus } from "./handleNewBooking/handleAppsStatus"; import { loadAndValidateUsers } from "./handleNewBooking/loadAndValidateUsers"; +import { createLoggerWithEventDetails } from "./handleNewBooking/logger"; +import { getOriginalRescheduledBooking } from "./handleNewBooking/originalRescheduledBookingUtils"; +import type { BookingType } from "./handleNewBooking/originalRescheduledBookingUtils"; import { scheduleNoShowTriggers } from "./handleNewBooking/scheduleNoShowTriggers"; -import type { - Booking, - BookingType, - IEventTypePaymentCredentialType, - Invitee, - IsFixedAwareUser, -} from "./handleNewBooking/types"; +import type { IEventTypePaymentCredentialType, Invitee, IsFixedAwareUser } from "./handleNewBooking/types"; import { validateBookingTimeIsNotOutOfBounds } from "./handleNewBooking/validateBookingTimeIsNotOutOfBounds"; import { validateEventLength } from "./handleNewBooking/validateEventLength"; import handleSeats from "./handleSeats/handleSeats"; @@ -122,16 +119,6 @@ type IsFixedAwareUserWithCredentials = Omit & { credentials: CredentialForCalendarService[]; }; -export const createLoggerWithEventDetails = ( - eventTypeId: number, - reqBodyUser: string | string[] | undefined, - eventTypeSlug: string | undefined -) => { - return logger.getSubLogger({ - prefix: ["book:user", `${eventTypeId}:${reqBodyUser}/${eventTypeSlug}`], - }); -}; - function assertNonEmptyArray(arr: T[]): asserts arr is [T, ...T[]] { if (arr.length === 0) { throw new Error("Array should have at least one item, but it's empty"); diff --git a/packages/features/bookings/lib/handleNewBooking/checkBookingAndDurationLimits.ts b/packages/features/bookings/lib/handleNewBooking/checkBookingAndDurationLimits.ts index 001b48eefe..c8b7d83859 100644 --- a/packages/features/bookings/lib/handleNewBooking/checkBookingAndDurationLimits.ts +++ b/packages/features/bookings/lib/handleNewBooking/checkBookingAndDurationLimits.ts @@ -3,7 +3,7 @@ import type { IntervalLimit } from "@calcom/lib/intervalLimits/intervalLimitSche import { checkBookingLimits } from "@calcom/lib/intervalLimits/server/checkBookingLimits"; import { checkDurationLimits } from "@calcom/lib/intervalLimits/server/checkDurationLimits"; -import type { NewBookingEventType } from "./types"; +import type { NewBookingEventType } from "./getEventTypesFromDB"; type EventType = Pick; diff --git a/packages/features/bookings/lib/handleNewBooking/createBooking.ts b/packages/features/bookings/lib/handleNewBooking/createBooking.ts index 370e250ee1..51cb4b97bc 100644 --- a/packages/features/bookings/lib/handleNewBooking/createBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking/createBooking.ts @@ -11,14 +11,11 @@ import type { CreationSource } from "@calcom/prisma/enums"; import type { CalendarEvent } from "@calcom/types/Calendar"; import type { TgetBookingDataSchema } from "../getBookingDataSchema"; -import type { - EventTypeId, - AwaitedBookingData, - NewBookingEventType, - PaymentAppData, - OriginalRescheduledBooking, - LoadedUsers, -} from "./types"; +import type { AwaitedBookingData, EventTypeId } from "./getBookingData"; +import type { NewBookingEventType } from "./getEventTypesFromDB"; +import type { LoadedUsers } from "./loadUsers"; +import type { OriginalRescheduledBooking } from "./originalRescheduledBookingUtils"; +import type { PaymentAppData } from "./types"; type ReqBodyWithEnd = TgetBookingDataSchema & { end: string }; diff --git a/packages/features/bookings/lib/handleNewBooking/ensureAvailableUsers.ts b/packages/features/bookings/lib/handleNewBooking/ensureAvailableUsers.ts index dab4cb06a7..9a613ca0b2 100644 --- a/packages/features/bookings/lib/handleNewBooking/ensureAvailableUsers.ts +++ b/packages/features/bookings/lib/handleNewBooking/ensureAvailableUsers.ts @@ -12,7 +12,8 @@ import { getPiiFreeUser } from "@calcom/lib/piiFreeData"; import { safeStringify } from "@calcom/lib/safeStringify"; import type { getEventTypeResponse } from "./getEventTypesFromDB"; -import type { IsFixedAwareUser, BookingType } from "./types"; +import type { BookingType } from "./originalRescheduledBookingUtils"; +import type { IsFixedAwareUser } from "./types"; type DateRange = { start: Dayjs; diff --git a/packages/features/bookings/lib/handleNewBooking/getBookingData.ts b/packages/features/bookings/lib/handleNewBooking/getBookingData.ts index 2360ff6661..ee37343032 100644 --- a/packages/features/bookings/lib/handleNewBooking/getBookingData.ts +++ b/packages/features/bookings/lib/handleNewBooking/getBookingData.ts @@ -8,8 +8,8 @@ import { ErrorCode } from "@calcom/lib/errorCodes"; import { bookingCreateSchemaLegacyPropsForApi } from "@calcom/prisma/zod/custom/booking"; import type { TgetBookingDataSchema } from "../getBookingDataSchema"; +import type { getEventTypeResponse } from "./getEventTypesFromDB"; import { handleCustomInputs } from "./handleCustomInputs"; -import type { getEventTypeResponse } from "./types"; type ReqBodyWithEnd = TgetBookingDataSchema & { end: string }; diff --git a/packages/features/bookings/lib/handleNewBooking/getCustomInputsResponses.ts b/packages/features/bookings/lib/handleNewBooking/getCustomInputsResponses.ts index 3cf9f15718..8a25516af8 100644 --- a/packages/features/bookings/lib/handleNewBooking/getCustomInputsResponses.ts +++ b/packages/features/bookings/lib/handleNewBooking/getCustomInputsResponses.ts @@ -4,7 +4,7 @@ import { slugify } from "@calcom/lib/slugify"; import type { bookingCreateSchemaLegacyPropsForApi } from "@calcom/prisma/zod/custom/booking"; import type { CalendarEvent } from "@calcom/types/Calendar"; -import type { getEventTypeResponse } from "./types"; +import type { getEventTypeResponse } from "./getEventTypesFromDB"; type CustomInputs = z.infer["customInputs"]; diff --git a/packages/features/bookings/lib/handleNewBooking/getEventTypesFromDB.ts b/packages/features/bookings/lib/handleNewBooking/getEventTypesFromDB.ts index 7bb923a7e3..96526f16de 100644 --- a/packages/features/bookings/lib/handleNewBooking/getEventTypesFromDB.ts +++ b/packages/features/bookings/lib/handleNewBooking/getEventTypesFromDB.ts @@ -2,6 +2,7 @@ import type { LocationObject } from "@calcom/app-store/locations"; import { workflowSelect } from "@calcom/ee/workflows/lib/getAllWorkflows"; import { getBookingFieldsWithSystemFields } from "@calcom/features/bookings/lib/getBookingFields"; import { parseRecurringEvent } from "@calcom/lib"; +import type { DefaultEvent } from "@calcom/lib/defaultEvents"; import { withSelectedCalendars } from "@calcom/lib/server/repository/user"; import prisma, { userSelect } from "@calcom/prisma"; import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/credential"; @@ -191,3 +192,5 @@ export const getEventTypesFromDB = async (eventTypeId: number) => { }; export type getEventTypeResponse = Awaited>; + +export type NewBookingEventType = DefaultEvent | getEventTypeResponse; diff --git a/packages/features/bookings/lib/handleNewBooking/getOriginalRescheduledBooking.ts b/packages/features/bookings/lib/handleNewBooking/getOriginalRescheduledBooking.ts deleted file mode 100644 index 5199885e65..0000000000 --- a/packages/features/bookings/lib/handleNewBooking/getOriginalRescheduledBooking.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { Prisma } from "@prisma/client"; - -import { BookingRepository } from "@calcom/lib/server/repository/booking"; - -import { validateOriginalRescheduledBooking } from "./validateOriginalRescheduledBooking"; - -export async function getOriginalRescheduledBooking(uid: string, seatsEventType?: boolean) { - const originalBooking = await BookingRepository.findOriginalRescheduledBooking(uid, seatsEventType); - validateOriginalRescheduledBooking(originalBooking); - - return originalBooking; -} - -export type BookingType = Prisma.PromiseReturnType; - -export type OriginalRescheduledBooking = Awaited>; diff --git a/packages/features/bookings/lib/handleNewBooking/handleAppsStatus.ts b/packages/features/bookings/lib/handleNewBooking/handleAppsStatus.ts index 67fdb38f27..b90237ca75 100644 --- a/packages/features/bookings/lib/handleNewBooking/handleAppsStatus.ts +++ b/packages/features/bookings/lib/handleNewBooking/handleAppsStatus.ts @@ -1,7 +1,8 @@ import type { AdditionalInformation, AppsStatus } from "@calcom/types/Calendar"; import type { EventResult } from "@calcom/types/EventManager"; -import type { ReqAppsStatus, Booking } from "./types"; +import type { Booking } from "./createBooking"; +import type { ReqAppsStatus } from "./getBookingData"; export function handleAppsStatus( results: EventResult[], diff --git a/packages/features/bookings/lib/handleNewBooking/loadAndValidateUsers.ts b/packages/features/bookings/lib/handleNewBooking/loadAndValidateUsers.ts index 5a2e87d655..438c28f72d 100644 --- a/packages/features/bookings/lib/handleNewBooking/loadAndValidateUsers.ts +++ b/packages/features/bookings/lib/handleNewBooking/loadAndValidateUsers.ts @@ -16,8 +16,8 @@ import { SchedulingType } from "@calcom/prisma/enums"; import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/credential"; import type { CredentialForCalendarService } from "@calcom/types/Credential"; +import type { NewBookingEventType } from "./getEventTypesFromDB"; import { loadUsers } from "./loadUsers"; -import type { NewBookingEventType } from "./types"; type Users = (Awaited>[number] & { isFixed?: boolean; diff --git a/packages/features/bookings/lib/handleNewBooking/loadUsers.ts b/packages/features/bookings/lib/handleNewBooking/loadUsers.ts index 71052cedaa..c3b7e3f19b 100644 --- a/packages/features/bookings/lib/handleNewBooking/loadUsers.ts +++ b/packages/features/bookings/lib/handleNewBooking/loadUsers.ts @@ -14,7 +14,7 @@ import { withSelectedCalendars, UserRepository } from "@calcom/lib/server/reposi import prisma, { userSelect } from "@calcom/prisma"; import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/credential"; -import type { NewBookingEventType } from "./types"; +import type { NewBookingEventType } from "./getEventTypesFromDB"; const log = logger.getSubLogger({ prefix: ["[loadUsers]:handleNewBooking "] }); @@ -135,3 +135,8 @@ export const findUsersByUsername = async ({ }; export type LoadedUsers = Awaited>; + +export type OrganizerUser = LoadedUsers[number] & { + isFixed?: boolean; + metadata?: Prisma.JsonValue; +}; diff --git a/packages/features/bookings/lib/handleNewBooking/logger.ts b/packages/features/bookings/lib/handleNewBooking/logger.ts new file mode 100644 index 0000000000..4189fcc6f2 --- /dev/null +++ b/packages/features/bookings/lib/handleNewBooking/logger.ts @@ -0,0 +1,11 @@ +import logger from "@calcom/lib/logger"; + +export const createLoggerWithEventDetails = ( + eventTypeId: number, + reqBodyUser: string | string[] | undefined, + eventTypeSlug: string | undefined +) => { + return logger.getSubLogger({ + prefix: ["book:user", `${eventTypeId}:${reqBodyUser}/${eventTypeSlug}`], + }); +}; diff --git a/packages/features/bookings/lib/handleNewBooking/validateOriginalRescheduledBooking.ts b/packages/features/bookings/lib/handleNewBooking/originalRescheduledBookingUtils.ts similarity index 52% rename from packages/features/bookings/lib/handleNewBooking/validateOriginalRescheduledBooking.ts rename to packages/features/bookings/lib/handleNewBooking/originalRescheduledBookingUtils.ts index 98d669155c..ea4f9667f8 100644 --- a/packages/features/bookings/lib/handleNewBooking/validateOriginalRescheduledBooking.ts +++ b/packages/features/bookings/lib/handleNewBooking/originalRescheduledBookingUtils.ts @@ -1,9 +1,10 @@ +import type { Prisma } from "@prisma/client"; + import { ErrorCode } from "@calcom/lib/errorCodes"; import { HttpError } from "@calcom/lib/http-error"; +import { BookingRepository } from "@calcom/lib/server/repository/booking"; import { BookingStatus } from "@calcom/prisma/enums"; -import { type OriginalRescheduledBooking } from "./getOriginalRescheduledBooking"; - export const validateOriginalRescheduledBooking = async ( originalRescheduledBooking: OriginalRescheduledBooking ) => { @@ -18,3 +19,14 @@ export const validateOriginalRescheduledBooking = async ( throw new HttpError({ statusCode: 403, message: ErrorCode.CancelledBookingsCannotBeRescheduled }); } }; + +export async function getOriginalRescheduledBooking(uid: string, seatsEventType?: boolean) { + const originalBooking = await BookingRepository.findOriginalRescheduledBooking(uid, seatsEventType); + validateOriginalRescheduledBooking(originalBooking); + + return originalBooking; +} + +export type BookingType = Prisma.PromiseReturnType; + +export type OriginalRescheduledBooking = Awaited>; diff --git a/packages/features/bookings/lib/handleNewBooking/types.ts b/packages/features/bookings/lib/handleNewBooking/types.ts index cda159e0e3..aad1ee9aae 100644 --- a/packages/features/bookings/lib/handleNewBooking/types.ts +++ b/packages/features/bookings/lib/handleNewBooking/types.ts @@ -3,34 +3,13 @@ import type { Prisma } from "@prisma/client"; import type { TFunction } from "next-i18next"; import type { EventTypeAppsList } from "@calcom/app-store/utils"; -import type { DefaultEvent } from "@calcom/lib/defaultEvents"; import type { PaymentAppData } from "@calcom/lib/getPaymentAppData"; import type { userSelect } from "@calcom/prisma"; import type { SelectedCalendar } from "@calcom/prisma/client"; import type { CredentialForCalendarService } from "@calcom/types/Credential"; -import type { Booking } from "./createBooking"; -import type { - AwaitedBookingData, - RescheduleReason, - NoEmail, - AdditionalNotes, - ReqAppsStatus, - SmsReminderNumber, - EventTypeId, - ReqBodyMetadata, -} from "./getBookingData"; -import type { getEventTypeResponse } from "./getEventTypesFromDB"; -import type { BookingType, OriginalRescheduledBooking } from "./getOriginalRescheduledBooking"; -import type { LoadedUsers } from "./loadUsers"; - type User = Omit, "selectedCalendars">; -export type OrganizerUser = LoadedUsers[number] & { - isFixed?: boolean; - metadata?: Prisma.JsonValue; -}; - export type Invitee = { email: string; name: string; @@ -63,21 +42,4 @@ export type IsFixedAwareUser = User & { allSelectedCalendars: SelectedCalendar[]; }; -export type NewBookingEventType = DefaultEvent | getEventTypeResponse; - -export type { - AwaitedBookingData, - RescheduleReason, - NoEmail, - AdditionalNotes, - ReqAppsStatus, - SmsReminderNumber, - EventTypeId, - ReqBodyMetadata, - PaymentAppData, - BookingType, - Booking, - OriginalRescheduledBooking, - LoadedUsers, - getEventTypeResponse, -}; +export type { PaymentAppData }; diff --git a/packages/features/bookings/lib/handleSeats/handleSeats.ts b/packages/features/bookings/lib/handleSeats/handleSeats.ts index 251096770f..ccc4e38a49 100644 --- a/packages/features/bookings/lib/handleSeats/handleSeats.ts +++ b/packages/features/bookings/lib/handleSeats/handleSeats.ts @@ -8,7 +8,7 @@ import { HttpError } from "@calcom/lib/http-error"; import prisma from "@calcom/prisma"; import { BookingStatus } from "@calcom/prisma/enums"; -import { createLoggerWithEventDetails } from "../handleNewBooking"; +import { createLoggerWithEventDetails } from "../handleNewBooking/logger"; import createNewSeat from "./create/createNewSeat"; import rescheduleSeatedBooking from "./reschedule/rescheduleSeatedBooking"; import type { NewSeatedBookingObject, SeatedBooking, HandleSeatsResultBooking } from "./types"; diff --git a/packages/features/bookings/lib/handleSeats/lib/lastAttendeeDeleteBooking.ts b/packages/features/bookings/lib/handleSeats/lib/lastAttendeeDeleteBooking.ts index fd95f2e97f..e1f53f5748 100644 --- a/packages/features/bookings/lib/handleSeats/lib/lastAttendeeDeleteBooking.ts +++ b/packages/features/bookings/lib/handleSeats/lib/lastAttendeeDeleteBooking.ts @@ -9,7 +9,7 @@ import prisma from "@calcom/prisma"; import { BookingStatus } from "@calcom/prisma/enums"; import type { CalendarEvent } from "@calcom/types/Calendar"; -import type { OriginalRescheduledBooking } from "../../handleNewBooking/types"; +import type { OriginalRescheduledBooking } from "../../handleNewBooking/originalRescheduledBookingUtils"; /* Check if the original booking has no more attendees, if so delete the booking and any calendar or video integrations */ diff --git a/packages/features/bookings/lib/handleSeats/reschedule/owner/combineTwoSeatedBookings.ts b/packages/features/bookings/lib/handleSeats/reschedule/owner/combineTwoSeatedBookings.ts index e28a0a6b11..1776208303 100644 --- a/packages/features/bookings/lib/handleSeats/reschedule/owner/combineTwoSeatedBookings.ts +++ b/packages/features/bookings/lib/handleSeats/reschedule/owner/combineTwoSeatedBookings.ts @@ -9,9 +9,9 @@ import { HttpError } from "@calcom/lib/http-error"; import prisma from "@calcom/prisma"; import { BookingStatus } from "@calcom/prisma/enums"; -import type { createLoggerWithEventDetails } from "../../../handleNewBooking"; import { addVideoCallDataToEvent } from "../../../handleNewBooking/addVideoCallDataToEvent"; import { findBookingQuery } from "../../../handleNewBooking/findBookingQuery"; +import type { createLoggerWithEventDetails } from "../../../handleNewBooking/logger"; import type { SeatedBooking, RescheduleSeatedBookingObject, NewTimeSlotBooking } from "../../types"; const combineTwoSeatedBookings = async ( diff --git a/packages/features/bookings/lib/handleSeats/reschedule/owner/moveSeatedBookingToNewTimeSlot.ts b/packages/features/bookings/lib/handleSeats/reschedule/owner/moveSeatedBookingToNewTimeSlot.ts index 320fb8634d..80cdf9d66f 100644 --- a/packages/features/bookings/lib/handleSeats/reschedule/owner/moveSeatedBookingToNewTimeSlot.ts +++ b/packages/features/bookings/lib/handleSeats/reschedule/owner/moveSeatedBookingToNewTimeSlot.ts @@ -6,11 +6,11 @@ import type EventManager from "@calcom/lib/EventManager"; import prisma from "@calcom/prisma"; import type { AdditionalInformation, AppsStatus } from "@calcom/types/Calendar"; -import type { createLoggerWithEventDetails } from "../../../handleNewBooking"; import { addVideoCallDataToEvent } from "../../../handleNewBooking/addVideoCallDataToEvent"; +import type { Booking } from "../../../handleNewBooking/createBooking"; import { findBookingQuery } from "../../../handleNewBooking/findBookingQuery"; import { handleAppsStatus } from "../../../handleNewBooking/handleAppsStatus"; -import type { Booking } from "../../../handleNewBooking/types"; +import type { createLoggerWithEventDetails } from "../../../handleNewBooking/logger"; import type { SeatedBooking, RescheduleSeatedBookingObject } from "../../types"; const moveSeatedBookingToNewTimeSlot = async ( diff --git a/packages/features/bookings/lib/handleSeats/reschedule/owner/ownerRescheduleSeatedBooking.ts b/packages/features/bookings/lib/handleSeats/reschedule/owner/ownerRescheduleSeatedBooking.ts index 317a131cef..28b3b731c0 100644 --- a/packages/features/bookings/lib/handleSeats/reschedule/owner/ownerRescheduleSeatedBooking.ts +++ b/packages/features/bookings/lib/handleSeats/reschedule/owner/ownerRescheduleSeatedBooking.ts @@ -1,7 +1,7 @@ // eslint-disable-next-line no-restricted-imports import type EventManager from "@calcom/lib/EventManager"; -import type { createLoggerWithEventDetails } from "../../../handleNewBooking"; +import type { createLoggerWithEventDetails } from "../../../handleNewBooking/logger"; import type { NewTimeSlotBooking, SeatedBooking, diff --git a/packages/features/bookings/lib/handleSeats/reschedule/rescheduleSeatedBooking.ts b/packages/features/bookings/lib/handleSeats/reschedule/rescheduleSeatedBooking.ts index c861df0082..5b573adaf7 100644 --- a/packages/features/bookings/lib/handleSeats/reschedule/rescheduleSeatedBooking.ts +++ b/packages/features/bookings/lib/handleSeats/reschedule/rescheduleSeatedBooking.ts @@ -7,7 +7,7 @@ import prisma from "@calcom/prisma"; import { BookingStatus } from "@calcom/prisma/enums"; import type { Person } from "@calcom/types/Calendar"; -import type { createLoggerWithEventDetails } from "../../handleNewBooking"; +import type { createLoggerWithEventDetails } from "../../handleNewBooking/logger"; import type { HandleSeatsResultBooking, SeatedBooking, diff --git a/packages/features/bookings/lib/handleSeats/types.d.ts b/packages/features/bookings/lib/handleSeats/types.d.ts index cf67e2d744..3e0dca860f 100644 --- a/packages/features/bookings/lib/handleSeats/types.d.ts +++ b/packages/features/bookings/lib/handleSeats/types.d.ts @@ -4,7 +4,9 @@ import type z from "zod"; import type { Workflow } from "@calcom/features/ee/workflows/lib/types"; import type { AppsStatus, CalendarEvent } from "@calcom/types/Calendar"; -import type { Booking, NewBookingEventType, OriginalRescheduledBooking } from "../handleNewBooking/types"; +import type { Booking } from "../handleNewBooking/createBooking"; +import type { NewBookingEventType } from "../handleNewBooking/getEventTypesFromDB"; +import type { OriginalRescheduledBooking } from "../handleNewBooking/originalRescheduledBookingUtils"; export type BookingSeat = Prisma.BookingSeatGetPayload<{ include: { booking: true; attendee: true } }> | null;