Vamos explicar como funciona o nosso desafio:
Imagine que um desenvolvedor recebeu uma tarefa de uma pessoa da equipe de produto. A pessoa de produto queria poder controlar sondas em outros planetas por meio de comandos. Para explicar o funcionamento do produto, o seguinte exemplo foi escrito em um pedaço de papel:
Tamanho da área do planeta : 5x5
Posição de pouso da sonda 1: x=1, y=2 apontando para Norte
Sequência de comandos: LMLMLMLMM
Posição final da sonda: x=1 y=3 apontando para Norte
Posição de pouso da sonda 2: x=3, y=3 apontando para Leste
Sequência de comandos: MMRMMRMRRML
Posição final da sonda: x=5 y=1 apontando para Norte
A sequência de comandos é um conjunto de instruções enviadas da terra para a sonda, onde:
- M -> Andar para a frente na direção que está 1 posição
- L -> Virar a sonda para a esquerda (90 graus)
- R -> Virar a sonda para a direita (90 graus)
A orientação da sonda dentro do plano cartesiano usa uma rosa dos ventos como referência
- É obrigatório que a solução seja desenvolvida na linguagem Java
- Preferencialmente NÃO utilize a biblioteca Lombok ou similares
- Usando o github, faça um fork do projeto inicial
- Com o repositório criado via fork, codifique sua solução, de preferência faça pequenos commits! Quando terminar sua solução por favor nos envie o link do repositório github por email.
- O projeto possui swagger nesse endereço
- A criação e listagem de planetas e sondas já foi desenvolvida. Queremos que você foque apenas na criação do endpoint para movimentação de sondas, levando em conta os requisitos que podem ter sido deixados implícitos pela equipe de produto, como por exemplo a colisão de sondas, movimentação além dos limites de um planeta e etc.
- Não se esqueça de tratar os erros de forma elegante.
- No momento de decidir onde colocar as regras de negócio (lógica de movimentação da sonda etc) leia os links abaixo para entender nossos guidelines de como preferimos que seja isso feito:
- Separar conceitos por classe (ex: Carro, Motor..);
- Código precisa ser simples de entender (legibilidade do código);
- Conhecimentos de modelagem na camada de modelo;
- Orientação a Objeto (encapsulamento, divisão de responsabilidades, acoplamentos saudáveis, imutabilidade, SOLID e etc);
- REST (Conhecimentos de endpoint, métodos HTTP).
- Documentação do sistema (ex: README)
- Testes de unidade para as regras de negócio mais importantes (apenas dos componentes envolvidos na movimentação da sonda).