Esta é uma avaliação básica de código.
O objetivo é conhecer um pouco do seu conhecimento/prática de RESTful e NodeJS.
Recomendamos que você não gaste mais do que 4 - 6 horas.
Faça um fork deste repositório.
Ao finalizar o teste, submeta um pull request para o repositório que nosso time será notificado.
Com a seguinte representação de produto:
{
"sku": 43264,
"name": "L'Oréal Professionnel Expert Absolut Repair Cortex Lipidium - Máscara de Reconstrução 500g",
"inventory": {
"quantity": 15,
"warehouses": [
{
"locality": "SP",
"quantity": 12,
"type": "ECOMMERCE"
},
{
"locality": "MOEMA",
"quantity": 3,
"type": "PHYSICAL_STORE"
}
]
},
"isMarketable": true
}Crie endpoints para as seguintes ações:
-
Criação de produto onde o payload será o json informado acima (exceto as propriedades isMarketable e inventory.quantity)
-
Edição de produto por sku
-
Recuperação de produto por sku
-
Deleção de produto por sku
-
Toda vez que um produto for recuperado por sku deverá ser calculado a propriedade: inventory.quantity
A propriedade inventory.quantity é a soma da quantity dos warehouses -
Toda vez que um produto for recuperado por sku deverá ser calculado a propriedade: isMarketable
Um produto é marketable sempre que seu inventory.quantity for maior que 0 -
Caso um produto já existente em memória tente ser criado com o mesmo sku uma exceção deverá ser lançada
Dois produtos são considerados iguais se os seus skus forem iguais -
Ao atualizar um produto, o antigo deve ser sobrescrito com o que esta sendo enviado na requisição
A requisição deve receber o sku e atualizar com o produto que tbm esta vindo na requisição
- Os produtos podem ficar em memória, não é necessário persistir os dados
- Testes são sempre bem-vindos 😃
Tecnologias que o projeto utiliza.
Após clonar o projeto, execute os passos abaixo:
Para executar a aplicação utilizando docker:
docker-compose up -d --buildCriar o arquivo .env baseado no .env.example. Esse arquivo contém as informações para execução da aplicação, como: porta e host;
npm installnpm starthttp://localhost:3000Com a aplicação em execução, há duas maneiras de consumir seus recursos:
curl --location 'localhost:3000/api/v1/products' \
--header 'Content-Type: application/json' \
--data '{
"sku": 43261,
"name": "L'\''Oréal Professionnel Expert Absolut Repair Cortex Lipidium - Máscara de Reconstrução 500g",
"inventory": {
"warehouses": [
{
"locality": "SP",
"quantity": 10,
"type": "ECOMMERCE"
},
{
"locality": "MOEMA",
"quantity": 4,
"type": "PHYSICAL_STORE"
},
{
"locality": "FRANCA",
"quantity": 0,
"type": "PHYSICAL_STORE"
}
]
}
}'
curl --location 'localhost:3000/api/v1/products'
curl --location 'localhost:3000/api/v1/products/43261'
curl --location --request PUT 'localhost:3000/api/v1/products/43261' \
--header 'Content-Type: application/json' \
--data '{
"name": "Produto Teste",
"inventory": {
"warehouses": [
{
"locality": "SP",
"quantity": 0,
"type": "ECOMMERCE"
},
{
"locality": "MOEMA",
"quantity": 0,
"type": "PHYSICAL_STORE"
},
{
"locality": "FRANCA",
"quantity": 0,
"type": "PHYSICAL_STORE"
}
]
}
}'
curl --location --request DELETE 'localhost:3000/api/v1/products/43261'
É possível importar o arquivo belezanaweb.json que se encontra no diretório /.docs via postman. Após importar o mesmo, as rotas listadas acima, serão importadas no seu postman.
Os testes do projeto encontram-se dentro da pasta ./test, na qual utiliza as dependências jest. Para executar a suíte de teste execute o comando:
$ npm testPor favor abra uma issue para suporte.
- Faça um fork do projeto.
- Crie sua feature branch (
git checkout -b my-new-feature). - Commit suas alterações (
git commit -am 'Add some feature'). - Faça um push de sua branch (
git push origin my-new-feature). - Crie uma nova pull request.
Esse projeto utiliza o husky para executar algumas ações, uma delas é o pre-push. Ou seja, antes que o git push seja executado, os testes serão rodados.