Pular para o conteúdo principal

Arquitetura do Sistema

Documentação técnica da arquitetura do sistema PAC.

Visão Geral

O sistema PAC é construído seguindo os princípios de Clean Architecture, separando as responsabilidades em camadas bem definidas.

Stack Tecnológica

Backend

  • Framework: NestJS (Node.js)
  • Linguagem: TypeScript
  • Banco de Dados: PostgreSQL
  • ORM: TypeORM
  • Autenticação: JWT (JSON Web Tokens)
  • Agendamento: @nestjs/schedule (Cron Jobs)
  • Email: Nodemailer
  • Validação: class-validator, class-transformer

Frontend

  • Framework: Angular
  • Linguagem: TypeScript
  • UI Framework: Metronic
  • HTTP Client: Angular HttpClient
  • Roteamento: Angular Router

Estrutura do Backend

back/src/
├── domain/ # Camada de Domínio
│ ├── entities/ # Entidades do domínio
│ ├── dtos/ # Data Transfer Objects
│ ├── repositories/ # Interfaces de repositórios
│ └── services/ # Serviços de domínio

├── application/ # Camada de Aplicação
│ └── [módulos]/ # Casos de uso por módulo

├── infrastructure/ # Camada de Infraestrutura
│ ├── database/ # Entidades ORM e configuração
│ ├── repositories/ # Implementação dos repositórios
│ ├── services/ # Serviços externos (email, hash, etc)
│ ├── jobs/ # Tarefas agendadas (Cron)
│ └── providers/ # Providers e configurações

└── presentation/ # Camada de Apresentação
├── controllers/ # Controllers HTTP
├── dtos/ # DTOs de resposta
├── guards/ # Guards de autenticação/autorização
├── decorators/ # Decorators customizados
└── modules/ # Módulos NestJS

Camadas da Arquitetura

Domain (Domínio)

Camada mais interna, contém as regras de negócio puras:

  • Entities: Entidades do domínio (Client, FormularioModelo, etc)
  • DTOs: Interfaces para transferência de dados
  • Repositories: Interfaces que definem contratos de acesso a dados
  • Services: Serviços de domínio com lógica de negócio

Application (Aplicação)

Contém os casos de uso do sistema:

  • Cada módulo tem seus casos de uso específicos
  • Orquestra chamadas entre domínio e infraestrutura
  • Implementa regras de aplicação

Infrastructure (Infraestrutura)

Implementações concretas de interfaces:

  • Database: Entidades ORM (TypeORM), migrations
  • Repositories: Implementação dos repositórios
  • Services: Serviços externos (EmailService, HashService, etc)
  • Jobs: Tarefas agendadas (geração de formulários)
  • Providers: Configurações e providers

Presentation (Apresentação)

Interface com o mundo externo:

  • Controllers: Endpoints REST
  • DTOs: DTOs de request/response
  • Guards: Autenticação e autorização
  • Interceptors: Interceptadores de requisições
  • Filters: Filtros de exceções

Fluxo de Dados

sequenceDiagram
participant Client as Cliente HTTP
participant Controller as Controller
participant UseCase as Use Case
participant Repository as Repository
participant Database as Banco de Dados

Client->>Controller: Request HTTP
Controller->>Controller: Validação (DTO)
Controller->>UseCase: Executa caso de uso
UseCase->>Repository: Busca dados
Repository->>Database: Query SQL
Database-->>Repository: Dados
Repository-->>UseCase: Entidade de domínio
UseCase->>UseCase: Regras de negócio
UseCase->>Repository: Salva alterações
Repository->>Database: Insert/Update
Database-->>Repository: Confirmação
Repository-->>UseCase: Sucesso
UseCase-->>Controller: Resultado
Controller->>Controller: Transforma em DTO
Controller-->>Client: Response HTTP

Autenticação e Autorização

Autenticação

  • Usa JWT (JSON Web Tokens)
  • Token contém informações do usuário (id, role, entityId)
  • Token expira após período configurado
  • Refresh token para renovação

Autorização

  • Guards verificam permissões por rota
  • Baseado no role do usuário:
    • ADMIN: Acesso total
    • RESPONSAVEL_TECNICO: Acesso a seus clientes e formulários
    • CLIENT: Acesso apenas aos seus dados
    • TECNICO: Acesso limitado

Banco de Dados

Estrutura

  • PostgreSQL como banco relacional
  • TypeORM como ORM
  • Migrations para versionamento do schema
  • Relacionamentos bem definidos entre entidades

Principais Tabelas

  • users: Usuários do sistema
  • clients: Empresas clientes
  • responsaveis_tecnicos: Responsáveis técnicos
  • formulario_modelos: Modelos de formulários
  • formulario_perguntas: Perguntas dos formulários
  • formulario_instancias: Instâncias de formulários preenchidos
  • formulario_resposta_perguntas: Respostas das perguntas
  • chamados: Chamados de suporte
  • setores: Setores das empresas
  • tecnicos: Técnicos das empresas

Jobs Agendados

FormularioSchedulerJob

  • Frequência: A cada 10 minutos (*/10 * * * *)
  • Função: Gera instâncias de formulários automaticamente
  • Lógica:
    1. Busca formulários publicados e ativos
    2. Verifica frequência (diário/semanal/personalizado)
    3. Verifica horários configurados (janela de 15 min)
    4. Cria instâncias para clientes vinculados

Serviços Externos

EmailService

  • Envio de emails via SMTP
  • Templates HTML para diferentes tipos de email
  • Notificações automáticas

Outros Serviços

  • BcryptHashService: Hash de senhas
  • JwtTokenService: Geração e validação de tokens
  • CepService: Consulta de CEP
  • ReceitaFederalService: Validação de CNPJ
  • AsaasService: Integração com gateway de pagamento
  • FileUploadService: Upload de arquivos

Estrutura do Frontend

front2/src/app/
├── pages/ # Páginas do sistema
├── services/ # Serviços HTTP
├── models/ # Modelos TypeScript
├── modules/ # Módulos funcionais
│ ├── auth/ # Autenticação
│ └── crud/ # Componentes CRUD
└── _metronic/ # Theme/Layout

Comunicação Frontend-Backend

  • REST API para comunicação
  • JSON como formato de dados
  • JWT no header Authorization
  • Interceptors para tratamento de erros e tokens

Segurança

  • Senhas hasheadas com bcrypt
  • Tokens JWT com expiração
  • Validação de dados em todas as camadas
  • Rate limiting (throttling)
  • CORS configurado
  • Validação de entrada (class-validator)

Próximos Passos