fix: attendees move to use pick, separate patch/post
This commit is contained in:
@@ -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
|
||||
);
|
||||
|
||||
@@ -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" });
|
||||
|
||||
@@ -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<AttendeeResponse>) {
|
||||
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<Att
|
||||
break;
|
||||
|
||||
case "PATCH":
|
||||
const safeBody = schemaAttendeeEditBodyParams.safeParse(body);
|
||||
if (!safeBody.success) {
|
||||
res.status(400).json({ message: "Bad request", error: safeBody.error });
|
||||
throw new Error("Invalid request body");
|
||||
|
||||
@@ -4,7 +4,7 @@ import prisma from "@calcom/prisma";
|
||||
|
||||
import { withMiddleware } from "@lib/helpers/withMiddleware";
|
||||
import { AttendeeResponse, AttendeesResponse } from "@lib/types";
|
||||
import { schemaAttendeeBodyParams, schemaAttendeePublic, withValidAttendee } from "@lib/validations/attendee";
|
||||
import { schemaAttendeeCreateBodyParams, schemaAttendeePublic } from "@lib/validations/attendee";
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
@@ -61,7 +61,7 @@ async function createOrlistAllAttendees(
|
||||
error,
|
||||
});
|
||||
} else if (method === "POST") {
|
||||
const safe = schemaAttendeeBodyParams.safeParse(req.body);
|
||||
const safe = schemaAttendeeCreateBodyParams.safeParse(req.body);
|
||||
if (!safe.success) {
|
||||
throw new Error("Invalid request body", safe.error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user