Backend

Visão Geral

O backend do projeto Ademir foi desenvolvido para ser modular, escalável e de fácil manutenção, combinando Node.js + Express com um ecossistema moderno de bibliotecas e ferramentas. Ele é responsável por processar regras de negócio, gerenciar usuários, lidar com autenticação, envio de e-mails, geração de relatórios e integração com serviços externos como Amazon S3.

Tecnologias Utilizadas

  • Node.js + Express: Base do servidor HTTP e da lógica de negócio.

  • TypeScript: Linguagem principal, trazendo tipagem estática, maior robustez e escalabilidade.

  • Sequelize (ORM): Abstração para o banco de dados PostgreSQL, com suporte a migrações, associações e queries estruturadas.

  • PostgreSQL: Banco relacional principal, armazena usuários, permissões, relacionamentos e metadados.

  • Amazon S3 (via @aws-sdk/client-s3): Armazenamento de arquivos.

    • As chaves (keys) dos arquivos ficam no banco de dados.
    • Os arquivos binários ficam salvos diretamente no bucket do S3.
  • Nodemailer: Envio de e-mails (ex.: confirmação de cadastro, notificações).

  • Argon2: Hashing seguro de senhas.

  • Swagger (swagger-jsdoc + swagger-ui-express): Documentação de API interativa, gerada a partir de anotações no código.

  • Morgan + CORS: Middlewares para log de requisições HTTP e configuração de acesso cross-origin.

  • Formidable: Upload de arquivos.

  • pdfmake + PapaParse + JSZip: Geração de relatórios em PDF, CSV e pacotes ZIP com dados/documentos.

  • Node-cron: Agendamento de tarefas automáticas (jobs).

Testes

Estratégia

O fluxo de testes foi estruturado para ser independente, confiável e previsível. Cada entidade é testada de forma isolada, com foco exclusivo em sua funcionalidade. Durante os testes, é criado um usuário temporário no banco de dados, responsável por gerar o token de autenticação necessário para acessar rotas protegidas.

Esse token é então usado em cada requisição de teste (criação, leitura, atualização e exclusão de dados). Ao final da execução, todas as alterações feitas no banco são removidas automaticamente, garantindo que o ambiente esteja sempre limpo e consistente.

Ferramentas

  • Jest: Estrutura de testes unitários e de integração.
  • Supertest: Simulação de requisições HTTP para validar endpoints de forma realista.

CI/CD

O projeto conta com pipeline de Integração Contínua (CI) que roda automaticamente a cada commit ou pull request:

  • Execução de testes (Jest + Supertest).
  • Verificação de lint (ESLint).
  • Checagem de tipagem com TypeScript (tsc).
  • Build do código com pnpm.

Na etapa de Entrega Contínua (CD), os artefatos são empacotados e preparados para deploy.

Scripts Principais (package.json)

  • pnpm start → Compila (tsc) e inicia o servidor (node dist/server.js).
  • pnpm test → Sobe ambiente de testes (NODE_ENV=testing), compila e executa Jest + Supertest.
  • pnpm lint → Roda ESLint.
  • pnpm prod → Build para produção e inicialização.

Fluxo de Armazenamento de Arquivos

  1. Usuário faz upload de um documento via API.
  2. O arquivo é enviado para o bucket S3.
  3. Apenas a key do arquivo é salva no Postgres.
  4. Para acessar o documento novamente, a aplicação gera uma URL assinada temporária (presigned URL).

Ferramentas de Desenvolvimento

  • pnpm: Gerenciador de pacotes rápido e eficiente.
  • dotenv: Carregamento das variáveis de ambiente a partir de arquivos .env.
  • typescript-eslint: Integração de ESLint com TypeScript para padronização de código.

Estrutura de Qualidade e Segurança

  • Autenticação: JWT.
  • Hash de senhas: Argon2.
  • Linting: ESLint configurado para boas práticas.
  • Documentação da API: Swagger acessível em rota dedicada.
  • Logs: Morgan, com possibilidade de integração a observabilidade no futuro.
Última modificação September 15, 2025: Issue #358: FIX input cleanups after submition (b78e42a)