A aplicação consiste em um usuário que vai chamar um endpoint passando um cep para buscar um endereço, caso o cep já exista na nossa base de dados retornar o endereço para o usuário, caso contrário buscar o endereço no ws https://viacep.com.br/ws/CEP/json/
Também foi criado um endpoint para gerar o arquivo CSV passando a lista dos endereços.
O projeto foi criado todo na linguagem Elixir na versão 1.12.3 utilizando o framwork Phoenix versão 1.6
Para fazer as taxas de conversão foi utilizado a API do ViaCEP
Para a persistência dos dados foi utilizado o PostgreSQL.
Outras bibliotecas que foram utilizadas:
- Credo para garantir o estilo de código
- CSV Parser de CSV
- Finch cliente HTTP para fazer requisições
- Guardian Guardian é uma biblioteca de autenticação baseada em token para uso com aplicativos Elixir.
- Oban responsável por enfileirar e rodar jobs em background
Execute os seguintes comandos:
git clone https://github.com/franknfjr/tec_solfacil_cep_api.git
cd tec_solfacil_cep_api
Após entrar no diretório, feito isso podemos fazer a compilação e excução da aplicação, executando os seguintes comandos:
mix deps.get
mix ecto.create && mix ecto.migrate
Para início, vamos observar todas nossas rotas executando o comando:
mix phx.routes
Metodo | endpoint | descrição | valores que podem ser passados para os parametros |
---|---|---|---|
GET | /api/v1/register | registra um usuário | |
GET | /api/v1/login | cria sessão de usuario | |
GET | /api/v1/addresses/:cep | retorna um endereço pelo cep | cep |
GET | /api/v1/addresses/send_csv | exporta o arquivo csv | |
* |
/dev/mailbox | interface de email |
Agora execute o comando para iniciar a aplicação.
mix phx.server
Abaixo, alguns exemplos de chamadas que serão feitas nessa API:
POST /api/v1/register
O código HTTP de retorno deve ser 200 e o corpo esperado na resposta é:
{
"message": "[email protected]",
"status": "ok"
}
POST /api/v1/login
O código HTTP de retorno deve ser 200 e o corpo esperado na resposta é:
{
"data": {
"email": "[email protected]",
"token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJ0ZWNfc29sZmFjaWxfY2VwX2FwaSIsImV4cCI6MTY1MjQwNTExOCwiaWF0IjoxNjQ5OTg1OTE4LCJpc3MiOiJ0ZWNfc29sZmFjaWxfY2VwX2FwaSIsImp0aSI6IjNjZTYyNDQyLWYwOTMtNDdkZi04NGZjLTJiZjYyZjJhZTc2YiIsIm5iZiI6MTY0OTk4NTkxNywic3ViIjoiMiIsInR5cCI6ImFjY2VzcyJ9.7HOdYi7NAYF036uYRNLCnlZkJLp_laiyLZZ_dlnwYOHiuXXQIiC0OjcKa2UD-8APdaEFsm5UVd_L2nsCjV3OWQ"
},
"message": "You are successfully logged in! Add this token to authorization header to make authorized requests.",
"status": "ok"
}
GET /api/v1/addresses/:cep
O código HTTP de retorno deve ser 200 e o corpo esperado na resposta é:
{
"data": {
"bairro": "Maguari",
"cep": "67145037",
"complemento": "(Cj PAAR)",
"ddd": "91",
"ibge": "1500800",
"localidade": "Ananindeua",
"logradouro": "Quadra Cem",
"siafi": "0415",
"uf": "PA"
}
}
GET /api/v1/addresses/send_csv
O código HTTP de retorno deve ser 202 e o corpo esperado na resposta é:
{
"message": "Accepted",
"status": 202
}