Api desenvolvida para busca de CEPs brasileiros. Ao informar um CEP válido a api irá realizar a consulta no serviço Via Cep e retornará os dados do endereço ao usuário. Caso o CEP informado não seja encontrado o serviço tentará buscar o próximo CEP alterando o último dígito diferente de zero para zero e irá repetir isso até encontrar um endereço ou esgotar todas as possibilidades. O projeto conta com persistência de logs estruturados para todas as requisições http recebidas e também para todas as exceções "levantadas" durante a execução.
- Consulta de dados reais via serviço rest;
- Autenticação por credenciais e requisição via token;
- Cache com Redis;
- Banco de dados NoSQL MongoDB;
- Senha protegida via função hash;
- Health Check;
- Logs estrutudados persistidos com elasticsearch.
- Clone o projeto e acesse a pasta
git clone https://github.com/luizcdev/zip-code-challenge.git
- Renomeie copie o arquivo .env.example para um novo chamado .env e altere algum valor se necessário.
- Rode o seguinte comando:
docker-compose up
- Esse processo irá buildar o projeto, rodar os testes, configurar todas as dependências do projeto, por isso pode demorar alguns minutos.
- Após finalizar todo o processo, o sistema estará disponível para uso
- Rota Base: http://localhost:3000/api
- Documentação: http://localhost:3000/doc
- Health Check: http://localhost:3000/api/health
- Kibana: http://localhost:5601
- Por padrão o serviço cria um usuário com as credenciais ``{"username": "admin", "password": "admin"}```
- Para vizualizar os logs no kibana é necessário realizar ao menos uma chamada à api e depois criar o índice do projeto dentro do kibana, por padrão o índice é zipcode.
- Primeiramente realize ao menos uma requisição http à api zip-code-challenge;
- Acesse o kibana pelo navegador;
- Clique no ícone do menu no canto superior esquerdo;
- Clique em "Discover";
- Cloque no botão "Create index pattern";
- No campo index pattern name, digite o nome do índie, que por padrão é "zipcode";
- O índice da aplicação irá aparecer listado abaixo e o botão "Nest step" será habilitado, clique nele;
- No campo "Time field" escolha o campo date;
- Por fim clique em "Create index pattern e pronto, seu índice estará criado".
Para o projeto foi utilizado Node.js por ser consolidado no mercado para desenvolvimento de serviços altamente escalável, TypeScrypt e NestJs por atenderem os requisitos e para realizar uma experimentação do framework NestJS. Durante o desenvolvimento boas práticas de programação foram adotadas, seguindo os princípios de SOLID e Clean Code, também foram impregados vários conceitos, padrões de projeto e técnicas como Filter, ExceptionHandlers, Middlewares, Seeders, Injeção de dependência, Generics, Testes Unitários e Teste Coverage.
- Aumentar a cobertura de testes para próximo de 100%;
- Incluir testes e2e utilizando testcontainners para testar as integrações entre módulos e dependências do sistema;
- Enriquecer a aplicação com logs principalmente com cálculo de latência do client;
- Criação automática do índice no kibana;