fix: v2 api fix recurring booking (#16472)

* fix: v2 POST recurring booking

* refactor: have default recurringEventId for recurring booking
This commit is contained in:
Lauris Skraucis
2024-09-05 08:37:26 +00:00
committed by GitHub
parent 2de33fe1bf
commit 633697a812
3 changed files with 27 additions and 6 deletions
@@ -35,6 +35,7 @@ import { ApiQuery, ApiTags as DocsTags } from "@nestjs/swagger";
import { User } from "@prisma/client";
import { Request } from "express";
import { NextApiRequest } from "next/types";
import { v4 as uuidv4 } from "uuid";
import { X_CAL_CLIENT_ID } from "@calcom/platform-constants";
import { BOOKING_READ, SUCCESS_STATUS, BOOKING_WRITE } from "@calcom/platform-constants";
@@ -244,8 +245,15 @@ export class BookingsController {
): Promise<ApiResponse<BookingResponse[]>> {
const oAuthClientId = clientId?.toString();
try {
const recurringEventId = uuidv4();
for (const recurringEvent of req.body) {
if (!recurringEvent.recurringEventId) {
recurringEvent.recurringEventId = recurringEventId;
}
}
const createdBookings: BookingResponse[] = await handleNewRecurringBooking(
await this.createNextApiBookingRequest(req, oAuthClientId)
await this.createNextApiRecurringBookingRequest(req, oAuthClientId)
);
createdBookings.forEach(async (booking) => {
@@ -352,6 +360,19 @@ export class BookingsController {
return req as unknown as NextApiRequest & { userId?: number } & OAuthRequestParams;
}
private async createNextApiRecurringBookingRequest(
req: BookingRequest,
oAuthClientId?: string,
platformBookingLocation?: string
): Promise<NextApiRequest & { userId?: number } & OAuthRequestParams> {
const userId = (await this.getOwnerId(req)) ?? -1;
const oAuthParams = oAuthClientId
? await this.getOAuthClientsParams(oAuthClientId)
: DEFAULT_PLATFORM_PARAMS;
Object.assign(req, { userId, ...oAuthParams, platformBookingLocation });
return req as unknown as NextApiRequest & { userId?: number } & OAuthRequestParams;
}
private handleBookingErrors(
err: Error | HttpError | unknown,
type?: "recurring" | `instant` | "no-show"
@@ -59,10 +59,6 @@ export class CreateBookingInput {
@IsOptional()
rescheduleUid?: string;
@IsString()
@IsOptional()
recurringEventId?: string;
@IsTimeZone()
timeZone!: string;
@@ -1,5 +1,5 @@
import { CreateBookingInput } from "@/ee/bookings/inputs/create-booking.input";
import { IsBoolean, IsNumber, IsOptional } from "class-validator";
import { IsBoolean, IsString, IsNumber, IsOptional } from "class-validator";
import type { AppsStatus } from "@calcom/platform-libraries";
@@ -21,4 +21,8 @@ export class CreateRecurringBookingInput extends CreateBookingInput {
@IsOptional()
@IsNumber()
currentRecurringIndex?: number;
@IsString()
@IsOptional()
recurringEventId?: string;
}