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
- Usuário faz upload de um documento via API.
- O arquivo é enviado para o bucket S3.
- Apenas a key do arquivo é salva no Postgres.
- 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.