Rover challenge implementado em Scala
API REST criada para simulação de exploração espacial através do envio de sondas. Lance uma sonda dentro de um plano cartesiano e movimente-a através do envio de comando textual.
Instruções para obter uma cópia do projeto sendo executada em sua máquina local para desenvolvimento ou testes. Notas sobre deploy serão adicionadas apenas após aprovação. ;) hehehe
Coisas que você precisa garantir que estejam instaladas localmente antes de executar a API.
Para garantir que o java esteja instalado corretamente execute o seguinte comando:
$ java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
Para garantir que o sbt esteja instalado corretamente execute o seguinte comando:
$ sbt sbtVersion
[info] Loading settings for project global-plugins from metals.sbt ...
[info] Loading global plugins from /Users/leonardo/.sbt/1.0/plugins
[info] Loading project definition from /Users/leonardo/project
[info] Set current project to leonardo (in build file:/Users/leonardo/)
[info] 1.2.6
Uma vez que você tenha todos os pré-requisitos instalados e obtido o código fonte corretamente, vá até o diretório da aplicação e execute:
(mars-exploration) $ sbt run
Você verá o seguinte output:
[info] Loading settings for project global-plugins from metals.sbt ...
[info] Loading global plugins from /Users/leonardo/.sbt/1.0/plugins
[info] Loading settings for project mars-exploration-build from assembly.sbt ...
[info] Loading project definition from /Users/leonardo/Projects/mars-exploration/project
[info] Loading settings for project root from build.sbt ...
[info] Set current project to MarsExploration (in build file:/Users/leonardo/Projects/mars-exploration/)
[info] Running com.felicissimo.api.MarsExploration
Server online at http://localhost:8080/
Isto significa que a API está pronta para receber requisições
A API atende as seguintes requisições:
Para o envio de nova sonda, faça uma requisição POST para o endpoint: http://localhost:8080/probes. O ContentType deve ser application/json. O response será a sonda incluída.
Campo | Descrição |
---|---|
name | nome da sonda a ser enviada |
x | posição da sonda no eixo x |
y | posição da sonda no eixo y |
direction | direção da sonda (North, South, East, West) |
Exemplo de payload de uma sonda enviada na coordenada 1, 3 apontando para o norte
{
"name": "Nome da sonda",
"x": 1,
"y": 3,
"direction": "North"
}
Para obter as sondas enviadas faça uma requisição GET para o endpoint: http://localhost:8080/probes. O response será uma array de sondas.
Campo | Descrição |
---|---|
name | nome da sonda a ser enviada |
x | posição da sonda no eixo x |
y | posição da sonda no eixo y |
direction | direção da sonda (North, South, East, West) |
Exemplo de response de uma sonda enviada na coordenada 1, 3 apontando para o norte:
[{
"name": "Nome da sonda",
"x": 1,
"y": 3,
"direction": "North"
}]
Para movimentar uma sondas enviada faça uma requisição PUT para o endpoint: http://localhost:8080/probes. O response será a sonda e sua nova coordenada.
Campo | Descrição |
---|---|
sequence | sequência de comandos para envio da sonda |
probeName | nome da sonda a ser movimentada |
Os comandos permitidos para movimentação são:
Exemplo de payload para movimentação de uma sonda enviada na coordenada 3, 3 apontando para o leste:
[{
"sequence": "MMRMMRMRRM",
"name": "Nome da sonda"
}]
O response será a nova coordenada da sonda, apontando para 5, 1, leste.
[{
"name": "Nome da sonda",
"x": 5,
"y": 1,
"direction": "East"
}]