Crystal-RickAndMorty-API

Code Challenge

Api que faz o uso da Api do Rick e Morty em suas requisições, deselvolvida em crystal para o processo seletivo da Milênio Capital.

Sumário

Início Rápido

Voltar para o topo

Executar o projeto: Docker

🚨 Importante 🚨

Antes de prosseguir confirme que possui o Docker e o Docker Compose instalados em sua máquina. Eles são necessários para seguir os proximos passos.

Faça um clone do projeto na sua máquina:

git clone git@github.com:jallesbatista/Crystal-RickAndMorty-API.git

Entre na pasta do arquivo que clonou:

cd Crystal-RickAndMorty-API && code .

Execute o comando e aguarde as imagens serem compiladas e os containers executados, após isso a aplicação já estará pronta para uso:

docker compose up -d

Testes

Voltar para o topo

🚨 Importante 🚨

Antes de prosseguir confirme que possui o Crystal instalado em sua máquina. Ele será necessário para se utilizar dos comando a seguir:

Para executar os testes pelo módulo padrão utilize:

crystal spec

Caso queira rodar o arquivo de testes individualmente, ele também está localizado no diretório raiz, sendo necessário somente executar:

crystal runtest

Endpoints

Voltar para o topo

Índice


🚨 Importante 🚨

Todas as rotas que recebem um id como parâmetro estão sujeitas a verificação do formato desse id. Não sendo um número inteiro será retornado o erro:
Código do Erro Descrição
400 Bad Request "Id param must be an integer"

1. Travel_stops

Voltar aos Endpoints

Método Rota Descrição
POST /travel_stops Criação de um plano de viagem.
GET /travel_stops Listar todos os planos de viagem.
GET /travel_stops/:id Buscar o plano de viagem referente ao id informado.
PUT /travel_stops/:id Atualizar informações do plano de viagem referente ao id informado.
DELETE /travel_stops/:id Deletar o plano de viagem referente ao id informado.

1.1. Criação do plano de viagem

Voltar aos Enpoints

POST /travel_stops

Exemplo de Request:

POST /travel_stops
Host: http://localhost:3000
Authorization: None
Content-type: application/json

Exemplo de Corpo da Requisição:

{
  "travel_stops": [1, 2, 3]
}

Exemplo de Response:

201 CREATED
{
  "id": 1,
  "travel_stops": [1, 2, 3]
}

Possíveis Erros:

Código do Erro Descrição
404 Not Found "Location with id # was not found"
400 Bad Request "travel_stops required"
400 Bad Request "Must be a array of integers"

1.2 Listar todos os planos de viagem

Voltar aos Enpoints

GET /travel_stops

Query params:

  • optimize

      Quando verdadeiro, o array de travel_stops é ordenado de maneira a otimizar a viagem. Ao receber esse parâmetro, a API retorna 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.
    
  • expand

      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. Para mais detalhes sobre a Rick and Morty API acesse: Rick and Morty API


Exemplo de Request:

GET /travel_stops
Host: http://localhost:3000
Authorization: None
Content-type: None

Exemplo de Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
[
    {
        "id": 1,
        "travel_stops": [
            1,
            2,
            3
        ]
    },
    ...
]

1.3 Buscar plano de viagem

Voltar aos Enpoints

GET /travel_stops/:id

Query params:
Para mais detalhes veja a descrição.

  • optimize
  • expand

Exemplo de Request:

GET /travel_stops/1
Host: http://localhost:3000
Authorization: None
Content-type: None

Exemplo de Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "id": 1,
  "travel_stops": [1, 2, 3]
}

1.4 Atualizar plano de viagem

Voltar aos Enpoints

PUT /travel_stops/:id

Exemplo de Request:

PUT /travel_stops/1
Host: http://localhost:3000
Authorization: None
Content-type: application/json

Exemplo de Corpo da Requisição:

{
  "travel_stops": [3, 4, 5]
}

Exemplo de Response:

200 OK
{
  "id": 1,
  "travel_stops": [3, 4, 5]
}

Possíveis Erros:

Código do Erro Descrição
404 Not Found "Location with id # was not found"
400 Bad Request "travel_stops required"
400 Bad Request "Must be a array of integers"

1.5 Deletar o plano de viagem

Voltar aos Enpoints

DELETE /travel_stops/:id

Exemplo de Request:

DELETE /travel_stops/1
Host: http://localhost:3000
Authorization: None
Content-type: None

Corpo da Requisição:

Vazio

Exemplo de Response:

204 NO CONTENT
Vazio

Possíveis Erros:

Código do Erro Descrição
404 Not Found "Travel plan not found"

Contributors

Voltar para o topo

Repository

Crystal-RickAndMorty-API

Owner
Statistic
  • 0
  • 0
  • 0
  • 0
  • 4
  • 10 months ago
  • July 20, 2023
License

MIT License

Links
Synced at

Mon, 20 May 2024 11:25:12 GMT

Languages