- Sobre o Projeto
- Garantias de Segurança
- Funcionalidades Principais
- Ambientes
- Estrutura do Projeto
- Stack Tecnológica
- Configuração do Ambiente
- Executando com Docker
- Guia de Desenvolvimento
- Documentação Adicional
- Contribuindo
- Licença
O IFala é um sistema de denúncias anônimas desenvolvido para instituições federais de ensino, permitindo que alunos relatem ocorrências de forma segura e protegida. A plataforma garante total anonimato aos denunciantes enquanto oferece ferramentas eficientes para o acompanhamento e tratamento das denúncias pelos gestores institucionais.
Sua voz importa. Sua identidade está protegida.
- Anonimato total garantido - Nenhum dado pessoal é coletado
- Comunicação criptografada - Todas as interações são protegidas
- Acompanhamento seguro via token - Sistema de protocolo único para cada denúncia
- Privacidade por design - Arquitetado para proteger a identidade dos usuários
O sistema foi projetado para atender às necessidades dos principais perfis de usuários:
- ✅ Submissão de denúncias de forma completamente anônima
- ✅ Upload de provas (documentos, imagens, áudios)
- ✅ Acompanhamento do status via token único
- ✅ Comunicação protegida com os gestores
- ✅ Proteção contra bots com Google reCAPTCHA v3
- ✅ Dashboard com denúncias pendentes de análise
- ✅ Sistema de triagem e categorização de denúncias
- ✅ Fixação de denúncias prioritárias
- ✅ Visualização e download de provas anexadas
- ✅ Sistema de notificações por e-mail
- ✅ Geração de relatórios em PDF
- ✅ Acompanhamento do histórico de denúncias
- ✅ Gerenciamento de usuários gestores
- ✅ Configuração de categorias de denúncias
- ✅ Monitoramento de métricas e logs (Grafana/Prometheus)
- ✅ Gestão de notificações do sistema
Execute localmente com Docker Compose seguindo as instruções da seção "Executando com Docker"
O sistema está preparado para deploy com:
- Configurações otimizadas no docker-compose-prd.yml
- Nginx como reverse proxy (configuração em nginx/nginx.conf)
- SSL/TLS configurável (documentação em docs/SSL_CONFIGURATION.md)
- Monitoramento completo com stack Prometheus/Grafana/Loki
- Scripts de inicialização do banco em scripts/postgres/
Para mais detalhes sobre deploy em produção, consulte a documentação em producao/.
O projeto segue uma arquitetura monorepo com separação clara entre frontend e backend.
/
├── 📁 apps/
│ ├── 📁 ifala-backend/ # API Spring Boot
│ └── 📁 ifala-frontend/ # Aplicação React
├── 📁 docs/ # Documentação adicional
│ └── SSL_CONFIGURATION.md
├── 📁 monitoring/ # Stack de observabilidade
│ ├── grafana/
│ ├── loki/
│ ├── prometheus/
│ └── promtail/
├── 📁 nginx/ # Configuração do proxy reverso
├── 📁 producao/ # Documentação de produção
├── 📁 scripts/ # Scripts auxiliares
│ └── postgres/
├── 📄 .env # Variáveis de ambiente
├── 📄 docker-compose.yml # Ambiente de desenvolvimento
├── 📄 docker-compose-prd.yml # Ambiente de produção
└── 📄 README.md
apps/ifala-backend/
├── 📄 Dockerfile # Container para desenvolvimento
├── 📄 Dockerfile.prd # Container otimizado para produção
├── 📄 pom.xml # Dependências Maven
└── 📁 src/
├── 📁 main/
│ ├── 📁 java/br/edu/ifpi/ifala/
│ │ ├── 📁 acompanhamento/ # Feature: Acompanhamento de denúncias
│ │ ├── 📁 autenticacao/ # Feature: Login/Logout
│ │ ├── 📁 denuncia/ # Feature: Gestão de denúncias
│ │ ├── 📁 denunciaFixada/ # Feature: Denúncias fixadas
│ │ ├── 📁 notificacao/ # Feature: Sistema de notificações
│ │ ├── 📁 prova/ # Feature: Upload e gestão de provas
│ │ ├── 📁 config/ # Configurações globais (CORS, etc)
│ │ ├── 📁 security/ # JWT, filtros, autenticação
│ │ ├── 📁 shared/ # Exceções e utilitários
│ │ └── 📁 utils/
│ └── 📁 resources/
│ ├── 📄 application.properties # Configuração base
│ ├── 📄 application-docker.properties # Perfil Docker
│ ├── 📄 application-prod.properties # Perfil produção
│ ├── 📄 application-staging.properties # Perfil staging
│ └── 📄 logback-spring.xml # Configuração de logs
└── 📁 test/ # Testes automatizados
Cada módulo funcional contém:
*Controller.java- Endpoints REST*Service.java- Interface de serviço*ServiceImpl.java- Implementação da lógica de negócio*Repository.java- Acesso ao banco de dados (JPA)*Entity.java- Entidades JPAdto/- Data Transfer Objects
apps/ifala-frontend/
├── 📄 Dockerfile # Container para desenvolvimento
├── 📄 Dockerfile.prd # Container otimizado para produção
├── 📄 package.json
├── 📄 vite.config.ts
├── 📄 tsconfig.json
├── 📁 public/ # Assets estáticos
└── 📁 src/
├── 📁 assets/ # Imagens, fontes, ícones
├── 📁 components/ # Componentes reutilizáveis
│ ├── FileUpload.tsx
│ ├── Header.tsx
│ ├── Sidebar.tsx
│ ├── ProtectedRoute.tsx
│ └── ProvasModal.tsx
├── 📁 contexts/ # Context API do React
│ ├── AuthContext.tsx
│ └── AuthContextTypes.ts
├── 📁 hooks/ # Custom hooks
│ └── useAuth.ts
├── 📁 pages/ # Páginas da aplicação
│ ├── Acompanhamento/
│ ├── Denuncia/
│ └── DenunciaList/
├── 📁 services/ # Comunicação com API
├── 📁 styles/ # Estilos globais
├── 📁 types/ # TypeScript types/interfaces
├── 📁 utils/ # Funções auxiliares
├── 📄 App.tsx
└── 📄 main.tsx
O projeto utiliza tecnologias modernas para garantir desempenho, escalabilidade e segurança.
- Java 25 com Spring Boot 3.5.5
- Spring Security com autenticação JWT
- Spring Data JPA para persistência de dados
- PostgreSQL 16 como banco de dados
- Spring Mail para envio de notificações
- Spring Actuator com métricas Prometheus
- MapStruct 1.6.3 para mapeamento de DTOs
- Google reCAPTCHA v3 para proteção contra bots
- React 19 com TypeScript 5.8
- Vite 7 como build tool
- Material-UI (MUI) 7 para componentes
- React Router v7 para navegação
- Axios para requisições HTTP
- React PDF Renderer para geração de relatórios
- Docker e Docker Compose para containerização
- PostgreSQL 16 com otimizações de performance
- Prometheus para coleta de métricas
- Grafana para visualização de métricas e dashboards
- Loki para agregação de logs
- Promtail para coleta de logs dos containers
- Nginx como reverse proxy em produção
- Versão: Node.js 22.x
- Gerenciador recomendado: NVM (Node Version Manager)
# Instala o NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Recarregue o terminal e instale o Node.js
nvm install 22
nvm use 22Baixe e instale o nvm-windows. Depois:
nvm install 22
nvm use 22node -v # Deve retornar v22.x.x
npm -v # Deve retornar 10.x.x- Versão: JDK 25
- Distribuições: OpenJDK, Eclipse Temurin, Amazon Corretto ou similar
Recomendamos usar o SDKMAN!:
# Instala o SDKMAN!
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# Instala o Java 25
sdk install java 25-amznBaixe o Eclipse Temurin e configure as variáveis de ambiente.
java -version # Deve exibir a versão 25.x.x- Versão: 16.0
- Nota: Não é necessário instalar localmente, pois é executado via Docker.
- Inicie o container:
docker compose up postgres - No DBeaver, configure:
- Host: localhost
- Porta: 5432
- Database: ifala
- Usuário: postgres
- Senha: postgres
Necessário para executar a aplicação completa com todos os serviços.
Baixe o Docker Desktop para seu sistema operacional.
docker --version
docker compose versiongit clone git@github.com:ReneDouglas/projeto-IFala.git
cd projeto-IFalaO projeto já vem com configurações pré-definidas do VS Code para facilitar o desenvolvimento.
Ao abrir o projeto no VS Code, você será notificado para instalar as extensões recomendadas. Clique em "Install All" ou instale manualmente:
Java & Spring Boot:
- Extension Pack for Java (vscjava.vscode-java-pack)
- Spring Boot Extension Pack (vmware.vscode-spring-boot)
- Spring Boot Dashboard (vscjava.vscode-spring-boot-dashboard)
- Checkstyle for Java (shengchen.vscode-checkstyle)
JavaScript/TypeScript & React:
- ESLint (dbaeumer.vscode-eslint)
- Prettier (esbenp.prettier-vscode)
- ES7+ React/Redux/React-Native snippets (dsznajder.es7-react-js-snippets)
Docker:
- Docker (ms-azuretools.vscode-docker)
Git:
- GitLens (eamodio.gitlens)
- Git Graph (mhutchie.git-graph)
Database:
- SQLTools (mtxr.sqltools)
- SQLTools PostgreSQL Driver (mtxr.sqltools-driver-pg)
Outros:
- Markdown All in One (yzhang.markdown-all-in-one)
- IntelliCode (visualstudioexptteam.vscodeintellicode)
- Code Spell Checker (streetsidesoftware.code-spell-checker)
- Brazilian Portuguese - Code Spell Checker
O arquivo .vscode/settings.json já configura:
- ✅ Formatação automática com Prettier ao salvar
- ✅ Checkstyle para Java seguindo Google Style Guide
- ✅ Auto-save ao trocar de arquivo
- ✅ Configurações específicas por linguagem (Java, TypeScript, JSON, etc)
O arquivo .vscode/launch.json inclui duas configurações de debug:
- Spring Boot-IfalaApplication - Debug local da aplicação Spring Boot
- Attach to Docker Container - Debug do container Docker na porta 5005
O arquivo .env contém todas as variáveis necessárias. Certifique-se de que ele
existe na raiz do projeto.
Principais variáveis:
JWT_SECRET- Chave secreta para geração de tokens JWTRECAPTCHA_SECRET_KEY- Chave secreta do Google reCAPTCHAPOSTGRES_*- Credenciais do banco de dadosSPRING_MAIL_*- Configurações do servidor de e-mailGRAFANA_*- Credenciais das ferramentas
cd apps/ifala-frontend
npm ci # Instala exatamente as versões do package-lock.jsonAs dependências do Maven são gerenciadas automaticamente pelo Docker e pelo próprio Maven ao executar o build.
O projeto utiliza Docker Compose para orquestrar todos os serviços.
docker compose up --build -ddocker compose down# Todos os serviços
docker compose logs -f
# Serviço específico
docker compose logs -f ifala-backend
docker compose logs -f ifala-frontenddocker compose down
docker compose up --build -dPara executar com as configurações otimizadas para produção:
docker compose -f docker-compose-prd.yml up --build -d| Serviço | URL | Descrição |
|---|---|---|
| Frontend | http://localhost:5173 | Interface React com Hot Reload |
| Backend | http://localhost:8080 | API Spring Boot |
| Grafana | http://localhost:3000 | Dashboard de métricas e logs |
| Prometheus | http://localhost:9091 | Servidor de métricas |
| PostgreSQL | localhost:5432 | Banco de dados |
Grafana:
- Usuário:
admin - Senha: Definida em
GF_SECURITY_ADMIN_PASSWORDno.env
PostgreSQL:
- Usuário:
postgres - Senha:
postgres - Database:
ifala
main- Código em produção (protegida)development- Branch de desenvolvimento (protegida)
Sempre crie branches a partir da development:
# Atualiza a branch development
git switch development
git pull origin development
# Cria e muda para a nova branch
git switch -c feature/task-{id}-{descricao-curta}
# Exemplo:
git switch -c feature/task-42-adiciona-validacao-emailPadrão de nomenclatura:
feature/task-{id}-{descrição}- Para novas funcionalidadesfix/task-{id}-{descrição}- Para correções de bugsdocs/task-{id}-{descrição}- Para atualizações de documentação
Usamos o padrão Conventional Commits para mensagens claras e consistentes:
<tipo>: <mensagem curta e descritiva>
| Tipo | Descrição | Exemplo |
|---|---|---|
feat |
Nova funcionalidade | feat: adiciona validação de email na denúncia |
fix |
Correção de bug | fix: corrige erro no upload de arquivo |
docs |
Documentação | docs: atualiza README com instruções de deploy |
style |
Formatação (sem mudança de lógica) | style: formata código com Prettier |
refactor |
Refatoração | refactor: simplifica lógica de autenticação |
test |
Testes | test: adiciona testes unitários para DenunciaService |
chore |
Manutenção | chore: atualiza dependências do Maven |
perf |
Melhoria de performance | perf: otimiza query de listagem de denúncias |
git commit -m "feat: implementa filtro por categoria na lista de denúncias"
git commit -m "fix: corrige validação do token JWT expirado"
git commit -m "docs: adiciona documentação da API de denúncias"
git commit -m "refactor: move lógica de email para serviço dedicado"# Adiciona os arquivos modificados
git add .
# Faz o commit seguindo Conventional Commits
git commit -m "feat: adiciona componente de notificações"
# Envia para o repositório remoto
git push origin feature/task-42-adiciona-validacao-email- Após o
git push, acesse o repositório no GitHub - Clique em "Compare & pull request"
- Configure o PR:
- Base:
development - Compare: Sua branch (
feature/...)
- Base:
- Preencha:
- Título: Descrição clara (ex: "Feature: Implementa notificações por e-mail")
- Descrição: O que foi feito, por que foi feito, referência à task (#42)
- Clique em "Create pull request"
- Aguarde revisão de pelo menos um membro da equipe
- Responda aos comentários
- Faça alterações solicitadas em novos commits na mesma branch
- O PR será mesclado após aprovação
- Certifique-se de que o arquivo
.vscode/launch.jsonexiste na raiz do projeto - Se não existir, crie com o seguinte conteúdo:
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Attach to Docker Container",
"request": "attach",
"hostName": "localhost",
"port": 5005,
"projectName": "ifala"
}
]
}- Inicie o backend:
docker compose up ifala-backend - No VS Code, vá para Run and Debug (Ctrl+Shift+D)
- Selecione "Attach to Docker Container"
- Clique no botão verde de play
- Adicione breakpoints no código Java
- Faça requisições à API e o debug irá pausar nos breakpoints
Acesse http://localhost:3000 para visualizar:
- Métricas do Spring Boot - CPU, memória, threads, requests HTTP
- Métricas do PostgreSQL - Conexões, queries, performance
- Logs agregados - Via Loki/Promtail
Acesse http://localhost:9091 para queries diretas de métricas.
Endpoints de métricas disponíveis em:
- http://localhost:8080/actuator/health
- http://localhost:8080/actuator/metrics
- http://localhost:8080/actuator/prometheus
- Use DTOs para comunicação entre camadas
- Implemente validações com Bean Validation (
@Valid,@NotNull, etc) - Documente endpoints complexos
- Escreva testes unitários para serviços
- Use transações (
@Transactional) adequadamente
- Componentes pequenos e reutilizáveis
- Use TypeScript para type safety
- Implemente loading states e error handling
- Siga os padrões do ESLint configurado
- Use hooks customizados para lógica compartilhada
- Não commite arquivos
.envou credenciais - Mantenha dependências atualizadas
- Escreva código limpo e legível
- Documente decisões importantes
- Teste localmente antes de fazer push
- Configuração SSL/TLS - Instruções para HTTPS em produção
- Nginx - Configuração do proxy reverso
- TUI - Interface de terminal para gestão
- Fork o projeto
- Crie sua branch (
git switch -c feature/nova-funcionalidade) - Commit suas mudanças seguindo Conventional Commits
- Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais
detalhes.
Desenvolvido por estudantes e professores do Instituto Federal do Piauí - Campus Corrente.
Contato: ifala.cacor@ifpi.edu.br
IFala - Sua voz importa. Sua identidade está protegida.