Pedidos - bootcamp-uchile-2026/grupo-4-backend GitHub Wiki
Pedidos
Servicio encargado de gestionar los pedidos realizados por los usuarios en el ecommerce.
El servicio permite consultar pedidos, obtener un pedido específico, crear nuevos pedidos y actualizar el estado de un pedido.
Endpoints
- GET /pedidos - Obtener lista de pedidos
- GET /pedidos/{id} - Obtener pedido por ID
- POST /pedidos - Crear pedido
- PATCH /pedidos/{id}/estado - Actualizar estado del pedido
Modelo
Pedido
Representa una compra realizada por un usuario.
| Campo | Tipo | Descripción |
|---|---|---|
id |
number |
Identificador único del pedido |
usuarioId |
number |
Identificador del usuario que realizó el pedido |
items |
PedidoItem[] |
Productos incluidos en el pedido |
totalItems |
number |
Cantidad total de productos incluidos en el pedido |
totalPrice |
number |
Precio total del pedido |
estado |
EstadoPedido |
Estado actual del pedido |
fechaCreacion |
Date |
Fecha y hora de creación del pedido |
PedidoItem
Representa un producto incluido dentro de un pedido.
| Campo | Tipo | Descripción |
|---|---|---|
productoId |
number |
Identificador único del producto |
productoNombre |
string |
Nombre del producto al momento de realizar el pedido |
precioUnitario |
number |
Precio unitario del producto al momento de realizar el pedido |
cantidad |
number |
Cantidad de unidades del producto |
subtotal |
number |
Precio total correspondiente al producto |
Enum
EstadoPedido
Define los diferentes estados que puede tener un pedido durante su ciclo de vida.
Valores disponibles:
- Pendiente
- Confirmado
- En preparación
- En despacho
- Entregado
- Cancelado
enum EstadoPedido {
PENDIENTE = 'Pendiente',
CONFIRMADO = 'Confirmado',
EN_PREPARACION = 'En preparación',
EN_DESPACHO = 'En despacho',
ENTREGADO = 'Entregado',
CANCELADO = 'Cancelado',
}
DTOs
CreatePedidoItemDto
DTO utilizado para especificar un producto y su cantidad al crear un pedido.
Campos
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
productoId |
number |
Sí | Identificador del producto |
cantidad |
number |
Sí | Cantidad de unidades del producto |
Ejemplo de Request Body
{
"productoId": 2,
"cantidad": 2
}
CreatePedidoDto
DTO utilizado para crear un nuevo pedido.
Campos
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
usuarioId |
number |
Sí | Identificador del usuario que realiza el pedido |
items |
CreatePedidoItemDto[] |
Sí | Productos incluidos en el pedido |
Ejemplo de Request Body
{
"usuarioId": 1,
"items": [
{
"productoId": 2,
"cantidad": 2
},
{
"productoId": 4,
"cantidad": 1
}
]
}
UpdateEstadoPedidoDto
DTO utilizado para actualizar el estado de un pedido existente.
Campos
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
estado |
EstadoPedido |
Sí | Nuevo estado del pedido |
Ejemplo de Request Body
{
"estado": "En preparación"
}
PedidoItemResponseDto
DTO utilizado para representar un producto incluido en un pedido.
{
"productoId": 2,
"productoNombre": "Mermelada de frutilla",
"precioUnitario": 5990,
"cantidad": 2,
"subtotal": 11980
}
PedidoResponseDto
DTO utilizado para representar la respuesta de los endpoints de Pedidos.
{
"id": 1,
"usuarioId": 1,
"items": [
{
"productoId": 2,
"productoNombre": "Mermelada de frutilla",
"precioUnitario": 5990,
"cantidad": 2,
"subtotal": 11980
}
],
"totalItems": 2,
"totalPrice": 11980,
"estado": "Pendiente",
"fechaCreacion": "2026-08-28T15:30:00.000Z"
}
Endpoints detallados
GET /pedidos
Obtiene una lista de pedidos.
Ejemplo de solicitud
GET /pedidos
Response — 200 OK
[
{
"id": 1,
"usuarioId": 1,
"items": [
{
"productoId": 2,
"productoNombre": "Mermelada de frutilla",
"precioUnitario": 5990,
"cantidad": 2,
"subtotal": 11980
}
],
"totalItems": 2,
"totalPrice": 11980,
"estado": "Pendiente",
"fechaCreacion": "2026-08-28T15:30:00.000Z"
}
]
GET /pedidos/{id}
Obtiene un pedido específico mediante su identificador.
Path Parameters
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id |
number |
Sí | Identificador único del pedido |
Ejemplo de solicitud
GET /pedidos/1
Response — 200 OK
{
"id": 1,
"usuarioId": 1,
"items": [
{
"productoId": 2,
"productoNombre": "Mermelada de frutilla",
"precioUnitario": 5990,
"cantidad": 2,
"subtotal": 11980
}
],
"totalItems": 2,
"totalPrice": 11980,
"estado": "Pendiente",
"fechaCreacion": "2026-08-28T15:30:00.000Z"
}
Response — 400 Bad Request
El ID proporcionado no es válido.
{
"statusCode": 400,
"message": "El ID del pedido no es válido."
}
Response — 404 Not Found
El pedido no existe.
{
"statusCode": 404,
"message": "Pedido no encontrado."
}
POST /pedidos
Crea un nuevo pedido a partir de los productos seleccionados.
Request Body
Utiliza CreatePedidoDto.
{
"usuarioId": 1,
"items": [
{
"productoId": 2,
"cantidad": 2
},
{
"productoId": 4,
"cantidad": 1
}
]
}
Response — 201 Created
{
"id": 1,
"usuarioId": 1,
"items": [
{
"productoId": 2,
"productoNombre": "Mermelada de frutilla",
"precioUnitario": 5990,
"cantidad": 2,
"subtotal": 11980
},
{
"productoId": 4,
"productoNombre": "Vino Los Comensales",
"precioUnitario": 24990,
"cantidad": 1,
"subtotal": 24990
}
],
"totalItems": 3,
"totalPrice": 36970,
"estado": "Pendiente",
"fechaCreacion": "2026-08-28T15:30:00.000Z"
}
Response — 400 Bad Request
Los datos enviados no son válidos.
{
"statusCode": 400,
"message": "Los datos del pedido no son válidos."
}
Response — 404 Not Found
El usuario o alguno de los productos no existe.
{
"statusCode": 404,
"message": "El usuario o alguno de los productos no existe."
}
PATCH /pedidos/{id}/estado
Actualiza el estado de un pedido existente.
Path Parameters
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id |
number |
Sí | Identificador único del pedido |
Request Body
Utiliza UpdateEstadoPedidoDto.
{
"estado": "En preparación"
}
Response — 200 OK
{
"id": 1,
"usuarioId": 1,
"items": [
{
"productoId": 2,
"productoNombre": "Mermelada de frutilla",
"precioUnitario": 5990,
"cantidad": 2,
"subtotal": 11980
}
],
"totalItems": 2,
"totalPrice": 11980,
"estado": "En preparación",
"fechaCreacion": "2026-08-28T15:30:00.000Z"
}
Response — 400 Bad Request
El ID o el estado proporcionado no son válidos.
{
"statusCode": 400,
"message": "El ID o el estado del pedido no son válidos."
}
Response — 404 Not Found
El pedido no existe.
{
"statusCode": 404,
"message": "Pedido no encontrado."
}