- JavaScript
- NodeJS
- MySQL
- REST
-
Faça o clone deste repositório.
-
Rode o
dump.sql
em uma base de dados local. Utilize estas tabelas e estes dados. -
Implemente o desafio.
-
Após término envie seu projeto <nome_candidato>.zip no e-mail contato@appmoove.com.br, adicione a pasta do projeto um dump do seu BD após finalizar o teste.
Atenção: Remova a pasta
node_modules
antes de zipar o projeto.
Abra o diretório do projeto no terminal e digite os comandos abaixo
npm install
npm start
- axios
- bluebird
- body-parser
- express
- knex
- mysql2
Você deve desenvolver uma API REST para compra de produtos utilizando a forma de pagamento cartão de crédito. A API deve possibilitar todo o gerenciamento de estoque e venda de produtos, para isso os seguintes endpoints devem ser implementados:
-
Adicionar produtos ao estoque
Esta rota insere um novo registro na tabela produtos.
-
Request
POST http://localhost:8080/api/produtos
-
Body
{ "nome": "Macbook 13\" 8GB|256SSD|2.7Ghz", "valor_unitario": 8450.0, "qtde_estoque": 5 }
-
Retornos possíveis
Código Resposta 201 (Criado)
Produto cadastrado
400 (Requisição inválida)
Ocorreu um erro desconhecido
412 (Pré-condição falhou)
Os valores informados não são válidos.
-
-
Listar produtos
Esta rota lista todos os produtos disponíveis para venda.
-
Request
GET http://localhost:8080/api/produtos
-
Retornos possíveis
Retornar um array com todos os produtos cadastrados. Atributos: nome, valor unitário, quantidade em estoque.
Código Resposta 200 (OK)
[] 400 (Requisição inválida)
Ocorreu um erro desconhecido
-
-
Detalhar um produto
Esta rota obtém um produto específico por seu id, os dados de retorno são id, nome, valor unitário, quantidade em estoque, data e valor da última venda deste produto, caso o produto não possua vendas a data da última venda deve retornar null;
-
Request
GET http://localhost:8080/api/produtos/:produto_id
-
Retornos possíveis
Retornar um objeto com atributos: nome, valor unitário, quantidade em estoque, data e valor da última venda.
Código Resposta 200 (OK)
{} 400 (Requisição inválida)
Ocorreu um erro desconhecido
-
-
Comprar um produto
Esta rota realiza a compra de um produto, ela deve: requisitar a rota Gateway de pagamentos, caso a compra seja aprovada: realizar a baixa do produto no estoque e retornar a resposta de sucesso. Qualquer erro que ocorra durante a compra dever ser retornado a resposta de erro.
Não esqueça de validar o número do cartão de crédito antes de enviá-lo ao gateway.
-
Request
POST http://localhost:8080/api/compras
-
Body
{ "produto_id": 1, "qtde_comprada": 1, "cartao": { "titular": "John Doe", "numero": "4111111111111111", "data_expiracao": "12/2018", "bandeira": "VISA", "cvv": "123", } }
-
Retornos possíveis
Código Resposta 201 (Criado)
Venda realizada com sucesso
400 (Requisição inválida)
Ocorreu um erro desconhecido
412 (Pré-condição falhou)
Os valores informados não são válidos.
-
-
Remover um produto do estoque
Esta rota remove um produto da base de dados.
-
Request
DELETE http://localhost:8080/api/produtos/produto_id
-
Retornos possíveis
Código Resposta 204 (Nenhum conteúdo)
Produto excluído com sucesso
400 (Requisição inválida)
Ocorreu um erro desconhecido
-
- Uso de validadores na rota.
- Testes unitários.
- Documentação
- Utilização adequada das bibliotecas fornecidas [dica: sempre ler a doc ;)].
- Código escrito da maneira mais semântica possível.
- Alguma metodologia para definição e organização do seu código.
- Conteinerização da aplicação.
- Descobrir que não foi você quem fez seu teste.
- Ver commits gigantes, sem mensagens ou com
-m
sem pé nem cabeça.
- Funcionamento e método de resolução do problema.
- Organização do código.
- Performance do código.
- Documentação da API.
- Arquitetura do projeto.
- Semântica, estrutura, legibilidade, manutenibilidade, escalabilidade do seu código e suas tomadas de decisões.
- Históricos de commits do git.
Gateway de pagamentos é um serviço destinado a lojas virtuais, por ele é possível autorizar transações de pagamentos online. Em nosso teste você irá utilizar um gateway de pagamentos em mock, nós criamos uma rota para simular a transação de compra, o que você precisa fazer é fazer um POST nesta rota:
POST http://sv-dev-01.pareazul.com.br:8080/api/gateways/compras
como este body:
{
"valor": 100.0,
"cartao": {
"titular": "John Doe",
"numero": "4111111111111111",
"data_expiracao": "12/2018",
"bandeira": "VISA",
"cvv": "123"
}
}
possíveis respostas do gateway:
- Quando a compra for aprovada
{ "valor": 100.0, "estado": "APROVADO" }
- Quando a compra for rejeitada
{ "valor": 100.0, "estado": "REJEITADO" }
Mande um e-mail para nós: contato@appmoove.com.br