Banco de Dados

Visão Geral

O banco de dados da aplicação foi construído em PostgreSQL, garantindo robustez, escalabilidade e suporte a operações complexas. Ele é estruturado com diversas tabelas que representam as entidades do laboratório (estudantes, professores, técnicos, projetos, documentos, processos seletivos, permissões e contratos). O acesso ao banco é feito pelo ORM Sequelize, que abstrai queries SQL e facilita a manipulação de dados com segurança contra SQL Injection.

Tecnologias

  • PostgreSQL: SGBD relacional open source, usado como base de dados principal.
  • Sequelize: ORM para Node.js que gerencia migrações, associações, validações e abstração de queries SQL.

Migrações

O uso de migrações via Sequelize permite:

  • Controle de versão do banco.
  • Criação e atualização de tabelas de forma automatizada.
  • Rastreabilidade de mudanças na estrutura de dados.

Dump do Banco

O esquema completo do banco de dados pode ser acessado em: Esquema do banco de dados.

Estrutura de Tabelas

As principais tabelas são:

  • students → Armazena dados de bolsistas (informações pessoais, curso, GRR, renda, documentos).
  • professor → Registro de professores vinculados ao laboratório.
  • technician → Cadastro de técnicos.
  • clt → Trabalhadores contratados via CLT.
  • scholarship_type → Tipos de bolsas (nacionais ou não, valores, categorias).
  • student_scholarships → Relação entre estudantes e bolsas.
  • projects → Informações de projetos (datas, status, valor, integrantes).
  • partners → Parceiros vinculados ao laboratório.
  • partners_project → Relação entre parceiros e projetos.
  • documents → Documentos armazenados no S3, apenas a bucket_key é salva no banco.
  • document_permission → Relação entre documentos e permissões de acesso.
  • ps (processos seletivos) → Editais e informações de processos seletivos.
  • ps_form → Detalhes dos participantes em processos seletivos.
  • ps_relation → Relação entre participantes e processos seletivos.
  • ps_evaluation → Feedback dos processos seletivos.
  • user_system → Usuários do sistema, com suporte a autenticação, verificação de e-mail e permissões.
  • permissions → Lista de permissões disponíveis (admin, common, manager).
  • user_permissions → Relação entre usuários e permissões.
  • student_project_participation → Relação de estudantes com projetos.
  • professor_project_participation → Relação de professores com projetos.
  • technician_project_participation → Relação de técnicos com projetos.
  • clt_project_participation → Relação de CLTs com projetos.
  • partner_student → Relação entre parceiros e estudantes.
  • scholarship_ps_relation → Liga bolsas a processos seletivos.
  • student_contract → Contratos de estudantes.
  • student_contract_relation → Relação entre estudantes e contratos.
  • contract_amendments → Termos aditivos de contratos (armazenados no S3).
  • project_contract_amendments → Relação entre aditivos e projetos.
  • logs → Registro de logs de acesso (método, status_code, URL, IP, user_agent, etc.).

Permissões Padrão

O sistema garante que as permissões iniciais existam ao criar o banco:

  • admin
  • common
  • manager

Essas permissões são inseridas automaticamente caso ainda não existam.

Integração com S3

  • Os arquivos (como documentos e aditivos) não ficam armazenados no banco, apenas as referências (bucket keys).
  • O acesso real é feito via Amazon S3, garantindo escalabilidade e redução de sobrecarga no Postgres.

Conclusão

A modelagem foi feita para representar a realidade do laboratório, permitindo o gerenciamento de pessoas, projetos, bolsas, permissões, documentos e processos seletivos de forma completa. A combinação PostgreSQL + Sequelize + S3 garante robustez, segurança e flexibilidade para evoluir o sistema no futuro.

Última modificação September 15, 2025: Issue #358: FIX input cleanups after submition (b78e42a)