- Descrição
- Submissão e Prazo de Entrega
- Instruções de execução
- Endpoints disponíveis
- Jornada de criações POST do cliente da API
Este desafio tem como objetivo avaliar as habilidades técnicas do candidato a vaga de desenvolvedor backend no Clubpetro.
O desafio consiste em desenvolver uma API rest que permita o CRUD de lugares para se conhecer ao redor do mundo para alimentar o frontend que pode ser visto na imagem a seguir:
Os dados a ser considerados são:
- País: O país escolhido;
- Local: O local dentro do país escolhido;
- Meta: O mês e o ano que o usuário pretende visitar o local;
- Url da bandeira do país;
- Data de criação do registro;
- Data de atualização do registro.
Requisitos que serão avaliados no desafio.
- A API deverá ser desenvolvida com Node.js e Express;
- Apenas o Local e a Meta poderão ser editados;
- O mesmo local em determinado país não poderá ser adicionado de forma duplicada;
- A listagem dos dados deverá ser ordenada de forma crescente pela meta;
- O candidato deverá adicionar ao projeto uma explicação de como executar a aplicação.
Requisitos que não são obrigatórios mas podem te deixar em vantagem com relação aos outros candidatos.
- Utilização do framework NestJS;
- Typescript;
- Testes automatizados;
- TypeORM;
- Docker;
- Deploy para Google Cloud Platform (ao criar conta é possível receber um bonus para teste).
- O candidato deverá realizar um fork deste repositório e submeter o código no mesmo.
- Em caso do deploy realizado, a url deverá ser adicionada no README;
- O prazo de entrega para este desafio é de 2 (duas) semanas, contando a partir do dia em que o canditado recebeu o email com o link do repositório;
- Ao finalizar o desafio, o candidato deverá enviar um email para jobs@clubpetro.com.br contendo o link do seu PR.
Para executar a aplicação no ambiente de desenvolvimento, precisamos ter no ambiente:
Dentro do diretório raiz do projeto, podemos executar
$ yarn
para instalar as dependências.
Duplique o arquivo .env.example presente na raiz do projeto e renomeie uma das cópias para apenas .env
O arquivo .env contém as variáveis de ambiente com informações secretas que serão utilizadas na API.
Após instalar as dependências, podemor subir o container contendo o serviço MySQL.
O serviço relativo ao banco de dados MySQL está configurado para escutar a porta 3306. Caso essa porta já esteja sendo usada em seu ambiente, deixe ela disponível para o container, por favor.
Após esses detalhes, podemos executar:
$ docker-compose up
Esse processo pode demorar um pouco caso as imagens Docker não estejam disponíveis em seu ambiente local.
Após o container contendo o MySQL estiver disponível para conexões, execute o seguinte comando para executar as migrações no banco de dados:
$ yarn typeorm migration:run
Agora podemos iniciar a aplicação (modo de desenvolvimento) executando:
# development mode
$ yarn start
A URL base no ambiente de desenvolvimento é http://localhost:3000/api/v1/
Obs: As listagens utilizam eager loading para carregar os dados das relações.
Obs: Files é o arquivo relativo a bandeira de um país.
-
POST /files
: Cria um novo arquivo enviado como multipart/form a chavefile
. O arquivo deve ser uma imagem com extensão.png
,.jpg
ou.jpeg
-
GET /files/:id
: O arquivo comid
presente no parâmetro da rota deve ter seus dados retornados.
-
POST /countries
: O endpoint deve recebername
efileId
no corpo da requisição e registrar um novo país. -
GET /countries
: Rota que lista todos os países presentes no repositório. -
GET /countries/:id
: O país comid
presente no parâmetro da rota deve ter seus dados retornados. -
DELETE /countries/:id
: O País comid
presente no parâmetro da rota deve ser excluído. -
GET /countries/:id/locals
: Retorna os locais relacionados aoid
do País presente no parâmetro da rota.
-
POST /locals
: O endpoint deve recebername
ecountryId
no corpo da requisição e registrar um novo local. -
GET /locals
: Rota que lista todos os locais presentes no repositório. -
GET /locals/:id
: O local comid
presente no parâmetro da rota deve ter seus dados retornados. -
DELETE /locals/:id
: O local comid
presente no parâmetro da rota deve ser excluído. -
PUT /locals/:id
: O endpoint pode recebername
ecountryId
no corpo da requisição e alterar o local relativo aoid
presente no parâmetro da rota.
-
POST /metas
: O endpoint deve receberdate
(ISO-8601) elocalId
no corpo da requisição para registrar uma nova meta. -
GET /metas
: Rota que lista todas as metas presentes no repositório. -
GET /metas/:id
: A meta comid
presente no parâmetro da rota deve ter seus dados retornados. -
DELETE /metas/:id
: A meta comid
presente no parâmetro da rota deve ser excluída. -
PUT /metas/:id
: O endpoint pode receberdate
no corpo da requisição e alterar a meta relativa aoid
presente no parâmetro da rota.
Nesta seção temos um exemplo com requisições POST nos principais endpoints da API usando o Insomnia. O objetivo é criar uma meta com todos os seus dados relacionados (bandeira, local e país)
- Receber um arquivo (bandeira). Veja mais em Recursos para Files)
- Criar um novo país. Veja mais em Recursos para Countries
- Criar um local "dentro" do país. Veja mais em Recursos para Locals
- Criar uma meta associada a um local. Veja mais em Recursos para Metas