-
Notifications
You must be signed in to change notification settings - Fork 1
Marca
El modelo Marca representa una entidad de una marca en el sistema. A continuación, se describen sus atributos y métodos.
-
id(Integer): -
- Clave primaria de la marca.
-
- Se genera automáticamente con la estrategia
GenerationType.IDENTITY.
- Se genera automáticamente con la estrategia
-
nombre(String): -
- Nombre de la marca.
-
- 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 marca fue eliminada (si es que lo fue).
-
- Puede ser
nullsi la marca no está eliminada.
- Puede ser
-
Endpoint:
POST /products/marca - Descripción: Crea una nueva marca en el sistema.
- Cuerpo de la Solicitud:
-
-
nombre: string (obligatorio, máximo 100 caracteres)
-
{
"nombre": "nombre marca" //String
}- Respuestas:
- 201 Created: Marca creada exitosamente (Esto aplica tanto para cuando se crea una marca, o cuando se quiere crear una marca con el mismo nombre que una marca eliminada, en ese caso lo que se hace es recuperar dicha marca).
{
"status": 201,
"message": "Created.",
"data": {
"id": 1,
"nombre": "Azul"
},
"errors": null
}- 400 Bad Request:
-
- No se envió un nombre para la marca.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "No se envió un nombre para la marca."
}-
- 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 marca con este nombre.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "Ya existe una marca 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/marca - Descripción: Actualiza una marca existente en el sistema.
- Cuerpo de la Solicitud:
-
-
id: integer (obligatorio)
-
-
-
nombre: string (obligatorio, máximo 100 caracteres)
-
{
"id": 1, //int
"nombre": "nombre marca" //String
}- Respuestas:
- 201 Created: Marca actualizada exitosamente.
{
"status": 200,
"message": "OK",
"data": {
"id": 1,
"nombre": "Azul"
},
"errors": null
}- 404 Not Found: El ID no corresponde a ninguna marca.
{
"status": 404,
"message": "Error: Not Found",
"data": null,
"errors": "No se encontró la marca con el ID."
}- 400 Bad Request:
-
- La marca 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 marca debe tener un nombre.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "La marca 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 marca con este nombre.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "Ya existe una marca 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/marca/{id} - Descripción: Eliminar una marca.
- Parámetros de Ruta:
-
-
id: integer (obligatorio)
-
- Respuestas:
- 200 OK: Marca eliminada exitosamente.
{
"status": 200,
"message": "OK.",
"data": {
"id": 1,
"nombre": "Azul",
"fechaEliminacion": "2024-09-28T12:34:56"
},
"errors": null
}- 400 Bad Request:
-
- La marca ya está eliminada.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "La marca ya se encuentra eliminada, se debe enviar el id de una marca no eliminada."
}-
- 404 Not Found: El ID no corresponde a ninguna marca.
{
"status": 404,
"message": "Error: Not Found.",
"data": null,
"errors": "El id no corresponde a ninguna marca, se debe enviar el id de una marca 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/marca/recuperar/{id} - Descripción: Recupera una marca que ha sido eliminada.
- Parámetros de Ruta:
-
-
id: integer (obligatorio)
-
- Respuestas:
- 200 OK: Marca recuperada exitosamente.
{
"status": 200,
"message": "OK",
"data": {
"id": 1,
"nombre": "Azul"
},
"errors": null
}- 400 Bad Request:
-
- La marca no está eliminada.
{
"status": 400,
"message": "Error: Bad Request.",
"data": null,
"errors": "La marca no está eliminada."
}-
- 404 Not Found: El ID no corresponde a ninguna marca.
{
"status": 404,
"message": "Error: Not Found",
"data": null,
"errors": "No se encontró la marca 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/marcas - Descripción: Obtiene una lista de todas las marcas.
- Respuestas:
- 200 OK: Lista de marcas devuelta exitosamente.
{
"status": 200,
"message": "OK",
"data": [
{
"id": 1,
"nombre": "Azul"
},
{
"id": 2,
"nombre": "Amarillo"
}
],
"errors": null
}- 400 Bad Request:
-
- No existen marcas.
{
"status": 400,
"message": "Bad request",
"data": null,
"errors": "No hay marcas creadas."
}-
Endpoint:
GET /products/marca/{id} - Descripción: Obtiene una marca específica por su ID.
-
Parámetros de Ruta:
**
id: integer (obligatorio) - Respuestas:
- 200 OK: Marca devuelta exitosamente.
{
"status": 200,
"message": "OK",
"data": {
"id": 1,
"nombre": "Azul"
},
"errors": null
}- 400 Bad Request:
-
- No se encontró la marca con el ID.
{
"status": 404,
"message": "Error: Not Found",
"data": null,
"errors": "No se encontró la marca 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 marca para que esté disponible en el sistema.
- Given El servicio de marcas está disponible
-
Scenario: Enviar una marca válida
- Given Que el cuerpo del request contiene un nombre válido
-
When Realizo un POST a
/products/marcacon los datos - Then La respuesta debe ser un código 201
- And La respuesta debe contener un objeto de marca 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/marca - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "No se envió un nombre para la marca."
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/marca - 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 marca eliminada
-
When Realizo un POST a
/products/marca - Then La respuesta debe ser un código 201
- And La marca 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 marca existente no eliminada
-
When Realizo un POST a
/products/marca - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "Ya existe una marca con este nombre."
Probado
-
Scenario: Enviar una marca 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/marca - 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 marcas falla inesperadamente
-
When Realizo un POST a
/products/marca - 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/marca - 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 marca existente para mantener los datos actualizados en el sistema.
- Given El servicio de marcas está disponible
-
Scenario: Actualizar una marca válida
- Given Que el cuerpo del request contiene un ID válido y un nombre válido
-
When Realizo un PUT a
/products/marcacon los datos - Then La respuesta debe ser un código 201
- And La respuesta debe contener un objeto de marca actualizado
- And El mensaje de respuesta debe ser "Created."
Probado
-
Scenario: Enviar una marca sin ID
- Given Que el cuerpo del request no contiene un ID
-
When Realizo un PUT a
/products/marca - Then La respuesta debe ser un código 404
- And El mensaje de respuesta debe ser "El ID no corresponde a ninguna marca."
Probado
-
Scenario: Enviar una marca con ID de una marca eliminada
- Given Que el cuerpo del request contiene un ID de una marca eliminada
-
When Realizo un PUT a
/products/marca - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "La marca no se puede modificar debido a que se encuentra eliminada."
Probado
-
Scenario: Enviar una marca sin nombre
- Given Que el cuerpo del request contiene un ID válido pero sin nombre
-
When Realizo un PUT a
/products/marca - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "La marca 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/marca - 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 marca que ya existe
- Given Que el cuerpo del request contiene un ID válido y un nombre de una marca existente
-
When Realizo un PUT a
/products/marca - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "Ya existe una marca con este nombre, no puede haber dos marcas con el mismo nombre."
Probado
-
Scenario: Error inesperado durante la actualización
- Given Que el servicio de marcas falla inesperadamente
-
When Realizo un PUT a
/products/marca - 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 marca eliminada para reutilizarla en el sistema.
- Given El servicio de marcas está disponible
-
Scenario: Recuperar una marca eliminada correctamente
- Given Que la marca con el ID proporcionado está eliminada
-
When Realizo un PUT a
/products/marca/recuperar/{id} - Then La respuesta debe ser un código 200
- And El mensaje de respuesta debe ser "OK."
Probado
-
Scenario: Recuperar una marca que no está eliminada
- Given Que la marca con el ID proporcionado no está eliminada
-
When Realizo un PUT a
/products/marca/recuperar/{id} - Then La respuesta debe ser un código 400
- And El mensaje de respuesta debe ser "La marca ya no se encuentra eliminada, se debe enviar el ID de una marca eliminada."
Probado
-
Scenario: Recuperar una marca con un ID inexistente
- Given Que no existe una marca con el ID proporcionado
-
When Realizo un PUT a
/products/marca/recuperar/{id} - Then La respuesta debe ser un código 404
- And El mensaje de respuesta debe ser "El ID no corresponde a ninguna marca."
Probado
-
Scenario: Error inesperado durante la recuperación
- Given Que el servicio de marcas falla inesperadamente
-
When Realizo un PUT a
/products/marca/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/marca/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 marcas para ver las disponibles en el sistema.
-
Scenario: Obtener todas las marcas exitosamente.
- Given Soy un cliente
-
When Envío un GET a
/products/marcas - Then La respuesta debe ser un código 200
- And El cuerpo de la respuesta debe contener una lista de marcas
- And Cada marca debe tener atributos válidos como "id" y "nombre."
Probado
-
Scenario: Obtener todas las marcas exitosamente
- Given Soy un cliente
- And No existe ninguna marca
-
When Envío un GET a
/products/marca/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 marcas creadas."
Probado
Como cliente, quiero obtener una marca por su ID para ver los detalles de la marca específica.
-
Scenario: Obtener marca por ID exitosamente
- Given Soy un cliente
- And Existe una marca con el ID 1
-
When Envío un GET a
/products/marca/1 - Then La respuesta debe ser un código 200
- And El cuerpo de la respuesta debe contener la marca con ID 1
- And La marca debe tener un atributo válido "nombre."
Probado
-
Scenario: Obtener marca con ID inexistente
- Given Soy un cliente
- And No existe una marca con el ID 999
-
When Envío un GET a
/products/marca/999 - Then La respuesta debe ser un código 400
- And El cuerpo de la respuesta debe contener el mensaje "No se encontró la marca con el ID."
Probado
-
Scenario: Obtener marca eliminada
- Given Soy un cliente
- And Existe una marca con el ID 2 pero está marcada como eliminada
-
When Envío un GET a
/products/marca/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 marca con ID inválido
- Given Soy un cliente
-
When Envío un GET a
/products/marca/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