Arquitetura e Tecnologias
O Urbanize é constituído de cinco componentes principais:
-
Frontend: Responsável pela interface de usuário, onde os usuários interagem com o sistema. Ele exibe os dados de maneira clara e acessível, permitindo que os usuários façam pesquisas e visualizem gráficos e análises.
-
Backend/API: Gerencia a lógica de negócios e atua como intermediário entre o frontend e o banco de dados. Ele processa as solicitações dos usuários, executa as regras de negócio e retorna os dados apropriados para o frontend.
-
Banco de Dados: Armazena e organiza os dados necessários para o funcionamento do Urbanize. É o repositório central onde todos os dados coletados, processados e organizados são mantidos para acesso e consulta.
Arquitetura do Urbanize
Para fornecer uma visão clara de como esses componentes interagem e se integram no sistema, o diagrama abaixo ilustra a arquitetura geral do Urbanize. Nele, é possível visualizar o fluxo de dados e a relação entre cada um dos componentes descritos acima, desde a coleta de dados no SODF até a apresentação dos resultados para o usuário final.
Descrição dos componentes
A seguir, apresentamos uma visão detalhada de cada componente do Urbanize. As escolhas tecnológicas feitas para cada parte do sistema refletem o compromisso da equipe de desenvolvimento em utilizar soluções modernas e eficientes, assegurando robustez e facilidade de manutenção.
Frontend
O frontend é interface visual do Urbanize, composto por três páginas principais, organiza em gráficos os dados coletados.
Tecnologias utilizadas:
- Next.js: Framework React para renderização no lado do servidor (SSR) e geração de sites estáticos, proporcionando uma performance melhorada e SEO otimizado.
- Tailwind CSS: Framework de utilitários CSS que permite um design responsivo e customizável.
- TypeScript: Linguagem que adiciona tipagem estática ao JavaScript, aumentando segurança e previsibilidade do código.
- Axios: Biblioteca para requisições HTTP, estabelecendo a comunicação com a API.
- Vitest: Ferramenta de testes unitários JavaScript, permitindo a execução rápida e eficiente dos testes.
- Testing Library: Conjunto de utilitários que possibilita renderizar os componentes em ambiente de teste.
- ESLint: Ferramenta de linting que identifica e corrige problemas de estilo e padrões no código, garantindo a qualidade e consistência.
- Sonner: Biblioteca para exibição de notificações na interface, tornando mensagens de erro e alertas amigáveis.
- ApexCharts: Biblioteca para criação de gráficos interativos e visualizações de dados, proporcionando uma apresentação rica e personalizável das informações.
Backend/API
O backend/API é responsável pela busca, regras de negócio e tratamento dos dados. Para maior robustez e facilidade de manutenção, a API foi estruturada seguindo os princípios da Clean Architecture, dividida em três camadas principais:
-
Infrastructure: Esta camada contém os elementos de infraestrutura necessários para a execução do sistema, incluindo a configuração do servidor, a conexão com o banco de dados, e a implementação dos serviços externos. Ela lida com as operações mais próximas ao sistema operacional e ao ambiente de execução.
-
Adapters: Os adaptadores são responsáveis por fazer a ponte entre o mundo externo e o núcleo da aplicação. Eles transformam as entradas e saídas, adaptando-as para serem compreendidas pela camada de aplicação. Incluem controllers que recebem as requisições HTTP e repositórios que abstraem o acesso ao banco de dados.
-
Application: Esta camada contém a lógica de negócio central do sistema. Ela orquestra as operações, aplica as regras de negócio e interage com as outras camadas através de interfaces definidas. O foco é garantir que as regras de negócio sejam cumpridas de maneira consistente e independente da tecnologia usada nas outras camadas. No Urbanize, inclui os services.
Tecnologias utilizadas:
- Express: Framework para construção de APIs e servidores web em Node.js, facilitando a criação e gerenciamento de rotas.
- Vitest: Ferramenta de testes unitários JavaScript, permitindo a execução rápida e eficiente dos testes.
- TypeScript: Linguagem que adiciona tipagem estática ao JavaScript, aumentando segurança e previsibilidade do código.
- Nodemon: Ferramenta que reinicia automaticamente o servidor Node.js quando mudanças são detectadas, agilizando o desenvolvimento.
- ESLint: Ferramenta de linting que identifica e corrige problemas de estilo e padrões no código, garantindo a qualidade e consistência.
- Swagger: Ferramenta para documentação interativa de APIs, permitindo a exploração e testes das rotas da API.
API
Uma API (Application Programming Interface, ou Interface de Programação de Aplicações) é um conjunto de definições e protocolos que permite que diferentes sistemas ou softwares se comuniquem entre si de maneira estruturada e padronizada..
Tecnologias Utilizadas:
- Axios: é uma biblioteca JavaScript usada para fazer requisições HTTP de maneira simples e eficiente. Ela funciona tanto em navegadores quanto em ambientes Node.js, permitindo que você se conecte a APIs ou servidores, envie dados e receba respostas.
A fonte dos dados extraídos pelo api: Obrasgov
Banco de Dados
O banco de dados armazena de forma dinâmica e inteligente todos os dados necessários para abastecer o Urbanize. Ele é o repositório central onde os dados coletados e processados são mantidos, garantindo que estejam acessíveis e organizados para consultas e análises.
Veja sua modelagem:
Tecnologias Utilizadas:
- PostgreSQL: Sistema de gerenciamento de banco de dados relacional de código aberto, usado para armazenar e gerenciar os dados de forma eficiente e segura. Ele oferece suporte a operações complexas e é altamente escalável, adequado para o volume e a complexidade dos dados no Urbanize.
Início
Siga os passos abaixo para executar o backend do Urbanize:
Ambiente e Pré-requisitos
Para rodar o projeto é fundamental ter algumas dependências globais:
- Node
- Miniconda/Python
Para visualizar versões, links e as instruções completas de configuração do ambiente: Ambiente e Pré-requisitos
Instalação
Após configurar o Ambiente e Pré-requisitos, em um diretório de sua máquina, abra o terminal e execute:
git clone https://github.com/unb-mds/2024-2-Urbanize.git
Com o repositório do backend devidamente clonado, você terá acesso à aplicação Express e ao Scraper:
Express/API
Navegue até o diretório raiz do repositório clonado:
cd 2024-2-Urbanize
Em seguida instale as dependências do Urbanize:
npm install
Scraper
Navegue até o diretório WebScrapper
:
cd WebScrapper
Crie um ambiente virtual com conda:
conda create --name <my-env>
Ative o ambiente criado:
conda activate <my-env>
Instale as dependências e bibliotecas dentro do ambiente virtual:
conda install --yes --file requirements.txt
O script ETL acessa o banco de dados por meio de um .env
encontrado no caminho
WebScrapper/DataETL/.env
. A sua estrutura está escrita abaixo:
DATABASE_USERNAME=<INSERIR AQUI>
DATABASE_PASSWORD=<INSERIR AQUI>
DATABASE_NAME=<INSERIR AQUI>
DATABASE_PORT=<INSERIR AQUI>
DATABASE_HOST=<INSERIR AQUI>
⚙️ Execução
Express/API
Para executar a aplicação Express em sua máquina, execute no diretório raiz:
npm run start
O servidor será inicializado e estará disponível na porta 3001 do localhost:
http://localhost:3333/
Demais comandos para execução de testes, builds e linter podem ser encontrados na guia scripts do arquivo package.json
na pasta raiz.
Com a api rodando localmente é possível acessar sua documentação e testá-la no Swagger, basta acessar:
http://localhost:3001/api-docs
Scraper
Com o ambiente ativado como instruído acima, para extrair os dados do Oracle Data com o selenium execute:
DataScraper/InepScrapper.py
ETL
Para tratar e carregar os dados extraídos, em modo debugger, acesse WebScrapper/DataETL
, lembre-se de selecionar o ambiente conda que foi criado, e então para rodar o programa por partes, execute:
ETLDebugger.ipynb
Se preferir, e não precisar/quiser rodar em modo debugger(por partes), execute o código para produção:
python3 WebSrapper/DataETL/main.py
Guia de contribuição
Para acessar o guia completo de contribuição: Guia de Contribuição
Documentação
Para acessar a documentação completa: Documentação Urbanize
Nela, você encontra os seguintes tópicos: