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."
}