hunk.code_window:     length: z.number().int(),
       metadata: z.any().optional(),
       recurringEvent: recurringEventInputSchema.optional(),
     })
     .strict();
   export const schemaEventTypeCreateBodyParams = schemaEventTypeBaseBodyParams
     .merge(schemaEventTypeCreateParams)
  
hunk.labels: keep keep add keep keep keep keep keep
hunk.after_edit:     seatsPerTimeSlot: z.number().optional(),
       seatsShowAttendees: z.boolean().optional(),
  
hunk.file_path: lib/validations/event-type.ts
hunk.type: add
file: import { MembershipRole } from "@prisma/client";
  import { z } from "zod";
  
  import { _MembershipModel as Membership, _TeamModel } from "@calcom/prisma/zod";
  import { stringOrNumber } from "@calcom/prisma/zod-utils";
  
  import { schemaQueryIdAsString } from "~/lib/validations/shared/queryIdString";
  import { schemaQueryIdParseInt } from "~/lib/validations/shared/queryIdTransformParseInt";
  
  export const schemaMembershipBaseBodyParams = Membership.omit({});
  
  const schemaMembershipRequiredParams = z.object({
    teamId: z.number(),
  });
  
  export const membershipCreateBodySchema = Membership.partial({
    accepted: true,
    role: true,
    disableImpersonation: true,
  }).transform((v) => ({
    accepted: false,
    role: MembershipRole.MEMBER,
    disableImpersonation: false,
    ...v,
  }));
  
  export const membershipEditBodySchema = Membership.omit({
    /** To avoid complication, let's avoid updating these, instead you can delete and create a new invite */
    teamId: true,
    userId: true,
  })
    .partial({
      accepted: true,
      role: true,
      disableImpersonation: true,
    })
    .strict();
  
  export const schemaMembershipBodyParams = schemaMembershipBaseBodyParams.merge(
    schemaMembershipRequiredParams
  );
  
  export const schemaMembershipPublic = Membership.merge(z.object({ team: _TeamModel }).partial());
  
  /** We extract userId and teamId from compound ID string */
  export const membershipIdSchema = schemaQueryIdAsString
    // So we can query additional team data in memberships
    .merge(z.object({ teamId: z.union([stringOrNumber, z.array(stringOrNumber)]) }).partial())
    .transform((v, ctx) => {
      const [userIdStr, teamIdStr] = v.id.split("_");
      const userIdInt = schemaQueryIdParseInt.safeParse({ id: userIdStr });
      const teamIdInt = schemaQueryIdParseInt.safeParse({ id: teamIdStr });
      if (!userIdInt.success) {
        ctx.addIssue({ code: z.ZodIssueCode.custom, message: "userId is not a number" });
        return z.NEVER;
      }
      if (!teamIdInt.success) {
        ctx.addIssue({ code: z.ZodIssueCode.custom, message: "teamId is not a number " });
        return z.NEVER;
      }
      return {
        userId: userIdInt.data.id,
        teamId: teamIdInt.data.id,
      };
    });
  