Skip to main content

Validación ProductosModel

Este archivo define el esquema de validación para los productos utilizando Zod, una biblioteca de validación de datos en tiempo de ejecución para TypeScript. Se asegura de que los datos enviados al sistema cumplan con el formato y las reglas requeridas antes de ser procesados.


🔍 Ubicación

src/model/ProductosModel.ts


🧩 Dependencias

import { z } from "zod";

🧪 Enumeraciones

export const estadoEnum = z.enum([
"DISPONIBLE",
"AGOTADO",
"RESERVADO",
"VENCIDO",
"ELIMINADO"
]);

Esta enumeración valida que el estado del producto sea uno de los siguientes:

  • DISPONIBLE
  • AGOTADO
  • RESERVADO
  • VENCIDO
  • ELIMINADO

✅ Esquema de validación

export const productoSchema = z.object({
codigoBarras: z.string().optional().nullable(),
codigoQR: z.string().optional().nullable(),
nombre: z.string().min(1).trim(),
descripcion: z.string().min(1).trim(),
categoria: z.string().optional(),
cantidad: z.number().int().nonnegative(),
precio: z.preprocess((val) => Number(val), z.number().nonnegative({
message: "El precio debe ser un número válido",
})),
fechaAdquisicion: z.string().refine((val) => !isNaN(Date.parse(val)), {
message: "fechaAdquisicion debe ser una fecha válida (ISO string)",
}),
fechaVencimiento: z.string().refine((val) => !isNaN(Date.parse(val)), {
message: "fechaVencimiento debe ser una fecha válida (ISO string)",
}),
usuarioId: z.number().optional(),
estado: estadoEnum,
imagen: z.string().trim().url({ message: "imagen debe ser una URL válida" }),
});

🧾 Descripción de campos

CampoTipoRequeridoDescripción
codigoBarrasstring | nullOpcionalCódigo de barras del producto
codigoQRstring | nullOpcionalCódigo QR del producto
nombrestringNombre del producto (mínimo 1 caracter, sin espacios vacíos)
descripcionstringDescripción del producto
categoriastringOpcionalCategoría del producto
cantidadnumberCantidad disponible, debe ser un número entero no negativo
precionumberPrecio del producto, convertido previamente a número
fechaAdquisicionstringFecha en formato ISO, debe ser una fecha válida
fechaVencimientostringFecha en formato ISO, debe ser una fecha válida
usuarioIdnumberOpcionalID del usuario propietario del producto
estadoenumEstado del producto según estadoEnum
imagenstring (URL)URL de la imagen del producto

📤 Tipo inferido

export type ProductoInput = z.infer<typeof productoSchema>;

Este tipo se usa para tipar los objetos validados automáticamente con base en el esquema productoSchema.