Prima-Back
  1. Modulo Productos
Prima-Back
  • API DOCUMENTATION
  • Principal
    • /
      GET
  • Modulo Administradores
    • Vendedores Operaciones
      • Registro de Vendedores
      • Visualizar Vendedores
      • Visualizar Vendedores por Mongo ID
      • Visualizar Vendedores por cedula
      • Actualizar Vendedor
      • Eliminar Vendedor
    • Estadisticas
      • Estadisticas de documentos
      • Visualizacion de top Vendedores
      • Visualizar Ventas por Vendedor
    • Login Administradores
      POST
    • Recuperacion de contraseña Administrador
      POST
  • Modulo Vendedores
    • Inicio de Sesión Vendedores
      POST
    • Confirmación de Cuenta
      GET
    • Solicitud de restablecimiento de contraseña
      POST
    • Restablecimiento de contraseña
      POST
  • Modulo Clientes
    • Registrar Cliente
      POST
    • Visualizar Clientes
      GET
    • Visualizar Clientes por RUC
      GET
    • Actualizar Cliente
      PATCH
    • Eliminar Cliente
      DELETE
  • Modulo Productos
    • Crear Producto
      POST
    • Visualizar Productos
      GET
    • Visualizar Productos por ID
      GET
    • Actualizar Producto
      PATCH
    • Eliminar Producto
      DELETE
  • Modulo Pedidos
    • Crear Orden
      POST
    • Visualizar Ordenes
      GET
    • Visualizar Ordenes por ID
      GET
    • Actualizar Orden
      PATCH
    • Actualizar Estado de Orden
      PATCH
    • Eliminar Orden
      DELETE
  1. Modulo Productos

Crear Producto

POST
/api/products/register/

📦 POST /products/register#

Registra un nuevo producto en el sistema.
🔐 Requiere autenticación JWT previa.

📍 Ruta#

POST /api/products/register

📝 Descripción#

Este endpoint permite registrar un nuevo producto. Acepta datos del producto y opcionalmente una imagen a través de multipart/form-data. Valida que los campos sean correctos, maneja la carga a Cloudinary y controla errores, incluyendo duplicados.

🔒 Autenticación#

Middleware: verificarAutenticacion
Se requiere un token JWT válido para acceder.

🧱 Middleware Aplicado#

1.
verificarAutenticacion: Verifica el token JWT.
2.
upload.single('image'): Maneja la carga del archivo usando Multer.
3.
imageRequired: Verifica si hay un campo image en la solicitud.
4.
createProductValidator: Valida los campos del cuerpo.
5.
validateRequest: Maneja errores de validación.
6.
processImage: Sube imagen a Cloudinary y guarda la URL en req.imageUrl.

📤 Request Body#

Tipo: multipart/form-data
CampoTipoRequeridoDescripción
idnumber✅Identificador único del producto.
product_namestring✅Nombre del producto.
measurestring✅Unidad de medida.
pricenumber✅Precio del producto (no negativo).
stocknumber✅Cantidad disponible (no negativa).
imagefile❌Imagen del producto (opcional).

✅ Respuestas#

201 Created – Producto creado exitosamente#

{
  "status": "success",
  "code": "PRODUCT_CREATED",
  "msg": "Producto creado correctamente.",
  "data": {
    "id": 1,
    "product_name": "Ejemplo",
    "measure": "kg",
    "price": 25.5,
    "stock": 10,
    "imgUrl": "https://cloudinary.com/... (o string vacío)"
  },
  "info": {
    "imageAction": "Subida" // o "Ninguna"
  }
}

❌ Errores#

400 Bad Request – Campos faltantes o inválidos#

{
  "status": "error",
  "code": "MISSING_FIELD", // o "VALIDATION_ERROR", "INVALID_FORMAT"
  "msg": "Campos requeridos: id, product_name, measure, price, stock.",
  "errors": [/* Detalles si aplica */]
}

401 Unauthorized – Token inválido o ausente#

{
  "status": "error",
  "code": "AUTH_ERROR",
  "msg": "Acceso no autorizado. Se requiere token válido."
}

409 Conflict – ID de producto ya existe#

{
  "status": "error",
  "code": "RESOURCE_ALREADY_EXISTS",
  "msg": "El producto con ID 1 ya existe.",
  "info": {
    "duplicateProductId": 1,
    "imageAction": "Eliminada (Duplicado)",
    "imageStatus": "Imagen subida eliminada correctamente."
  }
}

500 Internal Server Error – Error inesperado#

{
  "status": "error",
  "code": "SERVER_ERROR",
  "msg": "Ha ocurrido un error inesperado al crear el producto. Intente de nuevo más tarde.",
  "info": {
    "detail": "Error al guardar en base de datos.",
    "imageAction": "Eliminada (Error Creación)",
    "imageStatus": "Imagen subida fue eliminada correctamente."
  }
}
Request Request Example
Shell
JavaScript
Java
Swift
curl --location --request POST 'https://back-prima-s-a.onrender.com/api/products/register/' \
--header 'User-Agent: insomnia/11.0.0' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NjI0ZjkwNzY2OWM5MDZjYTM0YThkZSIsInJvbCI6ImFkbWluIiwiaWF0IjoxNzQyOTMxNzg3LCJleHAiOjE3NDI5NjA1ODd9.nwBdY2DmiTAjEYfxGukAQHJkbrsLHqMosjmOSgzfbR4' \
--header 'Content-Type: multipart/form-data' \
--form 'id="44444"' \
--form 'product_name="APPLE"' \
--form 'measure="Unit"' \
--form 'price="0.50"' \
--form 'stock="100"' \
--form 'image=@""'
Response Response Example
{"message":"Producto creado correctamente","product":{"id":"44444","product_name":"APPLE","measure":"Unit","price":"0.50","stock":"100","imgUrl":"https://res.cloudinary.com/dyoyatqoz/image/upload/v1742931815/cvommtn1ldj5ky9cslyp.png"}}

Request

Header Params
Content-Type
string 
optional
Example:
multipart/form-data
User-Agent
string 
optional
Example:
insomnia/11.0.0
Authorization
string 
optional
Example:
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NjI0ZjkwNzY2OWM5MDZjYTM0YThkZSIsInJvbCI6ImFkbWluIiwiaWF0IjoxNzQyOTMxNzg3LCJleHAiOjE3NDI5NjA1ODd9.nwBdY2DmiTAjEYfxGukAQHJkbrsLHqMosjmOSgzfbR4
Body Params multipart/form-data
id
string 
optional
Example:
44444
product_name
string 
optional
Example:
APPLE
measure
string 
optional
Example:
Unit
price
string 
optional
Example:
0.50
stock
string 
optional
Example:
100
image
file 
optional

Responses

🟢201Success
application/json
Body
message
string 
required
product
object 
required
id
string 
required
product_name
string 
required
measure
string 
required
price
string 
required
stock
string 
required
imgUrl
string 
required
Modified at 2025-04-24 16:58:15
Previous
Eliminar Cliente
Next
Visualizar Productos
Built with