Obrigado por participar do nosso desafio e pelo seu interesse em trabalhar conosco. Nós preparamos um desafio muito legal para você: Criar um jogo de comparação de cartas.
- Faça o desafio sozinho;
- Você poderá desenvolver seu backend utilizando qualquer linguagem/framework ou banco de dados;
- Faça sua aplicação utilizando o padrão REST. Escolha bem os métodos, endpoints e status codes de retorno;
- Crie um repositório público no GitHub;
- Inicie seu projeto, crie suas branches e faça seus commits regularmente;
- Você pode consultar qualquer site para auxiliá-lo no seu desenvolvimento;
- Na raiz do seu projeto, adicione um arquivo README detalhando como que buildamos e executamos o seu projeto. Você pode usar este template para criar o seu;
- Qualquer dúvida sobre o desafio crie uma issue neste projeto e iremos te responder o mais rápido possível;
- Escolha sua playlist favorita e bora codar! Estamos torcendo por você 🤞🤞🏻🤞🏼🤞🏽🤞🏾🤞🏿
Boa sorte!
Neste desafio, você fará um jogo de comparação de cartas, com tema livre, onde deverá ser possível enviar duas cartas para a aplicação fazer uma comparação de atributos e a carta com a maior quantidade de atributos fortes será a vencedora. Por exemplo:
Imagine as seguintes cartas de pokemons:
Ao realizar a comparação destas cartas conseguimos ver que:
- Os atributos
hp
,defense
,special-attack
especial-defense
do Bulbasaur são mais fortes que os do Charmander - Os atributos
attack
espeed
doCharmander
são mais fortes que os do Bulbasaur
Logo, o Bulbasaur possui a maior quantidade de atributos que são maiores que os do Charmander, então o Bulbasaur é o vencedor.
- Operações para cadastro, listagem, consulta e alteração de cartas
- Operações para comparação de cartas e resultado acumulado
- Banco de dados para armazenar as cartas e os resultados das comparações
- Operação de exclusão de cartas
- Adicionar paginação e filtros na listagem de cartas
- Configurar a sua aplicação para rodar dentro de um container
- O README
- Se a aplicação funciona
- Se contém todos os itens obrigatórios detalhados em O que queremos que você construa
- A organização do seu código
- Seus commits, branches e etc
- A sua modelagem do banco de dados
- Testes unitários
Esta operação deverá realizar o cadastro de uma carta e retornar o identificador dela na resposta.
Método: À sua escolha
Endpoint: À sua escolha
Body: A entrada deverá ser algo parecido com este Json, com o nome da carta e seus atributos, fique à vontade para alterar caso ache necessário:
{
"name": "bulbasaur",
"attributes": {
"hp": 45,
"attack": 49,
"defense": 49,
"special-attack": 65,
"special-defense": 65,
"speed": 45
}
}
Na resposta é importante devolver o identificador da carta cadastrada, fique à vontade para escolher onde retornar esta informação.
Status Code: À sua escolha
Body: À sua escolha
Esta operação deverá listar todas as cartas cadastradas na aplicação.
Método: À sua escolha
Endpoint: À sua escolha
Body: À sua escolha
Devolver uma listagem das cartas.
Status Code: À sua escolha
Body: O retorno deverá ser um array com as cartas cadastradas:
[
{
"name": "bulbasaur",
"attributes": {
"hp": 45,
"attack": 49,
"defense": 49,
"special-attack": 65,
"special-defense": 65,
"speed": 45
}
}
]
Esta operação deverá retornar uma carta específica baseada em seu identificador.
Método: À sua escolha
Endpoint: À sua escolha
Body: À sua escolha
Devolver uma carta.
Status Code: À sua escolha
Body: O retorno deverá ser a carta solicitada:
{
"id": 1,
"name": "bulbasaur",
"attributes": {
"hp": 45,
"attack": 49,
"defense": 49,
"special-attack": 65,
"special-defense": 65,
"speed": 45
}
}
Esta operação deverá fazer a comparação seguindo a explicação dada anteriormente e após cada comparação, registre em banco de dados os resultados.
Método: À sua escolha
Endpoint: À sua escolha
Body: A entrada deverá ser algo parecido com este Json, com o identificador das duas cartas, fique à vontade para alterar caso ache necessário:
{
"playerOneCard": 1,
"playerTwoCard": 2
}
Status Code: À sua escolha
Body: O retorno deverá ser o resultado da comparação e os detalhes sobre o vencedor em cada um dos atributos:
{
"winner": 1,
"loser": 2,
"details": {
"hp": 1,
"attack": 2,
"defense": 1,
"special-attack": 1,
"special-defense": 1,
"speed": 2
}
}
OBS.: Em caso de empate você deverá retornar um Status Code diferente, a comparação não deverá ser registrada no banco de dados o corpo da resposta pode ser vazio.
Esta operação deverá fornecer um resultado acumulado de todas as comparações feitas dentro da aplicação, informando o somatório de vitórias dos dois jogadores. Neste caso, não há a necessidade de envio de dados na requisição, sendo importante termos apenas a resposta.
Método: À sua escolha
Endpoint: À sua escolha
Body: Não é necessário
Status Code: À sua escolha
Body: O retorno deverá ser o resultado acumulado de vitórias dos jogadores:
{
"playerOne": 123,
"playerTwo": 23
}
Você poderá escolher qualquer banco de dados (SQL ou NoSQL). Faça a modelagem do seu banco para atender às especificações detalhadas no desafio, crie um desenho como achar melhor para detalhar a estrutura/organização do seu banco de dados e deixe este arquivo na raiz do seu projeto.
Para a entrevista, certifique-se de que a sua aplicação estará funcionando na sua máquina para que você a apresente para nós.