From 2646f57da4643b54f2b5a8349a65ba8d3221df26 Mon Sep 17 00:00:00 2001 From: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com> Date: Tue, 28 Jan 2025 22:52:37 +0400 Subject: [PATCH] fix: API V1 cancellationReason fallback/default and doc update (#18946) * adds fallback/default cancellationReason * add doc update --- apps/api/v1/lib/validations/booking.ts | 17 +++++++++++++++++ apps/api/v1/pages/api/bookings/[id]/_delete.ts | 3 ++- docs/api-reference/v1/openapi-v1.json | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/apps/api/v1/lib/validations/booking.ts b/apps/api/v1/lib/validations/booking.ts index 585efbdc67..acba26f724 100644 --- a/apps/api/v1/lib/validations/booking.ts +++ b/apps/api/v1/lib/validations/booking.ts @@ -38,6 +38,23 @@ export const schemaBookingGetParams = z.object({ export type Status = z.infer["status"]; +export const bookingCancelSchema = z.object({ + id: z.number(), + allRemainingBookings: z.boolean().optional(), + cancelSubsequentBookings: z.boolean().optional(), + cancellationReason: z.string().optional().default("Not Provided"), + seatReferenceUid: z.string().optional(), + cancelledBy: z.string().email({ message: "Invalid email" }).optional(), + internalNote: z + .object({ + id: z.number(), + name: z.string(), + cancellationReason: z.string().optional().nullable(), + }) + .optional() + .nullable(), +}); + const schemaBookingEditParams = z .object({ title: z.string().optional(), diff --git a/apps/api/v1/pages/api/bookings/[id]/_delete.ts b/apps/api/v1/pages/api/bookings/[id]/_delete.ts index f3406317d7..421302d405 100644 --- a/apps/api/v1/pages/api/bookings/[id]/_delete.ts +++ b/apps/api/v1/pages/api/bookings/[id]/_delete.ts @@ -2,8 +2,8 @@ import type { NextApiRequest } from "next"; import handleCancelBooking from "@calcom/features/bookings/lib/handleCancelBooking"; import { defaultResponder } from "@calcom/lib/server"; -import { bookingCancelSchema } from "@calcom/prisma/zod-utils"; +import { bookingCancelSchema } from "~/lib/validations/booking"; import { schemaQueryIdParseInt } from "~/lib/validations/shared/queryIdTransformParseInt"; /** @@ -70,6 +70,7 @@ async function handler(req: NextApiRequest) { ...req.query, allRemainingBookings: req.query.allRemainingBookings === "true", }); + // Normalizing for universal handler req.body = { id, allRemainingBookings, cancellationReason }; return await handleCancelBooking(req); diff --git a/docs/api-reference/v1/openapi-v1.json b/docs/api-reference/v1/openapi-v1.json index 8499371b97..7f96a2a602 100644 --- a/docs/api-reference/v1/openapi-v1.json +++ b/docs/api-reference/v1/openapi-v1.json @@ -1523,11 +1523,11 @@ { "in": "query", "name": "cancellationReason", - "required": false, + "required": true, "schema": { "type": "string" }, - "description": "The reason for cancellation of the booking" + "description": "The reason for cancellation of the booking, not required except for hosts" } ], "tags": ["Bookings"],