Serviço de cadastro e consumo de dados CRUD de viagens interplanetárias.
Instalação de dependências
cd api
shards install
Para rodar o projeto, execute o seguinte comando
docker-compose up -d --build
Abra o navegador e acesse o endereço http://localhost:3000/travel_plans
Para rodar esse projeto localmente, você vai precisar adicionar as seguintes variáveis de ambiente no seu .env
POSTGRES_HOST
POSTGRES_PORT
POSTGRES_USER
POSTGRES_PASSWORD
POSTGRES_DB
HTTP Method | Path | Description |
---|---|---|
GET | /travel_plans | Retorna todas viagens existentes |
GET | /travel_plans/:id | Retorna viagem escolhida por id |
POST | /travel_plans | Cria uma nova viagem |
PUT | /travel_plans/:id | Atualiza uma viagem existente escolhida por id |
DELETE | /travel_plans/:id | Deleta uma viagem existente escolhida por id |
PATCH | /travel_plans/:id/append | Adiciona paradas adicionais a uma viagem já existende |
GET /travel_plans
Parâmetro | Tipo | Descrição |
---|---|---|
optimize |
string |
Opcional. Otimiza as viagens por popularidade da dimensão |
expand |
string |
Opcional. Expande o resultado,mostrando mais informações além da Id da viagem |
- A requisição retornará por padrão:
[
{
"id": 1,
"travel_stops": [1, 2]
},
{
"id": 2,
"travel_stops": [3, 7]
}
]
- Usando paramentros opcionais: Viagems otimizadas
GET /travel_plans?optimize=true&expand=false
[
{
"id": 1,
"travel_stops": [
2,
1
]
},
{
"id": 2,
"travel_stops": [
4,
3
]
}
]
- Usando paramentros opcionais: Viagems otimizadas e expandidas
GET /travel_plans?optimize=true&expand=true
[
{
"id": 1,
"travel_stops": [
{
"id": 2,
"name": "Abadango",
"type": "Cluster",
"dimension": "unknown"
},
{
"id": 1,
"name": "Earth (C-137)",
"type": "Planet",
"dimension": "Dimension C-137"
}
]
},
{
"id": 2,
"travel_stops": [
{
"id": 4,
"name": "Worldender's lair",
"type": "Planet",
"dimension": "unknown"
},
{
"id": 3,
"name": "Citadel of Ricks",
"type": "Space station",
"dimension": "unknown"
}
]
}
]
- Usando paramentros opcionais: Viagems expandidas
GET /travel_plans?optimize=false&expand=true
[
{
"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"
}
]
}
]
GET /travel_plans/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID da viagem que você quer |
optimize |
string |
Opcional. Otimiza as viagens por popularidade da dimensão |
expand |
string |
Opcional. Expande o resultado,mostrando mais informações além da ID da viagem |
- A requisição retornará:
{
"id": 1,
"travel_stops": [1, 2]
}
- Usando paramentros opcionais: Viagems otimizadas
GET /travel_plans/1?optimize=true&expand=false
{
"id": 1,
"travel_stops": [
2,
1
]
}
- Usando paramentros opcionais: Viagems otimizadas e expandidas
GET /travel_plans/1?optimize=true&expand=true
{
"id": 1,
"travel_stops": [
{
"id": 2,
"name": "Abadango",
"type": "Cluster",
"dimension": "unknown"
},
{
"id": 1,
"name": "Earth (C-137)",
"type": "Planet",
"dimension": "Dimension C-137"
}
]
}
- Usando paramentros opcionais: Viagems expandidas
GET /travel_plans?optimize=false&expand=true
{
"id": 1,
"travel_stops": [
{
"id": 1,
"name": "Earth (C-137)",
"type": "Planet",
"dimension": "Dimension C-137"
},
{
"id": 2,
"name": "Abadango",
"type": "Cluster",
"dimension": "unknown"
}
]
}
POST /travel_plans
- O corpo da requisição poderá seguir o formato abaixo:
{
"travel_stops": [3,4]
}
- Retornará a viagem cadastrada:
{
"id": 3,
"travel_stops": [3,4]
}
PUT /travel_plans/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do item que você quer |
- O corpo da requisição poderá seguir o formato abaixo:
{
"travel_stops": [5,7]
}
- Retornará a viagem atualizada:
{
"id": 3,
"travel_stops": [5,7]
}
DELETE /travel_plans/${id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do item que você quer |
- Sem rotorno
PATCH /travel_plans/${id}/append
Parâmetro | Tipo | Descrição |
---|---|---|
id |
string |
Obrigatório. O ID do item que você quer |
{
"travel_stops": [5,7]
}
- Retornará a viagem atualizada com as paradas adicionais:
{
"id": 3,
"travel_stops": [2,4,9,5,7]
}
- Kemal: Fast, Effective, Simple Web Framework
- Jennifer: Crystal ORM using ActiveRecord pattern with flexible query DSL
- Uso de PostgreSQL no banco de dados
Devido a natureza do processo seletivo e a escassa documentão e material disponível, não foi possível a implementação dos testes unitários e de integração.Peço compreensão da banca avaliadora