O modelo de componentes descreve a organização técnica do sistema, apresentando a divisão da aplicação em componentes de software, suas responsabilidades e a forma como se comunicam. O objetivo é garantir modularidade, separação de responsabilidades, facilidade de manutenção e testabilidade.
O sistema foi projetado seguindo uma arquitetura em camadas (Layered Architecture), na qual cada componente possui uma função bem definida e se comunica apenas com as camadas adjacentes.
Visão do fluxo entre camadas
[Interface Streamlit] → [Serviços] → [Repositórios] → [Banco de Dados]
↑ ↑ ↑
(usuário) (regras de (CRUD, SQL)
negócio)
A autenticação e autorização atuam na entrada das requisições; o processamento batch e os testes são componentes transversais.
Componente de Interface (Frontend – Streamlit)
Responsabilidade:
- Disponibilizar as telas do sistema para os usuários.
- Coletar dados de entrada (filtros de consulta, formulários).
- Exibir resultados e mensagens ao usuário.
Características:
- Desenvolvido com Streamlit.
- Não contém regras de negócio.
- Comunica-se exclusivamente com a camada de serviços.
Componente de Autenticação e Autorização
Responsabilidade:
- Gerenciar autenticação de usuários.
- Controlar permissões de acesso com base no papel do usuário (Admin, Gerente, Coordenador, Pesquisador, Logista, Batch).
- Realizar validação de credenciais e hash de senha.
Benefício:
- Centraliza a segurança do sistema.
- Facilita a manutenção e evolução das regras de acesso.
Componentes de Serviços
Os serviços concentram toda a lógica de negócio do sistema, sendo responsáveis por validar regras, coordenar fluxos e interagir com os repositórios.
Principais serviços:
| Serviço | Função | Entidades relacionadas (modelo de dados) |
|---|---|---|
| UsuarioService | Gerenciamento de usuários e permissões. | Usuario |
| LojaService | Cadastro e aprovação de lojas. | Loja, Regiao |
| MarcaModeloService | Gerenciamento de marcas e modelos. | Marca, Modelo |
| FipeService | Integração com a API externa da Tabela FIPE (Parallelum): referências, marcas, modelos, anos e preço por referência; tratamento de erros e limites da API. Não aplica regras de negócio além da orquestração da chamada externa. | — (API externa) |
| PesquisaService | Registro das pesquisas realizadas pelos pesquisadores. | Pesquisa, Veículo pesquisado |
| CotacaoService | Cálculo e consulta de preços médios internos (tabelas Cotacao/Batch_Resultados). A consulta pública pode usar FipeService e/ou CotacaoService conforme a regra de negócio (ex.: sempre FIPE, ou FIPE + média interna). | Cotacao |
| AprovacaoService | Controle do processo de aprovação de lojas. | Aprovacao |
| BatchService | Processamento mensal para cálculo da média de preços. | Batch_Resultados |
Componentes de Persistência (Repositórios / DAO)
Responsabilidade:
- Realizar acesso direto ao banco de dados.
- Executar operações de leitura e escrita (CRUD).
- Garantir integridade e consistência dos dados.
Repositórios (alinhados ao modelo de dados):
| Repositório | Tabela(s) / entidade(s) |
|---|---|
| UsuarioRepository | Usuario |
| RegiaoRepository | Regiao |
| LojaRepository | Loja |
| MarcaRepository | Marca |
| ModeloRepository | Modelo |
| PesquisaRepository | Pesquisa |
| VeiculoPesquisadoRepository | Veículo pesquisado |
| CotacaoRepository | Cotacao |
| ConsultaRepository | Consulta |
| AprovacaoRepository | Aprovacao |
| BatchResultadosRepository | Batch_Resultados |
Esses componentes não possuem regras de negócio, apenas lógica de persistência.
Componente de Banco de Dados (SQL)
Responsabilidade:
- Armazenar de forma persistente os dados do sistema.
- Garantir integridade referencial por meio de chaves primárias e estrangeiras.
- Servir como base para consultas e processamento batch.
As tabelas e relacionamentos estão descritos no Projeto do modelo de dados.
Componente de Processamento Batch
Responsabilidade:
- Executar periodicamente o cálculo da média mensal dos preços.
- Processar grandes volumes de dados (a partir de Pesquisa / Veículo pesquisado e/ou Cotacao).
- Persistir os resultados na tabela Batch_Resultados por meio do BatchResultadosRepository.
Componente de Testes Automatizados
Responsabilidade:
- Validar o correto funcionamento dos componentes do sistema.
- Executar testes unitários dos serviços.
- Executar testes de integração entre serviços, repositórios e banco de dados.
Tecnologia utilizada: Pytest