Skip to content

Commit

Permalink
fix: v2 booking location (calcom#17817)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
supalarry authored Nov 25, 2024
1 parent 935115d commit 8b9693e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 21 deletions.
47 changes: 27 additions & 20 deletions apps/api/v2/src/ee/bookings/2024-08-13/services/output.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<typeof bookingMetadataSchema>;

const seatedBookingMetadataSchema = z.object({}).catchall(z.string());

Expand All @@ -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,
Expand All @@ -101,20 +96,28 @@ 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,
};

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 = [];

Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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;
}

Expand All @@ -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,
Expand All @@ -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,
};
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ export class CreateBookingInput_2024_08_13 {
example: "https://example.com/meeting",
required: false,
})
@IsUrl()
@IsOptional()
location?: string;

Expand Down

0 comments on commit 8b9693e

Please sign in to comment.