Una plataforma de venta de productos online desea mejorar las opciones de búsqueda y filtrado de sus productos; para esto, decidió implementar un search engine el cual a partir de las opciones que el usuario determine, devuelva el o los productos que coincidan con las mismas.
Para ello, necesita el desarrollo de una API que proporcione:
- Un listado de todos los productos disponibles.
- Un listado de los productos filtrados por categoría.
- Un listado que permita la combinación de cualquiera de los filtros. Por ejemplo: categoría + envío gratis.
Por otra parte, dado que se pretende una buena experiencia de usuario con respecto a la forma de presentación de los productos, se necesita que los resultados brindados por la API puedan ser ordenados mediante cualquiera de los siguientes criterios: asda 4. Alfabético (Ascendente y Descendente) 5. Mayor precio 6. Menor precio Al mismo tiempo se requiere una API que brinde: 7. La posibilidad de realizar el envío de una solicitud de compra. A partir de ésta, que se pueda recibir como devolución el precio total de la solicitud realizada.
Nota: Tener en cuenta para cada una de estas solicitudes, los posibles “status code” que podrían ser devueltos.
La plataforma manifestó que a futuro le gustaría poder llevar a cabo el desarrollo de los siguientes requerimientos como mejora:
- Para cada solicitud de compra se requiere llevar a cabo el control de stock disponible. Por ejemplo: Si se solicitan 4 unidades de un producto y solo existen dos, colocar las correspondientes restricciones y avisos.
- Permitirelusodeun“carritodecompras”endondeporcadasolicituddecompra que haya se acumule un monto total y sea devuelto al usuario. Por ejemplo: Si en una solicitud de compra se envío un producto de $9.000 y luego uno de $3.000 en otra, debo recibir como respuesta la sumatoria de los dos ($12.000).
Al mismo tiempo, sugiere el desarrollo de una nueva API que permita lo siguiente: 10. Dar de alta nuevos clientes. Para esto, se deben realizar los controles necesarios, por ejemplo: cliente ya existente, cliente con datos incompletos, etc. 11. Poder obtener un listado completo de todos los clientes. 12. Poder obtener un listado de todos los clientes filtrados por Provincia.
Method: GET
Path:
localhost:8080/api/v1/articles
Obtener listado de todos productos filtrados por categorìa / precio / nombre / marca / prestigio / envío gratis:
Method: GET
Path:
localhost:8080/api/v1/articles?category={some_category}&price={some_price}&brand={some_brand}&name={some_name}&prestige={some_rpestige}&freeShipping={true_or_false}
Example:
localhost:8080/api/v1/articles?category=herramientas&brand=makita
Method: GET
Criterio:
0 -> por nombre ascendente
1 -> por nombre descendente
2 -> por precio descendente
default -> por precio ascendente
Path:
localhost:8080/api/v1/articles?order={some_order}
Method: POST
Path:
localhost:8080/api/v1/purchase-request
Body (ejemplo):
{
"articles": [
{
"productId": 1,
"name": "Taladro",
"brand": "Black & Decker",
"quantity": 1
},
{
"productId": 2,
"name": "Soldadora",
"brand": "Black & Decker",
"quantity": 4
}
]
}
Response (ejemplo):
{
"ticket": {
"id": 3,
"articles": [
{
"productId": 1,
"name": "Taladro",
"brand": "Black & Decker",
"quantity": 1
},
{
"productId": 2,
"name": "Soldadora",
"brand": "Black & Decker",
"quantity": 4
}
],
"total": 41300.0
},
"statusCode": {
"message": "Operation performed successfully",
"status": "OK"
}
}
Method: POST
Path:
localhost:8080/api/v1/add-bucket/{bucket_id}
Body (ejemplo):
{
"productId": 0,
"name": "Desmalezadora",
"brand": "Makita",
"quantity": 2
}
Response (ejemplo):
{
"id": 1,
"articles": [
{
"productId": 7,
"name": "Smartwatch",
"brand": "Noga",
"quantity": 2
}
],
"total": 3800.0,
"statusCodeDTO": {
"message": "Operation performed successfully",
"status": "OK"
}
}
Method: POST
Path:
localhost:8080/api/v1/purchase-bucket/{bucket_id}
Response (ejemplo):
{
"id": 1,
"articles": [
{
"productId": 7,
"name": "Smartwatch",
"brand": "Noga",
"quantity": 2
}
],
"total": 3800.0,
"statusCodeDTO": {
"message": "Operation performed successfully",
"status": "OK"
}
}
Method: POST
Path:
localhost:8080/api/v1/customers/new
Body (ejemplo):
{
"name": "Melisa",
"lastname": "Onofri",
"dni": "41526789",
"province": "Buenos Aires"
}
Response (ejemplo):
{
"statusCodeDTO": {
"message": "Operation performed successfully",
"status": "OK"
},
"customer": {
"customerId": 0,
"dni": "41526789",
"name": "Melisa",
"lastname": "Onofri",
"province": "Buenos Aires"
}
}
Method: GET
Path:
localhost:8080/api/v1/customers
Response (example):
{
"list": [
{
"customerId": 0,
"dni": "41236987",
"name": "Melisa",
"lastname": "Onofri",
"province": "Buenos Aires"
}
],
"total": 1,
"statusCodeDTO": {
"message": "Operation performed successfully",
"status": "OK"
}
}
Method: GET
Path:
localhost:8080/api/v1/customers?name={some_name}&province={some_province}
Response (example):
{
"list": [
{
"customerId": 0,
"dni": "41236987",
"name": "Melisa",
"lastname": "Onofri",
"province": "Buenos Aires"
}
],
"total": 1,
"statusCodeDTO": {
"message": "Operation performed successfully",
"status": "OK"
}
}