// import { user } from '@/feactures/auth/schemas/register'; // import { all } from 'axios'; import { z } from 'zod'; export type InventoryTable = z.infer; export type EditInventory = z.infer; export type ProductApiResponseSchema = z.infer; export type allProducts = z.infer; // --- Esquemas de validación para archivos --- // Esquema básico para un solo archivo const fileSchema = z.object({ name: z.string().min(1, 'El nombre del archivo no puede estar vacío.'), size: z.number().int().positive('El tamaño del archivo debe ser positivo.'), type: z.string().refine( (type) => type.startsWith('image/'), 'Solo se permiten archivos de imagen.' ), // Puedes añadir más validaciones personalizadas aquí // Por ejemplo, limitar el tamaño máximo a 5MB (5 * 1024 * 1024 bytes) }).refine( (file) => file.size <= 5 * 1024 * 1024, 'El tamaño del archivo no debe exceder los 5MB.' ); // Esquema para un array de archivos (cuando el input es multiple) const filesArraySchema = z.array(fileSchema).max(5, 'Solo se permiten hasta 5 archivos.'); // const formSchema = z.object({ // file: z // .instanceof(FileList) // .refine((file) => file?.length == 1, 'File is required.') // }); 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.any(), // urlImg: z.string(), status: z.string(), userId: z.number().optional() }) export const productDetails = product.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.any(), status: z.string().min(1, { message: "Debe de seleccionar un valor" }), userId: z.number().optional(), }) // export const productDetails = z.object({ // id: z.number().optional(), // title: z.string().min(5), // description: z.string().min(10), // stock: z.number(), // price: z.string(), // address: z.string(), // urlImg: z.string(), // userId: z.number(), // }) 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, })