Agora é a hora de colocarmos em prática tudo o que relembramos em nossas sessões e o que pudemos estudar à mais durante esse tempo.
Para tal propomos aqui um desafio.
Devemos construir um componente dessa e-store que viemos evoluindo durante o programa.
Este componente é uma aplicação REST que tem por objetivo servir operações sobre um carrinho de compra.
Para esse desafio solicitamos que atendam:
- Criem uma aplicação funcional
- As operações implementadas respeitem a convenção REST (Methods e Response)
- Seja implementado usando Java 11+ e Spring Boot 2.5.3+
- Seja implementado um código legível e organizado
- Atendam as User Stories abaixo descritas e os contratos estabelecidos
- Utilizar uma base de dados para o armazenamento das informações
- README atualizado com instruções de execução
Continuamos a desenvolver a nossa e-store. Agora precisamos construir o carrinho de compras (shopping-cart).
Eu, como comprador, quero ter um único carrinho de compras onde eu possa adicionar produtos.
Eu, como comprador, quero adicionar um ou mais de um item de cada produto.
Eu, como comprador, quero listar os itens no meu carrinho de compra.
Eu, como comprador, quero incrementar a quantidade de um produto já no carrinho.
Eu, como comprador, quero remover todos os items de um mesmo produto do carrinho.
Eu, como comprador, quero decrementar a quantidade de um produto já no carrinho.
Eu, como comprador, quero calcular o valor total dos itens no meu carrinho.
Eu, como comprador, quero esvaziar meu carrinho.
POST /shopping-cart/<user-id>/items/<SKU>
Body
{
"price":"10.00",
"name":"Bananas",
"quantity": 1 //optional, default value 1
}
Response
CREATED 201
{
"sku":"ASDFGHJK",
"price":"10.00",
"name":"Bananas",
"quantity": 1
}
PUT /shopping-cart/<user-id>/items/<SKU>
Body
{
"price":"10.00",
"name":"Bananas",
"quantity": 1 //optional, default value 1
}
Response
OK 200
{
"sku":"ASDFGHJK",
"price":"10.00",
"name":"Bananas",
"quantity": 1
}
PATCH /shopping-cart/<user-id>/items/<SKU>?quantity=<new quantity>
Body None
Response
OK 200
{
"sku":"ASDFGHJK",
"price":"10.00",
"name":"Bananas",
"quantity": 1
}
DELETE /shopping-cart/<user-id>/items/<SKU>
Body None
Response
OK 200
{
"sku":"ASDFGHJK",
"price":"10.00",
"name":"Bananas",
"quantity": 1
}
GET /shopping-cart/<user-id>/items/<SKU>
Body None
Response
OK 200
{
"sku":"ASDFGHJK",
"price":"10.00",
"name":"Bananas",
"quantity": 1
}
GET /shopping-cart/<user-id>
Body None
Response
OK 200
{
"items": [
{
"sku":"ASDFGHJK",
"price":"10.00",
"name":"Bananas",
"quantity": 1
},
{
"sku":"ASDFGHJZ",
"price":"20.00",
"name":"Maçãs",
"quantity": 2
}
],
"total":"50.00"
}
DELETE /shopping-cart/<user-id>
Body None
Response
OK 200
{
"items": [
{
"sku":"ASDFGHJK",
"price":"10.00",
"name":"Bananas",
"quantity": 1
},
{
"sku":"ASDFGHJZ",
"price":"20.00",
"name":"Maçãs",
"quantity": 2
}
],
"total":"50.00"
}
Response Any 4XX or 5XX errors
{
"resource":"<resource name>",
"error_key":"<error type key>",
"message":"<error message>",
"resource_key":"<resource id>"
}
Ex:
Response
RESOURCE NOT FOUND 404
{
"resource":"product",
"error_key":"product.not.found",
"message":"There is no product on shopping cart for the given SKU.",
"resource_key":"ASDFGHJK"
}
- Dar fork neste repositório.
- Implementar desafio.
- Propor um pull request.
Caso consigam completar os requisitos aqui estabelecidos e se sintam confortáveis em ir um pouco além, podem ficar à vontade em acrescentar qualquer melhoria além destes. Como por exemplo:
- Testes de Unidade
- Docker
- Logs
- API Doc (Swagger Open API)
- Autenticação
- Qualquer lib ou framework adicional
- Testes de componente (API)