Este desafio consiste em criar uma API REST para um marketplace de Discos que será consumida por um aplicativo mobile e uma aplicação web. Todos os itens serão colocados em um carrinho de compras e passados para a API para realizar uma transação e-commerce.
Faça o fork neste repositório e quando concluir o desafio faça um pull request para iniciar a nossa análise.
Escolha a tecnologia que achar melhor, contudo, deverá informar quais tecnologias foram usadas, como instalar, rodar e efetuar os acessos no arquivo para análise do desafio.
Esse método deve receber um item novo e persistir no banco de dados.
{
"product_id":"d2eda25e-9757-11e9-bc42-526af7764f64",
"artist":"Pink Floyd",
"year":1973,
"album":"Dask Side of The Moon",
"price":250,
"store":"Minha Loja de Discos",
"thumb":"https://images-na.ssl-images-amazon.com/images/I/61R7gJadP7L._SX355_.jpg",
"date":"26/11/2018"
}
- Product
Campo | Tipo |
---|---|
product_id | String |
artist | String |
year | Integer |
album | String |
price | Integer |
store | String |
thumb | String |
date | String |
Retornar uma lista de produtos no seguinte formato JSON
[
{
"product_id":"d2eda25e-9757-11e9-bc42-526af7764f64",
"artist":"Pink Floyd",
"year":1973,
"album":"Dask Side of The Moon",
"price":250,
"store":"Minha Loja de Discos",
"thumb":"https://images-na.ssl-images-amazon.com/images/I/61R7gJadP7L._SX355_.jpg",
"date":"26/11/2018"
},
{
"product_id":"4a149a9a-9758-11e9-bc42-526af7764f64",
"artist":"U2",
"year":1993,
"album":"Zooropa",
"price":100,
"store":"Super Discos",
"thumb":"https://images-na.ssl-images-amazon.com/images/I/81ZmhD2lO8L._SL1200_.jpg",
"date":"01/02/2019"
},
{
"product_id":"53f2b33a-9758-11e9-bc42-526af7764f64",
"artist":"The Beatles",
"year":1969,
"album":"Abbey Road",
"price":180,
"store":"Old School Discos",
"thumb":"https://images-na.ssl-images-amazon.com/images/I/919WO8q-nnL._SL1500_.jpg",
"date":"13/06/2019"
}
]
- Product
Campo | Tipo |
---|---|
product_id | String |
artist | String |
year | Integer |
album | String |
price | Integer |
store | String |
thumb | String |
date | String |
Adicionar item ao carrinho.
{
"cart_id":"c5b6c552-9757-11e9-bc42-526af7764f64",
"client_id":"fac3591c-9785-11e9-bc42-526af7764f64",
"product_id":"d2eda25e-9757-11e9-bc42-526af7764f64",
"date":"26/11/2018"
"time":"18:33:12"
}
- Cart
Campo | Tipo |
---|---|
cart_id | String |
client_id | Integer |
product_id | String |
date | String |
time | String |
Após o cliente incluir todos itens no carrinho, a compra será finalizada, invocando o método buy
na sua API.
Finalizar a compra.
{
"client_id":"fac3591c-9785-11e9-bc42-526af7764f64",
"cart_id":"c5b6c552-9757-11e9-bc42-526af7764f64",
"client_name":"John Snow",
"value_to_pay":280,
"credit_card":{
"number":"1234123412341234",
"cvv":111,
"exp_date":"06/22",
"card_holder_name":"John S",
}
}
- Transaction
Campo | Tipo |
---|---|
client_id | String |
client_name | String |
total_to_pay | Integer |
credit_card | CreditCard |
- CreditCard
Campo | Tipo |
---|---|
card_number | String |
card_holder_name | String |
cvv | Integer |
exp_date | String |
Esse método deve retornar todos as compras realizadas na API
[
{
"client_id":"fac3591c-9785-11e9-bc42-526af7764f64",
"order_id":"569c30dc-6bdb-407a-b18b-3794f9b206a1",
"card_number":"**** **** **** 1234",
"value":100,
"date":"21/08/2018"
},
{
"client_id":"fac3591c-9785-11e9-bc42-526af7764f64",
"order_id":"569c30dc-6bdb-407a-b18b-3794f9b206a2",
"card_number":"**** **** **** 1234",
"value":280,
"date":"20/02/2019"
},
{
"client_id":"fac3591c-9785-11e9-bc42-526af7764f64",
"order_id":"569c30dc-6bdb-407a-b18b-3794f9b206aa",
"card_number":"**** **** **** 1234",
"value":500,
"date":"29/06/2019"
}
]
- History
Campo | Tipo |
---|---|
card_number | String |
cliend_id | String |
value | Integer |
order_id | String |
Chamada da API deve retornar todos as compras realizadas por um cliente específico
[
{
"client_id":"fac3591c-9785-11e9-bc42-526af7764f64",
"order_id":"569c30dc-6bdb-407a-b18b-3794f9b206a1",
"value":180,
"date":"19/01/2019",
"card_number":"**** **** **** 1234"
},
{
"client_id":"fac3591c-9785-11e9-bc42-526af7764f64",
"order_id":"569c30dc-6bdb-407a-b18b-3794f9b206a2",
"value":100,
"date":"20/06/2019",
"card_number":"**** **** **** 1234"
}
]
- A solução deve ser escalável, preparada para receber um grande volume de requisições;
- Os endpoints do serviço devem responder num tempo satisfatório, que não comprometa a experiência dos usuários, mesmo com um grande volume de dados;
- O desenvolvimento pode ser feito utilizando qualquer linguagem de programação e qualquer sistema de banco de dados, cabendo ao desenvolvedor escolher o que for melhor para a situação;
- Serão avaliados a arquitetura, os padrões utilizados para o desenvolvimento, documentação, arquitetura da solução e a entrega no prazo;