Teste destinado aos candidatos a vaga de Programador Backend.
Um cliente chamado Bruce Wayne nos contratou para fazer um sistema com o objetivo de catalogar os super-heróis existentes.
Parece uma missão difícil, mas, não se preocupe, o seu papel não será o de sair por aí procurando por heróis, vamos deixar isso para o Sr. Wayne...
Seu papel é desenvolver uma API com as operações básicas de cadastro de um herói e algum mago (coff, coff) do front-end fará as telas.
Bom, aqui começa a explicação do que você terá que nos entregar. Leia com atenção.
Ah, o Alfred (acho que ele é tipo um mordono do Sr. Wayne) começou o projeto para nós e o esqueleto do projeto já existe.
Dito isso vamos deixar uma lista com as tarefas:
- Criar endpoint de criação de heróis respeitando os campos obrigatórios. Olhe o script SQL dentro do projeto para saber quais são os campos obrigatórios.;
- Criar endpoint de busca de heróis e seus atributos por ID. Caso não encontre o herói o sistema deve retornar um erro 404 (Not Found);
- Criar endpoint de busca de heróis e seus atributos por filtro, nesse caso o filtro será apenas o nome. Caso não encontre nenhum herói o sistema deve retornar um sucesso 200 com o body vazio;
- Criar endpoint de atualização de heróis, todos os campos poderão ser atualizados. Caso não encontre o herói o sistema deve retornar um erro 404 (Not Found);
- Criar endpoint de exclusão de heróis. A exclusão será física, ok? (Física?! É, deleta o registro da base). Caso não encontre o herói o sistema deve retornar um erro 404 (Not Found);
- Criar testes unitários e de integração das funcionalidades desenvolvidas. As classes de teste unitário terminam com o prefixo
Test.java
e as classes de teste de integração terminam comIT.java
. Temos um modelo de classe de exemplo dentro do projeto; - Criar um
docker-compose.yml
funcional para execução da aplicação. (Banco de Dados + API).
Ah, tem algo mais! O Sr. Wayne nos pediu para criar um endpoint onde ele possa selecionar dois heróis e comparar seus atributos força, agilidade, destreza e inteligência. Como resultado, o sistema deve retornar um objeto contendo os id's e a diferença dos atributos (positivo se maior, negativo se menor) de cada herói. Dá uma pensada em como vai ficar esse objeto e o caminho do endpoint, tudo bem?
Agora sim, terminamos! Se você nos entregar isso que pedimos garanto que o Sr. Wayne vai pirar!!!
Leia essas instruções para ganhar tempo no desenvolvimento, ok? ;)
Como primeiro passo faça checkout desse projeto e suba na sua conta do GitHub como repositório privado, se não tiver uma conta é só criar uma nova.
Não iremos avaliar provas que não estejam nesse padrão, então MUITA ATENÇÃO nessa dica.
- Ao término da prova, adicione o usuário gubeemarketplace como colaborador, é assim que iremos avaliar o código proposto.
- Não serão avaliados testes sem testes unitários.
- Mostre como usar orientação a objetos da forma correta, separação de responsabilidades.
- Mostre como aplicar composição vs herança no projeto.
- A persistência é em um banco relacional, sendo assim gostariamos de ver como utiliza esse meio de acesso sem ORM.
- Mostre o funcionamento do gerenciamento de versão das atualizações do banco de dados automatizado.
- docker-compose criado
- Redundância e Escalabilidade da API:
- Mínimo de 2 instâncias;
- Endpoint de
HealthCheck
das máquinas;
- Minimo OpenJDK 21 instalado;
- Maven na versão 3.8+ instalado;
- IDE pode ser o de preferência, mas gostamos bastante do IntelliJ por aqui;
- Docker e docker-compose instalados.
Para rodar os testes (unitários e de integração) utilize o comando a seguir: Se atentar a diferença dos testes acima citados.
mvn clean verify
- Desejável Interface minimamente simples com angular listando os registro com um botão criar e editar.
Será considerado um plus os candidatos que entregarem:
- Bom uso dos padrões de REST;
- Refatorar para Arquitetura Hexagonal/Clean Arch
- Uso de BDD para escrever os testes de integração;
- (Opcional) Monitoramento das máquinas.
- Cache Distribuído:
- Utilizar algum mecanismo de cache distribuído na camada de banco de dados.