Skip to content

perdigaob/test-java

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Backend Test

Build Status

codecov

Esta é uma avaliação básica de código.

O objetivo é conhecer um pouco do seu conhecimento/prática de RESTful, Spring e Java.

Recomendamos que você não gaste mais do que 4 - 6 horas.

Faça um fork deste repositório que contém o bootstrap de uma aplicação SpringBoot 1.5.12. (você pode utilizar spring boot 2+)

Ao finalizar o teste, submeta um pull request para o repositório que nosso time será notificado.

Tarefas

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

Requisitos

  • 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
    

Dicas

  • Os produtos devem ficar em memória, não é necessário persistir os dados. Não utilize h2
  • Não é necessário adicionar swagger (não será avaliado)
  • Sinta-se a vontade para fazer o código em groovy, kotlin ou scala se preferir, utilizamos bastante aqui
  • Testes são sempre bem-vindos 😃

Endpoints disponíveis

GET /product/{sku}

Busca um produto por SKU.

curl --location 'http://localhost:8080/product/12345'

POST /product

Adiciona um produto.

curl --location 'http://localhost:8080/product' \ --header 'Content-Type: application/json' \ --data '{ "sku": 12346, "name": "teste", "inventory": { "warehouses": [ { "locality": "teste", "quantity": 6, "type": "ECOMMERCE" } ] } }'

PUT /product/{sku}

Atualiza um produto existente, buscando por SKU.

curl --location --request PUT 'http://localhost:8080/product/12345' \ --header 'Content-Type: application/json' \ --data '{ "sku": 12345, "name": "Produto Teste", "inventory": { "warehouses": [ { "locality": "teste01", "quantity": 3, "type": "ECOMMERCE" }, { "locality": "teste01", "quantity": 5, "type": "ECOMMERCE" } ] } }'

DELETE /product/{sku}

Deleta um produto existente, buscando por SKU.

curl --location --request DELETE 'http://localhost:8080/product/12345'


Observações

  • O programa começa com uma lista de produtos carregada a partir de um arquivo JSON. Os SKUs dos produtos disponíveis variam de 43264 a 43270, sendo que o produto com SKU 43270 possui inventário zerado.
  • Optei por adicionar testes apenas para o controller, para não exceder o tempo sugerido nas instruções.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 100.0%