diff --git a/apps/api/lib/validations/event-type.ts b/apps/api/lib/validations/event-type.ts index 5d84b03cca..3c6c839fc1 100644 --- a/apps/api/lib/validations/event-type.ts +++ b/apps/api/lib/validations/event-type.ts @@ -33,12 +33,14 @@ export const schemaEventTypeBaseBodyParams = EventType.pick({ position: true, eventName: true, timeZone: true, + schedulingType: true, + // START Limit future bookings periodType: true, periodStartDate: true, - schedulingType: true, periodEndDate: true, periodDays: true, periodCountCalendarDays: true, + // END Limit future bookings requiresConfirmation: true, disableGuests: true, hideCalendarNotes: true, @@ -51,6 +53,8 @@ export const schemaEventTypeBaseBodyParams = EventType.pick({ slotInterval: true, successRedirectUrl: true, locations: true, + bookingLimits: true, + durationLimits: true, }) .merge(z.object({ hosts: z.array(hostSchema).optional().default([]) })) .partial() @@ -126,6 +130,8 @@ export const schemaEventTypeReadPublic = EventType.pick({ seatsPerTimeSlot: true, seatsShowAttendees: true, bookingFields: true, + bookingLimits: true, + durationLimits: true, }).merge( z.object({ locations: z diff --git a/apps/api/pages/api/event-types/[id]/_patch.ts b/apps/api/pages/api/event-types/[id]/_patch.ts index 0cd8b3cf24..19f50db189 100644 --- a/apps/api/pages/api/event-types/[id]/_patch.ts +++ b/apps/api/pages/api/event-types/[id]/_patch.ts @@ -1,4 +1,4 @@ -import type { Prisma } from "@prisma/client"; +import { Prisma } from "@prisma/client"; import type { NextApiRequest } from "next"; import type { z } from "zod"; @@ -202,10 +202,17 @@ import checkTeamEventEditPermission from "../_utils/checkTeamEventEditPermission export async function patchHandler(req: NextApiRequest) { const { prisma, query, body } = req; const { id } = schemaQueryIdParseInt.parse(query); - const { hosts = [], ...parsedBody } = schemaEventTypeEditBodyParams.parse(body); + const { + hosts = [], + bookingLimits, + durationLimits, + ...parsedBody + } = schemaEventTypeEditBodyParams.parse(body); const data: Prisma.EventTypeUpdateArgs["data"] = { ...parsedBody, + bookingLimits: bookingLimits === null ? Prisma.DbNull : bookingLimits, + durationLimits: durationLimits === null ? Prisma.DbNull : durationLimits, }; if (hosts) { diff --git a/apps/api/pages/api/event-types/_post.ts b/apps/api/pages/api/event-types/_post.ts index d588b40d68..852b20158f 100644 --- a/apps/api/pages/api/event-types/_post.ts +++ b/apps/api/pages/api/event-types/_post.ts @@ -1,4 +1,4 @@ -import type { Prisma } from "@prisma/client"; +import { Prisma } from "@prisma/client"; import type { NextApiRequest } from "next"; import { HttpError } from "@calcom/lib/http-error"; @@ -259,12 +259,19 @@ import ensureOnlyMembersAsHosts from "./_utils/ensureOnlyMembersAsHosts"; async function postHandler(req: NextApiRequest) { const { userId, isAdmin, prisma, body } = req; - const { hosts = [], ...parsedBody } = schemaEventTypeCreateBodyParams.parse(body || {}); + const { + hosts = [], + bookingLimits, + durationLimits, + ...parsedBody + } = schemaEventTypeCreateBodyParams.parse(body || {}); let data: Prisma.EventTypeCreateArgs["data"] = { ...parsedBody, userId, users: { connect: { id: userId } }, + bookingLimits: bookingLimits === null ? Prisma.DbNull : bookingLimits, + durationLimits: durationLimits === null ? Prisma.DbNull : durationLimits, }; await checkPermissions(req); diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index 5983f224f7..f841104ff1 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -79,7 +79,9 @@ model EventType { bookingFields Json? timeZone String? periodType PeriodType @default(UNLIMITED) + /// @zod.custom(imports.coerceToDate) periodStartDate DateTime? + /// @zod.custom(imports.coerceToDate) periodEndDate DateTime? periodDays Int? periodCountCalendarDays Boolean? diff --git a/packages/prisma/zod-utils.ts b/packages/prisma/zod-utils.ts index d50f6c904f..1f36ebdd86 100644 --- a/packages/prisma/zod-utils.ts +++ b/packages/prisma/zod-utils.ts @@ -608,3 +608,5 @@ export const ZVerifyCodeInputSchema = z.object({ }); export type ZVerifyCodeInputSchema = z.infer; + +export const coerceToDate = z.coerce.date();