Skip to content
Snippets Groups Projects
shoppingcart.schema.ts 3.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { CustomError } from "../../../error/CustomError";
    import { z } from "zod";
    
    export const addShoppingCartSchema = z.object({
      name: z
        .string()
        .min(1, {
          message: 'The "name" field is required and must be a non-empty string.',
        })
        .catch((err) => {
          throw new CustomError(
            "Invalid 'name' field",
            400,
            "INVALID_NAME",
            err.error.message
          );
        }),
    
      beschreibung: z
        .string()
        .min(1, {
          message:
            'The "beschreibung" field is required and must be a non-empty string.',
        })
        .catch((err) => {
          throw new CustomError(
            "Invalid 'beschreibung' field",
            400,
            "INVALID_BESCHREIBUNG",
            err.error.message
          );
        }),
    });
    
    export const deleteShoppingCartSchema = z.object({
      id: z
        .number()
        .min(1, {
          message: "The 'id' field must be a valid number and greater than 0.",
        })
        .catch((err) => {
          throw new CustomError(
            "Invalid or missing 'id'",
            400,
            "INVALID_OR_MISSING_ID",
            err.error.message
          );
        }),
    });
    
    export const queryIdSchema = z
      .object({
        id: z
          .string()
          .refine((data) => /[0-9]+/.test(data) && Number(data) >= 0, {
            message: "id must be a non-negative integer.",
          })
          .catch((err) => {
            throw new CustomError(
              "Invalid ID",
              400,
              "INVALID_OR_MISSING_ID",
              err.error.message
            );
          }),
      })
      .strict()
      .catch((err) => {
        throw new CustomError(
          "Unexpected fields for query",
          400,
          "UNEXPECTED_FIELDS_IN_QUERY",
          "Details: Only 'id' should be present in the query parameters."
        );
      });
    
    export const queryNameSchema = z
      .object({
        name: z
          .string()
          .min(1, { message: "name must be a non-empty string." })
          .catch((err) => {
            throw new CustomError(
              "Invalid Name",
              400,
              "INVALID_OR_MISSING_NAME",
              err.error.message
            );
          }),
      })
      .strict()
      .catch((err: any) => {
        throw new CustomError(
          "Unexpected fields for query",
          400,
          "UNEXPECTED_FIELDS_IN_QUERY",
          err.error.message
        );
      });
    
    export const updateShoppingCartSchema = z.object({
      id: z
        .number()
        .min(1, {
          message: "The 'id' field must be a valid number and greater than 0.",
        })
        .catch((err) => {
          throw new CustomError(
            "Invalid or missing 'id'",
            400,
            "INVALID_OR_MISSING_ID",
            err.error.message
          );
        }),
    
      name: z
        .string()
        .optional()
        .catch((err) => {
          throw new CustomError(
            "Invalid value for 'name'",
            400,
            "INVALID_NAME_TYPE",
            err.error.message
          );
        }),
    
      beschreibung: z
        .string()
        .optional()
        .catch((err) => {
          throw new CustomError(
            "Invalid value for 'beschreibung'",
            400,
            "INVALID_BESCHREIBUNG_TYPE",
            err.error.message
          );
        }),
    });
    
    Iheb Boussida's avatar
    Iheb Boussida committed
    
    
    export const queryShoppingartParamsSchema = z
      .object({
        name: z.string({ message: "name must be a string" }).optional(),
        beschreibung: z.string().optional() 
      })
      .refine((data) => Object.keys(data).length === 1, {
        message: "only one key (name,  description) is allowed at a time",
      })
      .catch((err) => {
        throw new CustomError(
          "wrong prarams ",
          422,
          "Unaccesable_entity",
          err.error.message
        );
      });