Prima-Back
  1. Modulo Pedidos
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 Pedidos

Crear Orden

POST
/api/orders/create

🧾 POST /orders/create#

Crea una nueva orden de pedido, actualiza el stock de productos de forma atómica y asocia la orden al vendedor autenticado.
🔐 Requiere autenticación JWT.

📍 Ruta#

POST /api/orders/create

📝 Descripción#

Este endpoint permite registrar una orden de pedido, validando el RUC del cliente, los productos y cantidades solicitadas, y verificando disponibilidad de stock. Si todo es correcto, se descuenta el stock mediante bulkWrite y se guarda la orden. En caso de fallos tras el descuento, se revierte el stock.

🔒 Autenticación#

Middleware: verificarAutenticacion
Header requerido: Authorization: Bearer <token>
El ID del vendedor se extrae del token JWT (req.SellerBDD).

🧱 Middleware Aplicado#

1.
verificarAutenticacion
2.
validateCreateOrder
3.
validateRequest

🧾 Cuerpo de la Solicitud (application/json)#

{
  "customer": 12345678901,
  "products": [
    {
      "productId": "101",
      "quantity": 5
    }
  ],
  "discountApplied": 10.0,
  "netTotal": 100.0,
  "totalWithTax": 118.0,
  "comment": "Entrega en 48 horas"
}
CampoTipoRequeridoDescripción
customernumber✅RUC del cliente
productsarray✅Productos a incluir (con productId y quantity)
discountAppliednumber✅Descuento aplicado (≥ 0)
netTotalnumber✅Total sin impuestos (≥ 0)
totalWithTaxnumber✅Total con impuestos (≥ 0)
commentstring❌Comentario adicional

✅ Respuestas#

201 Created – Orden creada exitosamente#

{
  "status": "success",
  "code": "ORDER_CREATED",
  "msg": "Orden creada con éxito y stock actualizado.",
  "data": {
    "_id": "ObjectId",
    "customer": 12345678901,
    "products": [
      {
        "productId": "101",
        "quantity": 5
      }
    ],
    "discountApplied": 10.0,
    "netTotal": 100.0,
    "totalWithTax": 118.0,
    "status": "Pendiente",
    "comment": "Entrega en 48 horas",
    "registrationDate": "2025-04-24T10:30:00Z",
    "lastUpdate": "2025-04-24T10:30:00Z",
    "seller": "ObjectId"
  },
  "info": {
    "stockUpdateDetails": {
      "attempted": 1,
      "modified": 1,
      "status": "Éxito",
      "message": "Stock actualizado correctamente"
    }
  }
}

❌ Errores#

400 Bad Request – Campos faltantes o inválidos#

{
  "status": "error",
  "code": "INVALID_FORMAT",
  "msg": "Campos requeridos: customer (RUC), products (array no vacío), discountApplied, netTotal, totalWithTax.",
  "errors": [
    {
      "field": "products[0].quantity",
      "msg": "La cantidad debe ser mayor que 0."
    }
  ]
}

400 Bad Request – Stock insuficiente#

{
  "status": "error",
  "code": "INSUFFICIENT_STOCK",
  "msg": "Stock insuficiente para el producto 101. Stock actual: 3, Cantidad solicitada: 5"
}

401 Unauthorized – Token inválido o ausente#

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

404 Not Found – Cliente o producto inexistente#

{
  "status": "error",
  "code": "NOT_FOUND",
  "msg": "Cliente con RUC 12345678901 no encontrado."
}
{
  "status": "error",
  "code": "NOT_FOUND",
  "msg": "Producto con ID 101 no encontrado."
}

409 Conflict – Error al actualizar stock#

{
  "status": "error",
  "code": "STOCK_CONFLICT",
  "msg": "Conflicto de stock: Se intentaron actualizar 2 productos, pero solo 1 se modificaron. Inténtalo de nuevo.",
  "info": {
    "attempted": 2,
    "modified": 1,
    "status": "Conflicto",
    "message": "No se logró modificar el stock de algunos productos.",
    "reversion": "Reversión de stock completada con éxito"
  }
}

500 Internal Server Error – Error inesperado#

{
  "status": "error",
  "code": "SERVER_ERROR",
  "msg": "Ha ocurrido un error inesperado al registrar la orden. Intente de nuevo más tarde.",
  "info": {
    "detail": "Error de conexión con la base de datos",
    "reversionStatus": "Intentando revertir stock..."
  }
}
Request Request Example
Shell
JavaScript
Java
Swift
curl --location --request POST 'https://back-prima-s-a.onrender.com/api/orders/create' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NWNkZGEzMTJkYmM5YjM2NzkwNDliNiIsInJvbCI6IlNlbGxlciIsImlhdCI6MTczODE4OTczOCwiZXhwIjoxNzM4MjE4NTM4fQ.pqhvNo0o_kP3oK8hrJsRhdIPoXUnReaZT-x3_FVN6HA' \
--header 'Content-Type: application/json' \
--data-raw '{
    "customer": 1767890123001, 
    "products": [
        {
            "productId": 55055012,
            "quantity": 1
        },
        {
            "productId": 55055025,
            "quantity": 5
        }
    ],
    "discountApplied": 10.5,
    "netTotal": 7.79,
    "totalWithTax": 10.67
}'
Response Response Example
{}

Request

Authorization
Provide your bearer token in the
Authorization
header when making requests to protected resources.
Example:
Authorization: Bearer ********************
Header Params
Content-Type
string 
optional
Example:
application/json
Authorization
string 
optional
Example:
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3NWNkZGEzMTJkYmM5YjM2NzkwNDliNiIsInJvbCI6IlNlbGxlciIsImlhdCI6MTczODE4OTczOCwiZXhwIjoxNzM4MjE4NTM4fQ.pqhvNo0o_kP3oK8hrJsRhdIPoXUnReaZT-x3_FVN6HA
Body Params application/json
customer
integer 
required
products
array [object {2}] 
required
productId
integer 
required
quantity
integer 
required
discountApplied
number 
required
netTotal
number 
required
totalWithTax
number 
required
Examples

Responses

🟢200Success
application/json
Body
object {0}
Modified at 2025-04-24 17:19:15
Previous
Eliminar Producto
Next
Visualizar Ordenes
Built with