项目作者: leomfelicissimo

项目描述 :
Rover challenge implementado em Scala
高级语言: Scala
项目地址: git://github.com/leomfelicissimo/mars-exploration.git
创建时间: 2019-06-18T06:47:15Z
项目社区:https://github.com/leomfelicissimo/mars-exploration

开源协议:

下载


Mars Exploration API

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.

Começando

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

Prerequisitos

Coisas que você precisa garantir que estejam instaladas localmente antes de executar a API.

  • Java 8: JRE do Java para execução de aplicações que executam na JVM.
  • SBT: Ferramenta de build para compilar e executar o código Scala.

Para garantir que o java esteja instalado corretamente execute o seguinte comando:

  1. $ java -version
  2. java version "1.8.0_152"
  3. Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
  4. 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:

  1. $ sbt sbtVersion
  2. [info] Loading settings for project global-plugins from metals.sbt ...
  3. [info] Loading global plugins from /Users/leonardo/.sbt/1.0/plugins
  4. [info] Loading project definition from /Users/leonardo/project
  5. [info] Set current project to leonardo (in build file:/Users/leonardo/)
  6. [info] 1.2.6

Executando

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:

  1. (mars-exploration) $ sbt run

Você verá o seguinte output:

  1. [info] Loading settings for project global-plugins from metals.sbt ...
  2. [info] Loading global plugins from /Users/leonardo/.sbt/1.0/plugins
  3. [info] Loading settings for project mars-exploration-build from assembly.sbt ...
  4. [info] Loading project definition from /Users/leonardo/Projects/mars-exploration/project
  5. [info] Loading settings for project root from build.sbt ...
  6. [info] Set current project to MarsExploration (in build file:/Users/leonardo/Projects/mars-exploration/)
  7. [info] Running com.felicissimo.api.MarsExploration
  8. Server online at http://localhost:8080/

Isto significa que a API está pronta para receber requisições

Requisições Http para a API

A API atende as seguintes requisições:

  • Enviar uma sonda
  • Obter as sondas enviadas e suas ultimas posições
  • Movimentar uma sonda

Envio de nova sonda

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.

Informações sobre o Payload

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

  1. {
  2. "name": "Nome da sonda",
  3. "x": 1,
  4. "y": 3,
  5. "direction": "North"
  6. }

Obter as sondas enviadas e suas ultimas posições

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.

Informações sobre o Response

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:

  1. [{
  2. "name": "Nome da sonda",
  3. "x": 1,
  4. "y": 3,
  5. "direction": "North"
  6. }]

Movimentar uma sonda

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.

Informações sobre o Response

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:

  • L: Direciona a sonda para a esquerda
  • R: Direciona a sonda para a direita
  • M: Move a sonda na direção determinada

Exemplo de payload para movimentação de uma sonda enviada na coordenada 3, 3 apontando para o leste:

  1. [{
  2. "sequence": "MMRMMRMRRM",
  3. "name": "Nome da sonda"
  4. }]

O response será a nova coordenada da sonda, apontando para 5, 1, leste.

  1. [{
  2. "name": "Nome da sonda",
  3. "x": 5,
  4. "y": 1,
  5. "direction": "East"
  6. }]

Tecnologias

  • JVM - Runtime para execução de aplicações Java.
  • Scala - Linguagem utilizada para criar aplicações que executam na JVM utilizando abordagem funcional.
  • Akka Http - Biblioteca criada a partir do Akka para implementação de aplicações que se comunicam via Http seguindo o modelo de Atores.
  • SBT: Ferramenta de build para compilar e executar o código Scala.

Authors

Backlog (TODO)

  • Separação de responsabilidade entre definição de rotas e chamadas do controller (criação de Routers)
  • Serialização direta de retornos da controller (Sem precisar criar ProbeRequest e ProbeResponse)
  • Validações de payloads enviados no POST e PUT
  • Pesquisa de Sondas pelo nome usando QueryString em /probe
  • Persistencia in-memory e não no código
  • Tratamento de StatusCodes para casos de exceção
  • Mais testes unitários