https://github.com/andersonhsporto/taygeta-api
Api Rest Que Implementa Uma Variação do Desafio "Mars Rover"
https://github.com/andersonhsporto/taygeta-api
docker docker-compose hibernate-jpa java junit marsrover marsroverproblem marsrovertechchallenge maven postgresql spring-boot swagger unit-testing
Last synced: 7 months ago
JSON representation
Api Rest Que Implementa Uma Variação do Desafio "Mars Rover"
- Host: GitHub
- URL: https://github.com/andersonhsporto/taygeta-api
- Owner: andersonhsporto
- License: gpl-3.0
- Created: 2022-09-10T04:10:36.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2023-03-13T22:49:20.000Z (over 2 years ago)
- Last Synced: 2025-01-17T05:28:55.110Z (9 months ago)
- Topics: docker, docker-compose, hibernate-jpa, java, junit, marsrover, marsroverproblem, marsrovertechchallenge, maven, postgresql, spring-boot, swagger, unit-testing
- Language: Java
- Homepage:
- Size: 617 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Taygeta API
Taygeta é uma [API REST](https://www.redhat.com/pt-br/topics/api/what-is-a-rest-api)
que implementa uma variação do desafio [Mars Rover](https://code.google.com/archive/p/marsrovertechchallenge/), utilizando o framework
[Spring](https://spring.io/projects/spring-boot).Uma versão em modo [interface de linha de comando](https://en.wikipedia.org/wiki/Command-line_interface) está disponível na branch [0-cli](https://github.com/andersonhsporto/taygeta-api/tree/0-cli).
## Ferramentas Utilizadas
* [JAVA 18](https://www.java.com/pt-BR/) - Linguagem de programação (JDK 18).
* [Spring](https://spring.io/projects/spring-boot) - Framework MVC.
* [Apache Maven 3.8.6](https://maven.apache.org/) - Gerenciador de dependências.
* [IntelliJ](https://www.jetbrains.com/idea/) - IDE para desenvolvimento.
* [Docker](https://www.docker.com/) - Serviço de virtualização.
* [PostgreSQL](https://www.postgresql.org/) - Banco de dados.## Métodos
Requisições para a API devem seguir os padrões:
| Método | Rota | Descrição |
|:---: |:---: |:---: |
| `GET` | `/api/v1/planets`| Retorna uma lista ( JSON ) com os dados de todos os planetas cadastrados |
| `POST` | `/api/v1/planets`| Adiciona um novo planeta utilizando uma string para representar a area deste |
| `PUT` | `/api/v1/planets`| Atualiza o tamanho do planeta utilizando o id deste no banco de dados e uma string para representar a área deste |
| `GET` | `/api/v1/planets/{planetId}` | Retorna os dados ( JSON ) de um planeta utilizando o id deste no banco de dados |
| `DELETE` | `/api/v1/planets/{planetId}` | Deleta um planeta e suas respectivas sondas utilizando o id deste no banco de dados |
| `GET` | `/api/v1/planets/{planetId}/probes` | Retorna uma lista ( JSON ) com os dados de todas as sondas de um respectivo planeta utilizando o id deste no banco de dados |
| `DELETE` | `/api/v1/planets/{planetId}/probes` | Deleta todas as sondas de um respectivo planeta utilizando o id deste no banco de dados |
| `GET` | `/api/v1/probes` | Retorna uma lista ( JSON ) com todas as sondas cadastradas no banco de dados |
| `POST` | `/api/v1/probes` | Adiciona uma nova sonda ao banco de dados utilizando, id do planeta, ponto cardinal, posição x e y |
| `PUT` | `/api/v1/probes` | Movimenta uma sonda utilizando o id desta no banco de dados e uma sequência de movimentos |
| `GET` | `/api/v1/probes/{probeId}` | Retorna os dados ( JSON ) de uma sonda utilizando o id desta no banco de dados |
| `DELETE` | `/api/v1/probes/{probeId}` | Deleta uma sonda utilizando id desta no banco de dados |Os detalhes sobre como utilizar estes métodos ( Swagger UI ) estão disponíveis rota `/swagger-ui/`:
Uma demonstração desta está disponível no link: [https://tay-prod-taygeta-ovkkud.mo1.mogenius.io/swagger-ui/](https://tay-prod-taygeta-ovkkud.mo1.mogenius.io/swagger-ui/)
### Variável de ambiente
Este projeto utiliza as seguintes variáveis de ambiente| Variável | Descrição |
| :-----------------:| :----------------------------------: |
| POSTGRES_USER | Usuário do banco de dados |
| POSTGRES_PASSWORD | Senha do banco de dados |
| DATABASE_HOST | Host para conexão com o banco de dados |## Inicialização
Para iniciar a api utilize o comando:
```sh
docker-compose up
```Este comando irá iniciar um contêiner com a api na porta `8080` e um contêiner com o banco de dados utilizando a porta `5432`.
Para executar somente os testes utilize o comando:
```sh
mvn test
```## Dependências
As dependências são declaradas no arquivo [pom.xml](https://github.com/andersonhsporto/taygeta-api/blob/master/pom.xml).| Dependência | Descrição | Versão |
| :----------------------------: | :---------------------------------------------------------------: | :-----: |
| Postgresql | JDBC Driver para o banco de dados Postgresql | 42.5.0 |
| H2database | Banco de dados relacional escrito em Java que funciona em memória | 2.1.214 |
| Spring-boot-starter-data-jpa | Responsável por conectar a aplicação Spring como o banco de dados | 2.7.4 |
| Spring-boot-starter-web | Responsável pela camada MVC do Spring | 2.7.4 |
| Junit-jupiter | Framework para testes unitários | 5.9.1 |
| Springfox-swagger-ui | Documentação JSON API para aplicações Spring | 3.0.0 |## Exemplos
Consultar todos os planetas cadastrados [ GET ]
#### *Planetas [ /api/v1/planets ]*Ao utilizar este método na rota referente aos planetas, a api retorna uma lista ( json ) com os dados de todos os planetas cadastrados.
Exemplo: `/api/v1/planets/` irá retornar um json com os dados de todos os planetas cadastrados.
#### Adicionar Novo Planeta [ POST ]
Para criar um novo planeta é necessário utilizar o parâmetro query `area` este parâmetro,
utiliza uma string com o caractere x como delimitador entre altura e largura
do retângulo utilizado para representar o planeta.| Parâmetro | Descrição |
|:---:|:---:|
| `area` | String utilizada para representar a area do planeta |Exemplo: `/api/v1/planets?area=4x2` irá criar um planeta com quatro unidades de largura e duas unidades de altura.
Editar tamanho de um planeta [ PUT ]
#### *Planetas [ /api/v1/planets ]*Para editar o tamanho de um planeta previamente cadastrado no banco de dados é necessário utilizar o parâmetro query `planetId`, este parâmetro é um número inteiro utilizado para identificar o planeta no banco de dados, além disso, é necessário informar o novo tamanho do planeta utilizando uma string com o caractere x como delimitador entre altura e largura do retângulo utilizado para representar o planeta.
Todas as sondas que estão fora das novas dimensões do planeta serão deletadas.| Parâmetro | Descrição |
|:---:|:---:|
| `planetId` | Id do planeta no banco de dados |
| `area` | String utilizada para representar a área do planeta |Exemplo: `/api/v1/planets?area=5x5&id=1` irá alterar o tamanho do planeta id 1, para cinco unidades de altura e largura.
Consultar planeta por id [ GET ]
#### *Planetas /api/v1/planets/{planetId}*
Para consultar um planeta previamente cadastrado no banco de dados é necessário utilizar o parâmetro route `planetId`, este parâmetro é um número inteiro utilizado para identificar o planeta no banco de dados.
Exemplo: `/api/v1/planets/1` irá retornar um json com os dados referente ao planeta.
| Parâmetro | Descrição |
|:---:|:---:|
| `planetId` | Id do planeta no banco de dados |Exemplo: `/api/v1/planets/4` irá retornar um json com os dados do planeta.
Deletar um planeta por id [ DELETE ]
#### *Planetas /api/v1/planets/{planetId}*Para deletar um planeta previamente cadastrado no banco de dados é necessário utilizar o parâmetro route `planetId`, este parâmetro é um número inteiro utilizado para identificar o planeta no banco de dados.
Todas as sondas deste planeta são deletadas ao utilizar este método.| Parâmetro | Descrição |
|:---:|:---:|
| `planetId` | Id do planeta no banco de dados |Exemplo: `/api/v1/planets/4` deleta o planeta id 4 e todas as sondas associadas a este.
Consultar todas as sondas cadastradas [ GET ]
#### *Sondas [ /api/v1/probes ]*
Ao utilizar este método na rota referente aos planetas, a api retorna uma lista ( json ) com os dados de todos os planetas cadastrados.
Exemplo: `/api/v1/probes/` irá retornar um json com os dados de todas as sondas cadastradas.
Adicionar nova sonda [ POST ]
#### *Sondas [ /api/v1/probes ]*Para criar uma nova sonda é necessário utilizar os parâmetros query `direction`, `planetId`, `X` e `Y`. Estes parâmetros representam a posição inicial da sonda no planeta.
A posição inicial da sonda deve ser um dos quatro pontos cardinais ( Norte, Sul, Leste, Oeste ) em inglês ou português.| Parâmetro | Descrição |
|:---:|:---:|
| `direction` | Ponto cardinal inicial da sonda |
| `planetId` | Id do planeta no banco de dados |
| `X` | Coordenada x da sonda |
| `Y` | Coordenada y da sonda |Exemplo: `/api/v1/probes?direction=NORTE&planetId=1&x=4&y=2` irá criar uma nova sonda, no planeta id 1, nas coordenadas x4 y2, apontada para o norte.
Mover sonda [ PUT ]
#### *Sondas [ /api/v1/probes ]*Para mover uma sonda é necessário utilizar os parâmetros query `movements` e `probeId`.
O parâmetro `movements` é uma string onde cada caractere desta representa um movimento da sonda: :
- `M` -> Mover a sonda uma unidade para frente.
- `L` -> Virar a sonda para a esquerda (90 graus)
- `R` -> Virar a sonda para a direita (90 graus)| Parâmetro | Descrição |
|:---:|:---:|
| `movements` | Sequencia de movimentos da sonda |
| `probeId` | Id da sonda no banco de dados |Exemplo: `/api/v1/probes?movements=LMLMLMLMM&probeId=1` irá mover a sonda de id 1 para uma nova direção.
Consultar sonda por id [ GET ]
#### *Sondas [ /api/v1/probes/{probeId} ]*Para consultar uma sonda previamente cadastrada no banco de dados é necessário utilizar o parâmetro route `probeId`, este parâmetro é um número inteiro utilizado para identificar a sonda no banco de dados.
| Parâmetro | Descrição |
|:---:|:---:|
| `probeId` | Id da sonda no banco de dados |Exemplo: `/api/v1/probes/1` retorna um json com os dados da sonda id 1.
Deletar sonda por id [ DELETE ]
#### *Sondas [ /api/v1/probes/{probeId} ]*Para deletar uma sonda previamente cadastrada no banco de dados é necessário utilizar o parâmetro route `probeId`, este parâmetro é um número inteiro utilizado para identificar a sonda no banco de dados.
| Parâmetro | Descrição |
|:---:|:---:|
| `probeId` | Id da sonda no banco de dados |Exemplo: `/api/v1/probes/1` deleta a sonda id 1 do banco de dados.
---
Minhas informações de contato 📬