From 3759eccfca19433b9215d2f360c4287ee58135ea Mon Sep 17 00:00:00 2001 From: Agusti Fernandez Pardo Date: Tue, 26 Apr 2022 22:12:28 +0200 Subject: [PATCH] fix: attendees move to use pick, separate patch/post --- lib/validations/attendee.ts | 27 +++++++++++++++++++-------- lib/validations/user.ts | 7 ++----- pages/api/attendees/[id].ts | 4 ++-- pages/api/attendees/index.ts | 4 ++-- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/lib/validations/attendee.ts b/lib/validations/attendee.ts index 290ea16adf..5b7fee4e7f 100644 --- a/lib/validations/attendee.ts +++ b/lib/validations/attendee.ts @@ -3,21 +3,32 @@ import { z } from "zod"; import { _AttendeeModel as Attendee } from "@calcom/prisma/zod"; -export const schemaAttendeeBaseBodyParams = Attendee.omit({ id: true }).partial(); +export const schemaAttendeeBaseBodyParams = Attendee.pick({ + bookingId: true, + email: true, + name: true, + timeZone: true, +}).partial(); export const schemaAttendeePublic = Attendee.omit({}); -const schemaAttendeeRequiredParams = z.object({ +const schemaAttendeeCreateRequiredParams = z.object({ bookingId: z.any(), email: z.string().email(), name: z.string(), timeZone: z.string(), }); -export const schemaAttendeeBodyParams = schemaAttendeeBaseBodyParams.merge(schemaAttendeeRequiredParams); - -export const withValidAttendee = withValidation({ - schema: schemaAttendeeBodyParams, - type: "Zod", - mode: "body", +const schemaAttendeeEditeRequiredParams = z.object({ + // bookingId: z.any(), + // @note: disallowing email changes in attendee via API for now. + // email: z.string().email(), + name: z.string(), + timeZone: z.string(), }); +export const schemaAttendeeEditBodyParams = schemaAttendeeBaseBodyParams.merge( + schemaAttendeeEditeRequiredParams +); +export const schemaAttendeeCreateBodyParams = schemaAttendeeBaseBodyParams.merge( + schemaAttendeeCreateRequiredParams +); diff --git a/lib/validations/user.ts b/lib/validations/user.ts index 7452c6ad44..c3e26e9cb0 100644 --- a/lib/validations/user.ts +++ b/lib/validations/user.ts @@ -74,7 +74,7 @@ export const schemaUserBaseBodyParams = User.pick({ // Here we can both require or not (adding optional or nullish) and also rewrite validations for any value // for example making weekStart only accept weekdays as input -const schemaUserRequiredParams = z.object({ +const schemaUserEditParams = z.object({ weekStart: z.nativeEnum(weekdays).optional(), brandColor: z.string().min(4).max(9).regex(/^#/).optional(), timeZone: z @@ -96,7 +96,7 @@ const schemaUserRequiredParams = z.object({ // @note: These are the values that are editable via PATCH method on the user Model, // merging both BaseBodyParams with RequiredParams, and omiting whatever we want at the end. -export const schemaUserEditBodyParams = schemaUserBaseBodyParams.merge(schemaUserRequiredParams).omit({}); +export const schemaUserEditBodyParams = schemaUserBaseBodyParams.merge(schemaUserEditParams).omit({}); // @note: These are the values that are always returned when reading a user export const schemaUserReadPublic = User.pick({ @@ -123,6 +123,3 @@ export const schemaUserReadPublic = User.pick({ verified: true, invitedTo: true, }); - -// @note: This is the validation for the PATCH method on the user Model. Not used for now. -export const withValidUser = withValidation({ schema: schemaUserEditBodyParams, type: "Zod", mode: "body" }); diff --git a/pages/api/attendees/[id].ts b/pages/api/attendees/[id].ts index e6780c6929..23712e58b6 100644 --- a/pages/api/attendees/[id].ts +++ b/pages/api/attendees/[id].ts @@ -4,7 +4,7 @@ import prisma from "@calcom/prisma"; import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { AttendeeResponse } from "@lib/types"; -import { schemaAttendeeBodyParams, schemaAttendeePublic } from "@lib/validations/attendee"; +import { schemaAttendeeEditBodyParams, schemaAttendeePublic } from "@lib/validations/attendee"; import { schemaQueryIdParseInt, withValidQueryIdTransformParseInt, @@ -88,7 +88,6 @@ import { export async function attendeeById(req: NextApiRequest, res: NextApiResponse) { const { method, query, body, userId } = req; const safeQuery = schemaQueryIdParseInt.safeParse(query); - const safeBody = schemaAttendeeBodyParams.safeParse(body); if (!safeQuery.success) { res.status(400).json({ error: safeQuery.error }); throw new Error("Invalid request query", safeQuery.error); @@ -117,6 +116,7 @@ export async function attendeeById(req: NextApiRequest, res: NextApiResponse