// import { user } from '@/feactures/auth/schemas/register'; // import { all } from 'axios'; import { url } from 'inspector'; import { z } from 'zod'; export type InventoryTable = z.infer; export type EditInventory = z.infer; export type ProductApiResponseSchema = z.infer; export type allProducts = z.infer; const MAX_FILE_SIZE = 5242880; // 5MB en bytes const ACCEPTED_IMAGE_TYPES = ["image/jpeg", "image/jpg", "image/png", "image/webp"]; const MAX_FILENAME_LENGTH = 50; export const product = z.object({ id: z.number().optional(), title: z.string(), description: z.string(), address: z.string(), // category: z.string(), stock: z.number(), price: z.string(), urlImg: z.custom().optional(), gallery: z.array(z.string()).optional(), // urlImg: z.string(), status: z.string(), userId: z.number().optional() }) export const seeProduct = product.extend({ urlImg: z.string(), }) export const productDetails = seeProduct.extend({ fullname: z.string(), phone: z.string().nullable(), email: z.string().email().nullable() }) export const editInventory = z.object({ id: z.number().optional(), title: z.string().min(5, { message: "Debe de tener 5 o más caracteres" }), description: z.string().min(10, { message: "Debe de tener 10 o más caracteres" }), stock: z.number(), address: z.string().min(5, { message: "Debe de tener 5 o más caracteres" }), price: z.string(), urlImg: z.custom() .refine((files) => files && files.length > 0, "Se requiere al menos una imagen") .refine((files) => files && files.length <= 10, "Máximo 10 imágenes") .refine((files) => files && Array.from(files).every(file => file.size <= MAX_FILE_SIZE), `El tamaño máximo de cada imagen es de 5MB` ).refine((files) => files && Array.from(files).every(file => ACCEPTED_IMAGE_TYPES.includes(file.type)), "Solo se aceptan archivos .jpg, .jpeg, .png y .webp" ).refine((files) => files && Array.from(files).every(file => file.name.length <= MAX_FILENAME_LENGTH), `El nombre de cada archivo no puede superar los ${MAX_FILENAME_LENGTH} caracteres` ), status: z.string().min(1, { message: "Debe de seleccionar un valor" }), userId: z.number().optional(), }) export const ApiResponseSchema = z.object({ message: z.string(), data: z.array(product), meta: z.object({ page: z.number(), limit: z.number(), totalCount: z.number(), totalPages: z.number(), hasNextPage: z.boolean(), hasPreviousPage: z.boolean(), nextPage: z.number().nullable(), previousPage: z.number().nullable(), }), }) export const productApiResponseSchema = z.object({ message: z.string(), data: z.array(productDetails), meta: z.object({ page: z.number(), limit: z.number(), totalCount: z.number(), totalPages: z.number(), hasNextPage: z.boolean(), hasPreviousPage: z.boolean(), nextPage: z.number().nullable(), previousPage: z.number().nullable(), }), }) export const test = z.object({ // message: z.string(), data: z.array(z.string()), }) export const productMutate = z.object({ message: z.string(), data: product, }) export const getProduct = z.object({ message: z.string(), data: productDetails, })