Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mariazevedo88/travels-api
API for Travels Management - UFLA Comp Jr/20 anniversary event
https://github.com/mariazevedo88/travels-api
api api-restful api-service http http-rest-api java java-11 java11 medium-article rest rest-api restful-api
Last synced: about 1 month ago
JSON representation
API for Travels Management - UFLA Comp Jr/20 anniversary event
- Host: GitHub
- URL: https://github.com/mariazevedo88/travels-api
- Owner: mariazevedo88
- License: mit
- Created: 2019-09-05T23:53:08.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2020-12-31T13:59:18.000Z (almost 4 years ago)
- Last Synced: 2024-09-29T13:40:58.655Z (about 2 months ago)
- Topics: api, api-restful, api-service, http, http-rest-api, java, java-11, java11, medium-article, rest, rest-api, restful-api
- Language: Java
- Homepage:
- Size: 62.5 KB
- Stars: 28
- Watchers: 3
- Forks: 28
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# travels-api
Uma API em Java e Spring Framework para gerenciamento de viagens.
## Como a API deve funcionar?
Nossa API deve criar, atualizar, deletar e listar viagens. Além disso, deve calcular estatísticas sobre as viagens criadas. A API terá os seguintes endpoints:
`POST/api-travels/travels`: cria uma viagem.
**Body:**
{
"id": 1,
"orderNumber": "220788",
"amount": "22.88",
"startDate": "2019-09-11T09:59:51.312Z",
"endDate": "2019-09-21T21:05:06.500Z",
"type": "RETURN"
}**Where:**
`id`: número único da viagem;
`orderNumber`: número de identificação da viagem no sistema.
`amount`: valor da transação; deve ser uma String de tamanho arbitrário que pode ser parseada como um BigDecimal;
`startDate`: data de início da viagem no formato ISO 8601 YYYY-MM-DDThh:mm:ss.sssZ no timezone local.
`endDate`: data de fim da viagem no formato ISO 8601 YYYY-MM-DDThh:mm:ss.sssZ no timezone local. Pode ser nulo se a viagem é só de ida.
`type`: se a viagem é somente de ida (ONE-WAY), ida e volta (RETURN) ou múltiplos destinos (MULTI-CITY).Deve retornar com body vazio com um dos códigos a seguir:
* 201: caso a viagem seja criada com sucesso.
* 400: caso o JSON seja inválido.
* 422: se qualquer um dos campos não for parseável ou se a data de início for mais ao futuro que a data final.
* 500: erro no servidor (são raros)`PUT/api-travels/travels/{id}`: atualiza uma viagem.
**Body:**
{
"orderNumber": "220788",
"amount": "50.50",
"startDate": "2019-09-11T09:59:51.312Z",
"endDate": "2019-09-21T21:05:06.500Z",
"type": "RETURN"
}Deve ser enviado o objeto que será modificado. O retorno deve ser o próprio objeto modificado.
{
"id": 1,
"orderNumber": "220788",
"amount": "50.50",
"startDate": "2019-09-11T09:59:51.312Z",
"endDate": "2019-09-21T21:05:06.500Z",
"type": "RETURN"
}A resposta deve conter os códigos a seguir:
* 200: em caso de sucesso.
* 400: caso o JSON seja inválido.
* 404: caso tentem atualizar um registro que não existe.
* 422: se qualquer um dos campos não for parseável (JSON mal formatado).`GET/api-travels/travels`: retorna todas as viagens criadas.
Deve retornar uma lista de viagens.
{
"id": 1,
"orderCode": "220788",
"amount": "22.88",
"initialDate": "2019-09-11T09:59:51.312Z",
"finalDate": "2019-09-21T21:05:06.500Z",
"type": "RETURN"
},
{
"id": 2,
"orderCode": "300691",
"amount": "120.0",
"initialDate": "2019–10–25T16:18:30.541Z",
"type": "ONE-WAY"
}A resposta deve conter os códigos a seguir:
* 200: caso exista viagens cadastradas
* 404: caso não exista viagens criadas.`DELETE/api-travels/travels`: remove todas as viagens.
Deve aceitar uma requisição com body vazio e retornar 204.
`GET/api-travels/statistics`: retorna estatísticas básicas sobre as viagens criadas.
{
"sum": "142.88",
"avg": "71.44",
"max": "120.0",
"min": "22.88",
"count": "2"
}Em que:
`sum`: um BigDecimal especificando a soma total das viagens criadas.
`avg`: um BigDecimal especificando a média dos valores das viagens criadas.
`max`: um BigDecimal especificando o maior valor dentre as viagens criadas.
`min`: um BigDecimal especificando o menor valor dentre as viagens criadas.
`count`: um long especificando o número total de viagens.Todos os campos que são BigDecimal devem ter apenas duas casas decimais, por exemplo: 15.385 deve ser retornado como 15.39.
### Testes
* Para executar o teste unitário, o comando executado deve ser:
```
mvn test
```* Para executar todos os testes (incluindo o de integração), o comando executado deve ser:
```
mvn integration-test
```### Execução
Para rodar a API via .jar:
```
java -jar travels-api-2.0.1.jar --spring.profiles.active=dev
```
ou```
mvn spring-boot:run -Dspring.profiles.active=dev
```Por default, a API está disponível no endereço [http://localhost:8080/](http://localhost:8080/)