From 8b9693ea608be7c5752896fa6c3746cc01d9d2e0 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Mon, 25 Nov 2024 08:34:59 +0100 Subject: [PATCH] fix: v2 booking location (#17817) * fix: create-booking.input dont require location to be url * fix: return video call url for booking location * try to debug test * remove test file --- .../2024-08-13/services/output.service.ts | 47 +++++++++++-------- .../2024-08-13/inputs/create-booking.input.ts | 1 - 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/apps/api/v2/src/ee/bookings/2024-08-13/services/output.service.ts b/apps/api/v2/src/ee/bookings/2024-08-13/services/output.service.ts index a7cc4e1bd6..50cc9c411b 100644 --- a/apps/api/v2/src/ee/bookings/2024-08-13/services/output.service.ts +++ b/apps/api/v2/src/ee/bookings/2024-08-13/services/output.service.ts @@ -56,12 +56,7 @@ type DatabaseBooking = Booking & { type BookingWithUser = Booking & { user: { id: number; name: string | null; email: string } | null }; -const bookingUserMetadataSchema = bookingMetadataSchema.transform((data) => { - if (data === null) return {}; - // note(Lauris): return only user defined metadata - const { videoCallUrl, ...rest } = data; - return rest; -}); +type DatabaseMetadata = z.infer; const seatedBookingMetadataSchema = z.object({}).catchall(z.string()); @@ -73,9 +68,9 @@ export class OutputBookingsService_2024_08_13 { const dateStart = DateTime.fromISO(databaseBooking.startTime.toISOString()); const dateEnd = DateTime.fromISO(databaseBooking.endTime.toISOString()); const duration = dateEnd.diff(dateStart, "minutes").minutes; - const bookingResponses = bookingResponsesSchema.parse(databaseBooking.responses); - const metadata = bookingUserMetadataSchema.parse(databaseBooking.metadata); + const metadata = bookingMetadataSchema.parse(databaseBooking.metadata); + const location = metadata?.videoCallUrl || databaseBooking.location; const booking = { id: databaseBooking.id, @@ -101,9 +96,9 @@ export class OutputBookingsService_2024_08_13 { absent: !!attendee.noShow, })), guests: bookingResponses.guests, - location: databaseBooking.location, + location, // note(Lauris): meetingUrl is deprecated - meetingUrl: databaseBooking.location, + meetingUrl: location, absentHost: !!databaseBooking.noShowHost, createdAt: databaseBooking.createdAt, }; @@ -111,10 +106,18 @@ export class OutputBookingsService_2024_08_13 { const bookingTransformed = plainToClass(BookingOutput_2024_08_13, booking, { strategy: "excludeAll" }); // note(Lauris): I don't know why plainToClass erases bookings responses and metadata so attaching manually bookingTransformed.bookingFieldsResponses = bookingResponses; - bookingTransformed.metadata = metadata; + bookingTransformed.metadata = this.getUserDefinedMetadata(metadata); return bookingTransformed; } + getUserDefinedMetadata(databaseMetadata: DatabaseMetadata) { + if (databaseMetadata === null) return {}; + + const { videoCallUrl, ...userDefinedMetadata } = databaseMetadata; + + return userDefinedMetadata; + } + async getOutputRecurringBookings(bookingsIds: number[]) { const transformed = []; @@ -134,9 +137,9 @@ export class OutputBookingsService_2024_08_13 { const dateStart = DateTime.fromISO(databaseBooking.startTime.toISOString()); const dateEnd = DateTime.fromISO(databaseBooking.endTime.toISOString()); const duration = dateEnd.diff(dateStart, "minutes").minutes; - const bookingResponses = bookingResponsesSchema.parse(databaseBooking.responses); - const metadata = bookingUserMetadataSchema.parse(databaseBooking.metadata); + const metadata = bookingMetadataSchema.parse(databaseBooking.metadata); + const location = metadata?.videoCallUrl || databaseBooking.location; const booking = { id: databaseBooking.id, @@ -162,9 +165,9 @@ export class OutputBookingsService_2024_08_13 { absent: !!attendee.noShow, })), guests: bookingResponses.guests, - location: databaseBooking.location, + location, // note(Lauris): meetingUrl is deprecated - meetingUrl: databaseBooking.location, + meetingUrl: location, recurringBookingUid: databaseBooking.recurringEventId, absentHost: !!databaseBooking.noShowHost, bookingFieldsResponses: databaseBooking.responses, @@ -176,7 +179,7 @@ export class OutputBookingsService_2024_08_13 { }); // note(Lauris): I don't know why plainToClass erases bookings responses and metadata so attaching manually bookingTransformed.bookingFieldsResponses = bookingResponses; - bookingTransformed.metadata = metadata; + bookingTransformed.metadata = this.getUserDefinedMetadata(metadata); return bookingTransformed; } @@ -192,6 +195,8 @@ export class OutputBookingsService_2024_08_13 { const dateStart = DateTime.fromISO(databaseBooking.startTime.toISOString()); const dateEnd = DateTime.fromISO(databaseBooking.endTime.toISOString()); const duration = dateEnd.diff(dateStart, "minutes").minutes; + const metadata = bookingMetadataSchema.parse(databaseBooking.metadata); + const location = metadata?.videoCallUrl || databaseBooking.location; const booking = { id: databaseBooking.id, @@ -208,9 +213,9 @@ export class OutputBookingsService_2024_08_13 { // note(Lauris): eventTypeId is deprecated eventTypeId: databaseBooking.eventTypeId, attendees: [], - location: databaseBooking.location, + location, // note(Lauris): meetingUrl is deprecated - meetingUrl: databaseBooking.location, + meetingUrl: location, absentHost: !!databaseBooking.noShowHost, createdAt: databaseBooking.createdAt, }; @@ -285,6 +290,8 @@ export class OutputBookingsService_2024_08_13 { const dateStart = DateTime.fromISO(databaseBooking.startTime.toISOString()); const dateEnd = DateTime.fromISO(databaseBooking.endTime.toISOString()); const duration = dateEnd.diff(dateStart, "minutes").minutes; + const metadata = bookingMetadataSchema.parse(databaseBooking.metadata); + const location = metadata?.videoCallUrl || databaseBooking.location; const booking = { id: databaseBooking.id, @@ -302,9 +309,9 @@ export class OutputBookingsService_2024_08_13 { // note(Lauris): eventTypeId is deprecated eventTypeId: databaseBooking.eventTypeId, attendees: [], - location: databaseBooking.location, + location, // note(Lauris): meetingUrl is deprecated - meetingUrl: databaseBooking.location, + meetingUrl: location, recurringBookingUid: databaseBooking.recurringEventId, absentHost: !!databaseBooking.noShowHost, createdAt: databaseBooking.createdAt, diff --git a/packages/platform/types/bookings/2024-08-13/inputs/create-booking.input.ts b/packages/platform/types/bookings/2024-08-13/inputs/create-booking.input.ts index cbe2b43767..1ef11d2a7e 100644 --- a/packages/platform/types/bookings/2024-08-13/inputs/create-booking.input.ts +++ b/packages/platform/types/bookings/2024-08-13/inputs/create-booking.input.ts @@ -119,7 +119,6 @@ export class CreateBookingInput_2024_08_13 { example: "https://example.com/meeting", required: false, }) - @IsUrl() @IsOptional() location?: string;