/products/update/:id
id
numérico. Permite modificar campos individuales y subir una nueva imagen (reemplazando la anterior si existía).🔐 Requiere autenticación JWT.
PATCH /api/products/update/:id
verificarAutenticacion
Authorization: Bearer <token>
verificarAutenticacion
upload.single('image')
– Carga archivo de imagen (multipart/form-data
)imageRequired
updateProductValidator
validateRequest
processImage
– Sube imagen a Cloudinary y la adjunta como req.imageUrl
Parámetro | Tipo | Requerido | Descripción |
---|---|---|---|
id | number | ✅ | ID numérico del producto a actualizar |
multipart/form-data
)Campo | Tipo | Requerido | Descripción |
---|---|---|---|
product_name | string | ❌ | Nombre del producto |
measure | string | ❌ | Unidad de medida (UND o REP ) |
price | number | ❌ | Precio (decimal positivo) |
stock | number | ❌ | Cantidad disponible (entero positivo) |
image | file | ❌ | Imagen nueva del producto |
⚠️ Se debe proporcionar al menos un campo o una nueva imagen para procesar la actualización.
{
"status": "success",
"code": "PRODUCT_UPDATED",
"msg": "Producto actualizado correctamente.",
"data": {
"id": 1,
"product_name": "Pan integral",
"measure": "UND",
"price": 3.50,
"stock": 40,
"imgUrl": "https://res.cloudinary.com/..."
},
"info": {
"fieldsUpdated": ["product_name", "stock"],
"imageAction": "Reemplazada",
"oldImageStatus": "Eliminada correctamente"
}
}
{
"status": "success",
"code": "NO_CHANGES_DETECTED",
"msg": "No se proporcionaron datos nuevos para actualizar.",
"info": {
"imageAction": "Ninguna",
"fieldsAttempted": []
}
}
{
"status": "error",
"code": "VALIDATION_ERROR",
"msg": "El id debe ser un número.",
"errors": [
{
"field": "id",
"msg": "El id debe ser un número entero válido."
}
]
}
{
"status": "error",
"code": "AUTH_ERROR",
"msg": "Acceso no autorizado. Se requiere token válido."
}
{
"status": "error",
"code": "NOT_FOUND",
"msg": "Producto con ID 22 no encontrado.",
"info": {
"productStatus": "No encontrado",
"imageAction": "Eliminada (Producto No Encontrado)",
"imageStatus": "Eliminada correctamente"
}
}
{
"status": "error",
"code": "SERVER_ERROR",
"msg": "Ha ocurrido un error inesperado al actualizar el producto. Intente de nuevo más tarde.",
"info": {
"detail": "Fallo al conectar con base de datos.",
"imageAction": "Error al eliminar (Error Actualización)",
"imageStatus": "Fallo en eliminación de imagen nueva"
}
}
curl --location --request PATCH 'https://back-prima-s-a.onrender.com/api/products/update/44444' \
--header 'User-Agent: insomnia/11.0.0' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NjI0ZjkwNzY2OWM5MDZjYTM0YThkZSIsInJvbCI6ImFkbWluIiwiaWF0IjoxNzQyOTMxNzg3LCJleHAiOjE3NDI5NjA1ODd9.nwBdY2DmiTAjEYfxGukAQHJkbrsLHqMosjmOSgzfbR4' \
--header 'Content-Type: multipart/form-data' \
--form 'id="444446"' \
--form 'product_name="APPLEs"' \
--form 'measure="Unit"' \
--form 'price="0.50"' \
--form 'stock="150"' \
--form 'image=""'
{"message":"Producto actualizado correctamente","updatedProduct":{"id":44444,"product_name":"APPLEs","measure":"Unit","price":0.5,"stock":150,"imgUrl":"https://res.cloudinary.com/dyoyatqoz/image/upload/v1742932035/wycvsivjr0osrdnolfmi.png","__v":0}}