Angular / Docker / Programação / Restful API / Soluções / Técnicas + Técnicas / Tecnologia 22/07/2020
Tendo em vista que a CTT de Portugal disponibiliza gratuitamente a base de distritos, concelhos, códigos postais e apartados, decidi realizar um projeto para estudo, com três fases:
- Aplicação de Conversão dos dados provenientes de arquivos com formato CSV para o banco de dados SQLite (.net core);
- Camada de serviço Restful com o banco de dados convertido, incorporado (nodejs);
- Aplicativo em formato de web app para consumo da camada de serviço (angular);
Fase 0 – Definição
Trata-se de um projeto de estudo e por isso optei por criar três camadas em três linguagens diferentes. No momento desta publicação o objeto de estudo que estou em foco é a linguagem da terceira fase, o Angular e, portanto, gostaria imensamente que a comunidade propusesse melhorias.
Defini que a base de dados deveria ser SQLite para que pudesse realizar a distribuição da base incluída na camada de serviço. Como trata-se de uma base de somente leitura, não há problema em incluí-la diretamente em um container, sem que fosse necessário incluir mais uma camada de servidor de banco de dados em separado, o que também pode ser feito.
Fase 1 – App de Conversão
Optei por criar uma solução em .net core para simplificar a carga, geração de lista de objetos e as inserções na base de dados. Com base na documentação da CTT para a leitura dos dados, desenhei as classes e lista de objetos necessários para realizar o processo de importação do arquivo CSV para memória e em seguida, a persistência da informação na base de dados.
Fase 2 – Webservice
De forma a simplificar a distribuição da consulta, optei por uma camada de serviço em NodeJs com uso da biblioteca Knex para consultar a base de dados gerada na Fase 1. Para diminuir a curva de trabalho, usei o código que já havia criado no projeto de consulta da base de correios do Brasil.
Fase 3 – Web App
O Web App é a camada de interface para a consulta dos usuários que possui a lógica de consumo da camada de serviços e exibição dos dados. Optei realizar esta camada com a linguagem Angular.
Recursos:
- Código-fonte do projeto:
https://github.com/avmesquita/CTT-Api
- Imagem do docker:
https://hub.docker.com/repository/docker/avmesquita/ctt-api-service - Imagem publicada no heroku para consumo:
https://ctt-api-service.herokuapp.com/
Melhorias:
Não deixe de propor melhorias para o projeto, que é totalmente gratuito e com código aberto, realizar melhorias e quando possível, fazer um fork do projeto no github e geração de solicitações de incorporação (pull request) para que outras pessoas possam, não somente aprender como também reutilizar.

Carioca, arquiteto de soluções e desenvolvedor de software desde 1996. Atualmente moro em Vila Nova de Gaia, Porto, Portugal.
“Perhaps the greatest challenge of my career is to identify which part of my profession is not a hobby.
The ease of logical understanding and the constant search for knowledge are great drivers of my career.”
postal code sempre retornar array vazio.
Olá, Carlos, boa tarde.
Tens razão. Não parei para ver qual o problema, mas acredito que algum bot que monitora o projecto alertou-me sobre vulnerabilidades e fiz a atualização sem efetuar o teste antes o que fez com o aplicativo parasse de funcionar. Talvez algo relacionado ao knex.
Em algum momento, talvez, eu acerte. Se preferires acertar, faça o Pull Request no projecto que incorporo ao master.
Foi um projecto que fiz para estudo e não tenho retorno algum sobre.