-
Notifications
You must be signed in to change notification settings - Fork 1
Categoria
El modelo Categoria representa una entidad de una categoría en el sistema. A continuación, se describen sus atributos y métodos.
-
id(Integer): -
- Clave primaria de la categoría.
-
- Se genera automáticamente con la estrategia
GenerationType.IDENTITY.
- Se genera automáticamente con la estrategia
-
nombre(String): -
- Nombre de la categoría.
-
- Tiene una longitud mínima de 1 carácter y máxima de 100 caracteres.
-
- No puede ser nulo.
-
fechaEliminacion(LocalDateTime): -
- Representa la fecha en la que la categoría fue eliminada (si es que lo fue).
-
- Puede ser
nullsi la categoría no está eliminada.
- Puede ser
-
Endpoint:
POST /products/categoria - Descripción: Crea una nueva categoría en el sistema.
- Cuerpo de la Solicitud:
-
-
nombre: string (obligatorio, máximo 100 caracteres)
-
{
"nombre": "nombre categoria" //String
}- Respuestas:
- 201 Created: Categoría creada exitosamente (Esto aplica tanto para cuando se crea una categoria, o cuando se quiere crear una categoria con el mismo nombre que una categoria eliminada, en ese caso lo que se hace es recuperar dicha categoria).
{
"status": 201,
"message": "Created.",
"data": {
"id": 1,
"nombre": "Electrónica"
},
"errors": null
}- 400 Bad Request:
-
- No se envió un nombre para la categoría.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "No se envió un nombre para la categoría."
}-
- El nombre contiene caracteres no permitidos.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "El nombre debe estar formado únicamente por letras y números."
}-
- Ya existe una categoría con este nombre.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "Ya existe una categoría con este nombre."
}- 400 Error inesperado: Error en el servicio.
{
"status": 400,
"message": "Error: Error inesperado.",
"data": null,
"errors": "Descripción del errors inesperado"
}- 400 Error de tipo de argumento: Cuando el dto enviado no tiene el formato correspondiente.
{
"status": 400,
"message": "Error de tipo de argumento",
"data": null,
"errors": "El parámetro 'id' debe ser un número entero válido."
}-
Endpoint:
PUT /products/categoria - Descripción: Actualiza una categoría existente en el sistema.
- Cuerpo de la Solicitud:
-
-
id: integer (obligatorio)
-
-
-
nombre: string (obligatorio, máximo 100 caracteres)
-
{
"id": 1, //int
"nombre": "nombre categoria" //String
}- Respuestas:
- 201 Created: Categoría actualizada exitosamente.
{
"status": 200,
"message": "OK",
"data": {
"id": 1,
"nombre": "Electrónica"
},
"errors": null
}- 404 Not Found: El ID no corresponde a ninguna categoría.
{
"status": 404,
"message": "Error: Not Found",
"data": null,
"errors": "No se encontró la categoría con el ID."
}- 400 Bad Request:
-
- La categoría no se puede modificar porque está eliminada.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "No se puede modificar un objeto que está eliminado."
}-
- La categoría debe tener un nombre.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "La categoria debe de tener un nombre."
}
-
- El nombre contiene caracteres no permitidos.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "El nombre debe estar formado únicamente por letras y números."
}-
- Ya existe una categoría con este nombre.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "Ya existe una categoría con este nombre."
}- 400 Error inesperado: Error en el servicio.
{
"status": 400,
"message": "Error: Error inesperado.",
"data": null,
"errors": "Descripción del errors inesperado"
}- 400 Error de tipo de argumento: Cuando el dto enviado no tiene el formato correspondiente.
{
"status": 400,
"message": "Error de tipo de argumento",
"data": null,
"errors": "El parámetro 'id' debe ser un número entero válido."
}-
Endpoint:
DELETE /products/categoria/{id} - Descripción: Eliminar una categoria.
- Parámetros de Ruta:
-
-
id: integer (obligatorio)
-
- Respuestas:
- 200 OK: Categoría eliminada exitosamente.
{
"status": 200,
"message": "OK.",
"data": {
"id": 1,
"nombre": "Electrónica",
"fechaEliminacion": "2024-09-28T12:34:56"
},
"errors": null
}- 400 Bad Request:
-
- La categoría ya está eliminada.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "La categoría ya se encuentra eliminada, se debe enviar el id de una categoría no eliminada."
}-
- 404 Not Found: El ID no corresponde a ninguna categoría.
{
"status": 404,
"message": "Error: Not Found.",
"data": null,
"errors": "El id no corresponde a ninguna categoría, se debe enviar el id de una categoría existente."
}- 500 Error inesperado: Error en el servicio.
{ "status": 400, "message": "Error: Error inesperado.", "data": null, "errors": "Descripción del errors inesperado" }
- 400 Error de tipo de argumento: Cuando el id enviado no es un int.
{
"status": 400,
"message": "Error de tipo de argumento",
"data": null,
"errors": "El parámetro 'id' debe ser un número entero válido."
}-
Endpoint:
PUT /products/categoria/recuperar/{id} - Descripción: Recupera una categoría que ha sido eliminada.
- Parámetros de Ruta:
-
-
id: integer (obligatorio)
-
- Respuestas:
- 200 OK: Categoría recuperada exitosamente.
{
"status": 200,
"message": "OK",
"data": {
"id": 1,
"nombre": "Electrónica"
},
"errors": null
}- 400 Bad Request:
-
- La categoría no está eliminada.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "La categoría no está eliminada."
}-
- 404 Not Found: El ID no corresponde a ninguna categoría.
{
"status": 404,
"message": "Error: Not Found",
"data": null,
"errors": "No se encontró la categoría con el ID."
}- 500 Error inesperado: Error en el servicio.
{ "status": 400, "message": "Error: Error inesperado.", "data": null, "errors": "Descripción del errors inesperado" }
- 400 Error de tipo de argumento: Cuando el id enviado no es un int.
{
"status": 400,
"message": "Error de tipo de argumento",
"data": null,
"errors": "El parámetro 'id' debe ser un número entero válido."
}-
Endpoint:
GET /products/categorias - Descripción: Obtiene una lista de todas las categorías.
- Respuestas:
- 200 OK: Lista de categorías devuelta exitosamente.
{
"status": 200,
"message": "OK",
"data": [
{
"id": 1,
"nombre": "Electrónica"
},
{
"id": 2,
"nombre": "Ropa"
}
],
"errors": null
}- 400 Bad Request:
-
- No existen categorias.
{
"status": 400,
"message": "Bad request",
"data": null,
"errors": "No hay categorías creadas."
}-
Endpoint:
GET /products/categoria/{id} - Descripción: Obtiene una categoría específica por su ID.
-
Parámetros de Ruta:
**
id: integer (obligatorio) - Respuestas:
- 200 OK: Categoría devuelta exitosamente.
{
"status": 200,
"message": "OK",
"data": {
"id": 1,
"nombre": "Electrónica"
},
"errors": null
}- 400 Bad Request:
-
- No se encontró la categoría con el ID.
{
"status": 404,
"message": "Error: Not Found",
"data": null,
"errors": "No se encontró la categoría con el ID."
}-
- No se puede traer un objeto que está eliminado.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "No se puede traer un objeto que esté eliminado."
}- 400 Error inesperado: Error en el servicio.
{
"status": 400,
"message": "Error: Error inesperado.",
"data": null,
"errors": "Descripción del errors inesperado"
}- 400 Error de tipo de argumento: Cuando el id pasado no es un int.
{
"status": 400,
"message": "Error de tipo de argumento",
"data": null,
"errors": "El parámetro 'id' debe ser un número entero válido."
}Como administrador, quiero crear una categoría para que esté disponible en el sistema.
- Given El servicio de categorías está disponible
-
Scenario: Enviar una categoría válida
- Given Que el cuerpo del request contiene un nombre válido
-
When Realizo un POST a
/products/categoriacon los datos - Then La respuesta debe ser un código 201
- And La respuesta debe contener un objeto de categoría creado
- And El mensaje de respuesta debe ser "Created."
Probado
-
Scenario: Enviar un cuerpo sin un nombre
- Given Que el cuerpo del request no contiene un nombre
-
When Realizo un POST a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "No se envió un nombre para la categoría."
Probado
-
Scenario: Enviar un nombre con caracteres no válidos
- Given Que el cuerpo del request contiene un nombre con caracteres no permitidos (comas, puntos, signos matemáticos, caracteres especiales)
-
When Realizo un POST a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "El nombre debe estar formado únicamente por letras y números."
Probado
-
Scenario: Enviar un nombre que ya existe y está eliminado
- Given Que el cuerpo del request contiene un nombre de una categoría eliminada
-
When Realizo un POST a
/products/categoria - Then La respuesta debe ser un código 201
- And La categoría debe ser recuperada
- And El mensaje de respuesta debe ser "Created."
Probado
-
Scenario: Enviar un nombre que ya existe y no está eliminado
- Given Que el cuerpo del request contiene un nombre de una categoría existente no eliminada
-
When Realizo un POST a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "Ya existe una categoría con este nombre."
Probado
-
Scenario: Enviar una categoría sin formato correcto en el nombre
- Given Que el cuerpo del request contiene un nombre con formato incorrecto (espacios extra)
-
When Realizo un POST a
/products/categoria - Then La respuesta debe ser un código 200
- And El nombre debe ser capitalizado y corregido
- And El mensaje de respuesta debe ser "Created."
Probado
-
Scenario: Error inesperado durante la creación
- Given Que el servicio de categorías falla inesperadamente
-
When Realizo un POST a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "Error: Error inesperado."
Probado
-
Scenario: Enviar un argumento de tipo incorrecto
- Given Que el nombre no es del tipo correcto en el cuerpo del request
-
When Realizo un POST a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "El parámetro debe ser un número entero válido."
Probado
Como administrador, quiero actualizar una categoría existente para mantener los datos actualizados en el sistema.
- Given El servicio de categorías está disponible
-
Scenario: Actualizar una categoría válida
- Given Que el cuerpo del request contiene un ID válido y un nombre válido
-
When Realizo un PUT a
/products/categoriacon los datos - Then La respuesta debe ser un código 201
- And La respuesta debe contener un objeto de categoría actualizado
- And El mensaje de respuesta debe ser "Created."
Probado
-
Scenario: Enviar una categoría sin ID
- Given Que el cuerpo del request no contiene un ID
-
When Realizo un PUT a
/products/categoria - Then La respuesta debe ser un código 404
- And El mensaje de respuesta debe ser "El ID no corresponde a ninguna categoría."
Probado
-
Scenario: Enviar una categoría con ID de una categoría eliminada
- Given Que el cuerpo del request contiene un ID de una categoría eliminada
-
When Realizo un PUT a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "La categoría no se puede modificar debido a que se encuentra eliminada."
Probado
-
Scenario: Enviar una categoría sin nombre
- Given Que el cuerpo del request contiene un ID válido pero sin nombre
-
When Realizo un PUT a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "La categoría debe tener un nombre."
Probado
-
Scenario: Enviar un nombre con caracteres no válidos
- Given Que el cuerpo del request contiene un ID válido y un nombre con caracteres no permitidos
-
When Realizo un PUT a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "El nombre debe estar formado únicamente por letras y numeros."
Probado
-
Scenario: Enviar un nombre de una categoría que ya existe
- Given Que el cuerpo del request contiene un ID válido y un nombre de una categoría existente
-
When Realizo un PUT a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "Ya existe una categoría con este nombre, no puede haber dos categorías con el mismo nombre."
Probado
-
Scenario: Error inesperado durante la actualización
- Given Que el servicio de categorías falla inesperadamente
-
When Realizo un PUT a
/products/categoria - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "Error: Error inesperado."
Probado
Como administrador, quiero recuperar una categoría eliminada para reutilizarla en el sistema.
- Given El servicio de categorías está disponible
-
Scenario: Recuperar una categoría eliminada correctamente
- Given Que la categoría con el ID proporcionado está eliminada
-
When Realizo un PUT a
/products/categoria/recuperar/{id} - Then La respuesta debe ser un código 200
- And El mensaje de respuesta debe ser "OK."
Probado
-
Scenario: Recuperar una categoría que no está eliminada
- Given Que la categoría con el ID proporcionado no está eliminada
-
When Realizo un PUT a
/products/categoria/recuperar/{id} - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "La categoría ya no se encuentra eliminada, se debe enviar el ID de una categoría eliminada."
Probado
-
Scenario: Recuperar una categoría con un ID inexistente
- Given Que no existe una categoría con el ID proporcionado
-
When Realizo un PUT a
/products/categoria/recuperar/{id} - Then La respuesta debe ser un código 404
- And El mensaje de respuesta debe ser "El ID no corresponde a ninguna categoría."
Probado
-
Scenario: Error inesperado durante la recuperación
- Given Que el servicio de categorías falla inesperadamente
-
When Realizo un PUT a
/products/categoria/recuperar/{id} - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "Error: Error inesperado."
Probado
-
Scenario: Enviar un parámetro de tipo incorrecto para el ID
- Given Que el ID proporcionado no es un entero
-
When Realizo un PUT a
/products/categoria/recuperar/{id} - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "El parámetro '{id}' debe ser un número entero válido."
Probado
Como cliente, quiero obtener todas las categorías para ver las disponibles en el sistema.
-
Scenario: Obtener todas las categorías exitosamente.
- Given Soy un cliente
-
When Envío un GET a
/products/categorias - Then La respuesta debe ser un código 200
- And El cuerpo de la respuesta debe contener una lista de categorías
- And Cada categoría debe tener atributos válidos como "id" y "nombre."
Probado
-
Scenario: Obtener todas las categorías exitosamente
- Given Soy un cliente
- And No existe ninguna categoría
-
When Envío un GET a
/products/categoria/1 - Then La respuesta debe ser un código 200
- And El cuerpo de la respuesta debe contener una lista vacía
- And El cuerpo de la respuesta debe contener el mensaje "No hay categorías creadas."
Probado
Como cliente, quiero obtener una categoría por su ID para ver los detalles de la categoría específica.
-
Scenario: Obtener categoría por ID exitosamente
- Given Soy un cliente
- And Existe una categoría con el ID 1
-
When Envío un GET a
/products/categoria/1 - Then La respuesta debe ser un código 200
- And El cuerpo de la respuesta debe contener la categoría con ID 1
- And La categoría debe tener un atributo válido "nombre."
Probado
-
Scenario: Obtener categoría con ID inexistente
- Given Soy un cliente
- And No existe una categoría con el ID 999
-
When Envío un GET a
/products/categoria/999 - Then La respuesta debe ser un código 400
- And El cuerpo de la respuesta debe contener el mensaje "No se encontró la categoría con el ID."
Probado
-
Scenario: Obtener categoría eliminada
- Given Soy un cliente
- And Existe una categoría con el ID 2 pero está marcada como eliminada
-
When Envío un GET a
/products/categoria/2 - Then La respuesta debe ser un código 400
- And El cuerpo de la respuesta debe contener el mensaje "No se puede traer un objeto que esté eliminado."
Probado
-
Scenario: Obtener categoría con ID inválido
- Given Soy un cliente
-
When Envío un GET a
/products/categoria/abc - Then La respuesta debe ser un código 400
- And El cuerpo de la respuesta debe contener el mensaje "El parámetro 'id' debe ser un número entero válido."
Probado
DOCUMENTACIÓN GENERAL
- Exclusiones
- Herramientas de Tracking
- Meetings
- Plan de Proyecto
- Plan de Comunicación
- Product Backlog del Proyecto
- Product Backlog del MVP
- Plan de Testing
- Plan de Gestión de la Configuración
- Investigación IOT
- Backlog de fallas
- Backlog de cambios
- Backlog de sugerencias
SPRINT N°1
SPRINT N° 2
SPRINT N° 3
DOCUMENTACIÓN FRONTEND
DOCUMENTACIÓN BACKEND