Reseñas - bootcamp-uchile-2026/grupo-4-backend GitHub Wiki

Reseñas

Servicio encargado de gestionar las reseñas que los clientes realizan sobre los productos del ecommerce.

El servicio permite consultar, crear, modificar y eliminar reseñas.

Endpoints

  • GET /resenas - Obtener reseñas con filtros opcionales
  • GET /resenas/{id} - Obtener reseña por ID
  • POST /resenas - Crear reseña
  • PATCH /resenas/{id} - Modificar parcialmente una reseña
  • DELETE /resenas/{id} - Eliminar reseña

Modelo

Reseña

Representa una reseña realizada por un cliente sobre un producto.

Campo Tipo Descripción
id number Identificador único de la reseña
clienteId number Identificador del cliente
productoId number Identificador del producto
titulo string Título de la reseña
detalle string (opcional) Descripción de la reseña
estrellas number Calificación del producto, de 1 a 5 estrellas

DTOs

CreateResenaDto

DTO utilizado para crear una nueva reseña.

Campos y validaciones

Campo Tipo Requerido Validaciones
clienteId number Sí Número entero mayor o igual a 1
productoId number Sí Número entero mayor o igual a 1
titulo string Sí Texto no vacío ni compuesto únicamente por espacios
detalle string No Si se envía, debe ser texto y no contener únicamente espacios
estrellas number Sí Número entero entre 1 y 5

Los identificadores numéricos y estrellas se transforman a número mediante class-transformer y se validan con class-validator.

Ejemplo de Request Body

{
  "clienteId": 1,
  "productoId": 2,
  "titulo": "Producto mediocre",
  "detalle": "El producto llegó en buenas condiciones, pero esperaba mejor sabor.",
  "estrellas": 2
}

UpdateResenaDto

DTO utilizado para actualizar parcialmente una reseña existente.

Hereda los campos y validaciones de CreateResenaDto, pero todos son opcionales mediante PartialType.

Ejemplo de Request Body

{
  "titulo": "Producto arriba del promedio",
  "estrellas": 4
}

ResenaQueryDto

DTO utilizado para consultar reseñas con filtros opcionales.

Campo Tipo Requerido Validaciones
productoId number No Número entero mayor o igual a 1
clienteId number No Número entero mayor o igual a 1

ResenaResponseDto

DTO utilizado para representar una reseña en las respuestas de la API. El campo detalle es opcional.

{
  "id": 1,
  "clienteId": 1,
  "productoId": 2,
  "titulo": "Producto arriba del promedio",
  "detalle": "Buena calidad y presentación.",
  "estrellas": 4
}

Endpoints detallados

GET /resenas

Obtiene una lista de reseñas con filtros opcionales por producto y cliente.

Query Parameters

Parámetro Tipo Requerido Descripción
productoId number No Filtra por el identificador del producto (entero mayor o igual a 1)
clienteId number No Filtra por el identificador del cliente (entero mayor o igual a 1)

Ejemplo de solicitud

GET /resenas?productoId=1

Response — 200 OK

[
  {
    "id": 1,
    "clienteId": 3,
    "productoId": 1,
    "titulo": "El mejor producto que he comprado",
    "detalle": "Excelente sabor y presentación.",
    "estrellas": 5
  },
  {
    "id": 2,
    "clienteId": 2,
    "productoId": 1,
    "titulo": "Producto en malas condiciones",
    "detalle": "El empaque llegó dañado.",
    "estrellas": 1
  }
]

GET /resenas/{id}

Obtiene una reseña específica mediante su identificador.

Path Parameters

Parámetro Tipo Requerido Descripción
id number Sí Identificador de la reseña; ParseIntPipe valida que sea un entero

Ejemplo de solicitud

GET /resenas/1

Response — 200 OK

{
  "id": 1,
  "clienteId": 3,
  "productoId": 1,
  "titulo": "El mejor producto que he comprado",
  "detalle": "Excelente sabor y presentación.",
  "estrellas": 5
}

Response — 400 Bad Request

Se produce cuando el identificador tiene un formato inválido.

Response — 404 Not Found

Reseña no encontrada. Este código está definido en el contrato HTTP del endpoint.

POST /resenas

Crea una nueva reseña.

Request Body

Utiliza CreateResenaDto.

{
  "clienteId": 1,
  "productoId": 2,
  "titulo": "Producto mediocre",
  "detalle": "El producto llegó en buenas condiciones, pero esperaba mejor sabor.",
  "estrellas": 2
}

Response — 201 Created

{
  "id": 10,
  "clienteId": 1,
  "productoId": 2,
  "titulo": "Producto mediocre",
  "detalle": "El producto llegó en buenas condiciones, pero esperaba mejor sabor.",
  "estrellas": 2
}

Response — 400 Bad Request

Los datos enviados no cumplen las validaciones del DTO.

Response — 409 Conflict

Conflicto por una reseña existente según las reglas de negocio definidas para el servicio. Este código está documentado en Swagger.

PATCH /resenas/{id}

Actualiza parcialmente los datos de una reseña existente.

Path Parameters

Parámetro Tipo Requerido Descripción
id number Sí Identificador de la reseña; ParseIntPipe valida que sea un entero

Request Body

Utiliza UpdateResenaDto. Todos los campos son opcionales. El ID se envía en la ruta, no en el cuerpo.

{
  "titulo": "Buen producto, mal proveedor"
}

Response — 200 OK

{
  "id": 10,
  "clienteId": 1,
  "productoId": 2,
  "titulo": "Buen producto, mal proveedor",
  "detalle": "El producto llegó en buenas condiciones, pero esperaba mejor sabor.",
  "estrellas": 2
}

Response — 400 Bad Request

El identificador o los datos enviados no son válidos.

Response — 404 Not Found

Reseña no encontrada. Este código está definido en el contrato HTTP del endpoint.

Response — 409 Conflict

Conflicto según las reglas de negocio definidas para la modificación de reseñas. Este código está documentado en Swagger.

DELETE /resenas/{id}

Elimina una reseña mediante su identificador.

Path Parameters

Parámetro Tipo Requerido Descripción
id number Sí Identificador de la reseña; ParseIntPipe valida que sea un entero

Ejemplo de solicitud

DELETE /resenas/1

Response — 204 No Content

La operación devuelve HTTP 204 sin cuerpo de respuesta.

Response — 400 Bad Request

Se produce cuando el identificador tiene un formato inválido.

Response — 404 Not Found

Reseña no encontrada. Este código está definido en el contrato HTTP del endpoint.