El módulo de productos es el núcleo del catálogo de Tiendas Mi Cholo. Todos los roles autenticados pueden consultar, buscar y ver productos. La creación y edición requieren rolDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/Miercoles-Proyecto/llms.txt
Use this file to discover all available pages before exploring further.
ADMIN o ALMACENERO. Solo ADMIN puede eliminar. El stock (stockActual) no se modifica directamente en los endpoints PUT — se gestiona automáticamente a través de ventas y compras. La importación masiva (/importar) realiza un upsert por código: actualiza el producto si ya existe, lo crea si no.
GET /api/productos
Lista todos los productos conactivo = true.
Autenticación: cualquier rol autenticado.
Ejemplo
Response fields
Identificador único del producto.
Código único del producto (máx. 50 chars). Usado como clave de upsert en la importación masiva.
Nombre del producto (máx. 150 chars).
Descripción detallada. Tipo
TEXT, sin límite fijo.Precio de compra (costo). Precisión 12,2. En la moneda indicada en
moneda.Precio de venta al público. Precisión 12,2.
Unidades disponibles actualmente. Se actualiza automáticamente por ventas y compras.
Umbral mínimo de stock. Si
stockActual < stockMinimo el producto aparece en /stock-bajo.URL pública de la imagen del producto. Máx. 500 chars.
Código de barras (EAN-13, UPC, etc.). Máx. 50 chars.
Unidad de medida. Por defecto
UNIDADES. Máx. 50 chars.Código ISO 4217 de la moneda. Por defecto
PEN (sol peruano). Máx. 10 chars.Estado del producto. Los inactivos no aparecen en
GET /api/productos.Categoría asociada.
Almacén asignado. Puede ser
null si no se especificó.Fecha y hora de creación (ISO 8601).
Fecha y hora de última modificación (ISO 8601).
GET /api/productos/buscar
Busca productos activos por nombre, código o descripción usando coincidencia parcial (LIKE). Autenticación: cualquier rol autenticado.Query parameters
Término de búsqueda. Se aplica sobre
nombre, codigo y descripcion.Ejemplo
GET /api/productos/stock-bajo
Retorna todos los productos activos cuyostockActual es menor que su stockMinimo.
Autenticación: cualquier rol autenticado.
Ejemplo
GET /api/productos, filtrada por stockActual < stockMinimo.
GET /api/productos/{id}
Obtiene un producto por su ID. Autenticación: cualquier rol autenticado.Path parameters
ID del producto a consultar.
Ejemplo
POST /api/productos
Crea un nuevo producto en el catálogo. Requiere rolADMIN o ALMACENERO.
Request body
Código único del producto. Máximo 50 caracteres. Se usa como clave de upsert en
/importar.Nombre del producto. Máximo 150 caracteres.
Descripción detallada del producto.
Precio de compra (costo). Debe ser
>= 0.0.Precio de venta al público. Debe ser
>= 0.0.Stock inicial disponible. Mínimo
0. Por defecto 0.Stock mínimo antes de alertar. Mínimo
0. Por defecto 5.URL de la imagen del producto. Máximo 500 caracteres.
Código de barras del producto. Máximo 50 caracteres.
Unidad de medida (p.ej.
UNIDADES, KG, LITROS). Por defecto UNIDADES. Máx. 50 chars.Código de moneda ISO 4217. Por defecto
PEN. Máx. 10 chars.ID de la categoría. Requerido en
POST y PUT directos — el servidor lanza 404 si el ID no existe. En el endpoint /importar puede omitirse en favor de categoriaNombre.Nombre de la categoría (solo usado en
/importar). Si categoriaId es null, se busca por nombre; si no existe, se crea automáticamente.ID del almacén donde se almacena el producto. Opcional.
Estado del producto. Por defecto
true.Ejemplo
- cURL
- Request JSON
PUT /api/productos/{id}
Actualiza los datos de un producto. Requiere rolADMIN o ALMACENERO.
Path parameters
ID del producto a actualizar.
Request body
Mismos campos quePOST /api/productos, con las siguientes excepciones:
stockActual— ignorado. El stock se gestiona exclusivamente por ventas y compras.codigo— ignorado. El código del producto no puede modificarse vía PUT.almacenId— ignorado. La asignación de almacén no se actualiza en este endpoint.
Ejemplo
DELETE /api/productos/{id}
Desactiva un producto (borrado lógico —activo = false). Solo ADMIN.
Path parameters
ID del producto a desactivar.
Ejemplo
204 No Content (sin cuerpo).
POST /api/productos/importar
Importa un array de productos de forma masiva. Requiere rolADMIN o ALMACENERO.
Realiza upsert por codigo:
- Si existe un producto con ese código → lo actualiza.
- Si no existe → lo crea.
codigo o nombre vacíos se omiten silenciosamente. La categoría se resuelve en este orden: categoriaId → categoriaNombre → categoría "Abarrotes" (se crea si no existe).
Request body
Array de objetos con la misma estructura quePOST /api/productos.
Ejemplo
- cURL
- Request JSON
La importación masiva es idempotente por
codigo. Puedes reenviar el mismo archivo CSV/JSON procesado varias veces sin crear duplicados.Códigos de error
| Código | Descripción | Causa habitual |
|---|---|---|
400 Bad Request | Validación fallida | Campos requeridos vacíos o precios negativos |
401 Unauthorized | No autenticado | Token ausente, inválido o expirado |
403 Forbidden | Sin permisos | Rol VENDEDOR intentando crear/editar; o rol no-ADMIN intentando eliminar |
404 Not Found | Recurso no encontrado | id, categoriaId o almacenId inexistentes |