This is a project written using Amber. Enjoy!
These instructions will get a copy of this project running on your machine for development and testing purposes.
Please see deployment for notes on deploying the project in production.
This project requires Crystal (installation guide).
To start your Amber server:
- Install dependencies with
shards install - Build executables with
shards build - Create and migrate your database with
bin/amber db create migrate. Also see creating the database. - Start Amber server with
bin/amber watch
Now you can visit http://localhost:3000/ from your browser.
Getting an error message you need help decoding? Check the Amber troubleshooting guide, post a tagged message on Stack Overflow, or visit Amber on Gitter.
Using Docker? Please check Amber Docker guides.
To run the test suite:
crystal spec src/testes_unitarios/testes_unitarios.cr
API que visa criar ou buscar pontos de viagens no universo de Rikcy and Morty
A api apresenta apenas um recurso (/travel_plans) e é através dele que você faz todo tipo de chamada.
-
Endpoint: POST /travel_plans
-
Exemplo de uso: POST /travel_plans
- Corpo da requisição (Content-Type: application/json):
{ "travel_stops": [1, 2] } - Resposta de sucesso (Status: 201, Content-Type: application/json):
{ "id": 1, "travel_stops": [1, 2] }
- Corpo da requisição (Content-Type: application/json):
-
Endpoint: GET /travel_plans
-
Query Parameters (opcionais):
- optimize (boolean - falso por padrão): Quando verdadeiro, o array de travel_stops é ordenado de maneira a otimizar a viagem.
- expand (boolean - falso por padrão): Quando verdadeiro, o campo de travel_stops é um array de entidades com informações detalhadas sobre cada parada.
-
Exemplo de uso: GET /travel_plans
- Resposta de sucesso (Status: 200, Content-Type: application/json):
[ { "id": 1, "travel_stops": [1, 2] }, { "id": 2, "travel_stops": [3, 7] } ]
- Resposta de sucesso (Status: 200, Content-Type: application/json):
-
Exemplo de uso: GET /travel_plans?optimize=false&expand=true
- Resposta de sucesso (Status: 200, Content-Type: application/json):
[ { "id": 1, "travel_stops": [ { "id": 1, "name": "Earth (C-137)", "type": "Planet", "dimension": "Dimension C-137" }, { "id": 2, "name": "Abadango", "type": "Cluster", "dimension": "unknown" } ] }, { "id": 2, "travel_stops": [ { "id": 3, "name": "Citadel of Ricks", "type": "Space station", "dimension": "unknown" }, { "id": 7, "name": "Immortality Field Resort", "type": "Resort", "dimension": "unknown" } ] } ]
- Resposta de sucesso (Status: 200, Content-Type: application/json):
-
Endpoint: GET /travel_plans/{id}
-
Parâmetros:
- {id}: O identificador único do plano de viagem.
-
Query Parameters (opcionais):
- optimize (boolean - falso por padrão): Quando verdadeiro, o array de travel_stops é ordenado de maneira a otimizar a viagem.
- expand (boolean - falso por padrão): Quando verdadeiro, o campo de travel_stops é um array de entidades com informações detalhadas sobre cada parada.
-
Exemplo de uso: GET /travel_plans/1
- Resposta de sucesso (Status: 200, Content-Type: application/json):
{ "id": 1, "travel_stops": [1, 2, 3] }
- Resposta de sucesso (Status: 200, Content-Type: application/json):
-
Exemplo de uso: GET /travel_plans/1?optimize=false&expand=true
- Resposta de sucesso (Status: 200, Content-Type: application/json):
{ "id": 1, "travel_stops": [ { "id": 1, "name": "Earth (C-137)", "type": "Planet", "dimension": "Dimension C-137" }, { "id": 2, "name": "Abadango", "type": "Cluster", "dimension": "unknown" } ] }
- Resposta de sucesso (Status: 200, Content-Type: application/json):
-
Endpoint: PUT /travel_plans/{id}
-
Parâmetros:
- {id}: O identificador único do plano de viagem.
-
Exemplo de uso: PUT /travel_plans/1
-
Corpo da requisição (Content-Type: application/json):
{ "travel_stops": [4, 5, 6] } -
Resposta de sucesso (Status: 200, Content-Type: application/json):
{ "id": 1, "travel_stops": [4, 5, 6] }
-
-
Endpoint: DELETE /travel_plans/{id}
-
Parâmetros:
- {id}: O identificador único do plano de viagem.
-
Exemplo de uso: DELETE /travel_plans/1
- Resposta de sucesso (Status: 204): Resposta sem corpo
-
Endpoint: PUT /travel_plans/{id}/append
-
Parâmetros:
- {id}: O identificador único do plano de viagem.
-
Exemplo de uso: PUT /travel_plans/1/append
-
Corpo da requisição (Content-Type: application/json):
{ "travel_stops": 4 } -
Resposta de sucesso (Status: 200, Content-Type: application/json):
{ "id": 1, "travel_stops": [1, 5, 6, 4] }
-
Os parâmetros expand e optimize podem ser utilizados para modificar as respostas da API. Ambos podem ser utilizados separadamente ou em conjunto, apenas para métodos GET.
Ao receber esse parâmetro, a API deve expandir as paradas de cada viagem de modo que o campo travel_stops deixe de ser um array de inteiros representando os IDs de cada localização e passe a ser um array de objetos da forma
{
"id": 1,
"name": "Earth (C-137)",
"type": "Planet",
"dimension": "Dimension C-137"
}populado com os dados da respectiva localização registrada na Rick and Morty API sob o dado ID.
Ao receber esse parâmetro, a API deve retornar o array de travel_stops reordenado com o objetivo de minimizar o número de saltos interdimensionais e organizar as paradas de viagem passando das localizações menos populares para as mais populares.
- jayron88 jayron88 - creator, maintainer