O AvaliaIF é um sistema de controle de aplicação de provas, desenhado para otimizar o fluxo de trabalho da coordenação pedagógica de institutos federais. A plataforma permite que os professores submetam suas minutas de prova, que são então avaliadas pelos coordenadores pedagógicos. Uma vez aprovadas, as minutas são automaticamente encaminhadas ao setor de logística para impressão, garantindo um processo mais ágil, transparente e eficiente.
A identidade visual e o logo do AvaliaIF foram desenvolvidos pelo colaborador Rafhael Hanry
| Fundo Claro | Fundo Escuro |
|---|---|
![]() |
![]() |
O sistema foi projetado para atender às necessidades dos quatro principais perfis de usuários:
- Upload de minutas de provas em formato de documento.
- Acompanhamento do status da avaliação de suas minutas.
- Visualização de feedback dos coordenadores em caso de reajustes.
- Dashboard com a lista de minutas de provas pendentes de avaliação.
- Visualização e download das minutas submetidas de todos os professores.
- Aprovação ou reprovação das minutas com a possibilidade de adicionar comentários.
- Criação e Gerenciamento de períodos de avaliações bimestrais.
- Upload de minutas de provas em formato de documento.
- Acompanhamento do status da avaliação de suas minutas.
- Visualização de feedback do coordenador pedagógico em caso de reajustes.
- Dashboard com a lista de minutas de provas pendentes de avaliação.
- Visualização e download das minutas submetidas pelos professores do eixo.
- Aprovação ou reprovação das minutas com a possibilidade de adicionar comentários.
- Acesso a uma lista de provas aprovadas e prontas para impressão.
- Download dos arquivos para impressão.
- Marcação das provas como "impressas" para controle.
flowchart LR
A["👨🏫 Professor<br/>Envia/Reenvia minuta"] --> B["🏫 Coordenação de Curso<br/>Emite parecer"]
B -->|✅ Deferido| C["📚 Setor Pedagógico<br/>Emite parecer"]
B -->|❌ Indeferido| A
C -->|✅ Deferido| D["📦 Setor de Logística<br/>Realiza impressão"]
C -->|❌ Indeferido| A
👉 Esse fluxograma já contempla:
- O retorno ao Professor em caso de indeferimento;
- O fato de que o Setor Pedagógico só atua após o parecer da Coordenação;
- O envio para impressão apenas após deferimentos consecutivos.
- Servidor: Professor, Coordenador, Setor Pedagógico e Setor de Logística
- Disciplina: Técnica ou Propedêutica
- Turma
- Período de Avaliação
- Professor-Disciplina-Turma (relação)
- Minuta
- Avaliação/Histórico de Indeferimentos
-
Status das minutas:
- Não Enviada
- Revisão Coordenação
- Revisão Pedagogia
- Devolvida
- Finalizada
- Impressa
-
Eixos
- Administração (Técnico)
- Agropecuária (Técnico)
- Informática (Técnico)
- Meio Ambiente (Técnico)
- Propedêutica (Base Comum)
Acesse: AvaliaIF
Utilize os emails abaixo para acessar os perfis do sistema. A senha para
todos os perfis é 12345
- Perfil: Professor
- email:
professor@ifpi.edu.br
- email:
- Perfil: Setor Pedagógico
- email:
pedagogico@ifpi.edu.br
- email:
- Perfil: Coordenador
- email:
coordenador@ifpi.edu.br
- email:
- Perfil: Setor de Logística
- email:
logistica@ifpi.edu.br
- email:
O projeto segue a estrutura abaixo. Para o backend, a estrutura de pacotes
escolhida é a feature-based
/apps
├── 📁 avaliaif-backend/
│ ├── 📄 Dockerfile # <-- Script docker para execução de comandos específicos no container
│ ├── 📄 pom.xml
│ └── 📁 src/
│ ├── 📁 main/
│ │ ├── 📁 java/br/edu/ifpi/avaliaif/
│ │ │ ├── 📁 feature_a/ # <-- Módulo/Feature
│ │ │ │ ├── 📄 FeatureAController.java
│ │ │ │ ├── 📄 IFeatureAService.java # <-- Interface para comunicação entre módulos
│ │ │ │ ├── 📄 FeatureAServiceImpl.java # <-- Implementação da interface
│ │ │ │ ├── 📄 FeatureARepository.java
│ │ │ │ ├── 📄 FeatureAEntity.java
│ │ │ │ └── 📁 dto/
│ │ │ ├── 📁 feature_b/ # <-- Módulo/Feature
│ │ │ │ ├── 📄 FeatureBController.java
│ │ │ │ ├── 📄 IFeatureBService.java # <-- Interface
│ │ │ │ ├── 📄 FeatureBServiceImpl.java # <-- Implementação da interface
│ │ │ │ ├── 📄 FeatureBRepository.java
│ │ │ │ └── 📄 FeatureBEntity.java
│ │ │ │ └── 📁 dto/
│ │ │ ├── 📁 config/ # <-- Configurações globais
│ │ │ │ └── 📁 security/
│ │ │ └── 📁 shared/ # <-- Recursos compartilhados
│ │ │ │ ├── 📁 exception/
│ │ │ │ └── 📁 util/
│ │ └── 📁 resources/ # <-- Arquivos de configuração do Spring
│ │ ├── 📄 application.properties
│ │ ├── 📄 application-docker.properties
│ │ ├── 📄 application-dev.properties
│ └── 📁 test/ # <-- Diretório de testes
│ └── 📁 java/br/edu/ifpi/avaliaif/
│ ├── 📁 feature_a/
│ └── 📁 feature_b/
│
├── 📁 avaliaif-frontend/
│ ├── 📄 .env
│ ├── 📄 Dockerfile
│ ├── 📄 package.json
│ ├── 📄 vite.config.js
│ ├── 📁 public/
│ └── 📁 src/
│ ├── 📁 api/ # <- Diretório responsável por toda a comunicação com o backend
│ ├── 📁 assets/ # <- Armazenamento de arquivos estáticos (imgs, fonts, icons, etc)
│ ├── 📁 components/ # <- Componentes React reutilizáveis (Button.tsx, Input.tsx, etc)
│ ├── 📁 context_or_store/ # <- Gerenciamento de estado (AuthContext.tsx, ThemeContext.tsx, etc)
│ ├── 📁 hooks/ # <- Diretório para custom hooks (reutilização de lógica)
│ ├── 📁 pages/ # <- Diretório que contém as páginas da aplicação
│ ├── 📄 App.jsx
│ └── 📄 main.jsx
│
├── 📁 docs/
│
├── 📄 .vscode
├── 📄 .gitignore
├── 📄 docker-compose.yml
└── 📄 README.md
Para garantir que todos trabalhem com as mesmas ferramentas, listamos abaixo as tecnologias e suas versões. Siga os passos para instalar cada uma.
O Node.js é um ambiente de execução para JavaScript e o NPM é seu gerenciador de pacotes. Usaremos ambos para o projeto frontend em React. A forma mais recomendada de instalação é através de um gerenciador de versões, como o NVM (Node Version Manager).
# Instala o NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Recarregue seu terminal e depois instale a versão correta do Node.js
nvm install 22
nvm use 22Baixe e instale o nvm-windows. Depois, abra um novo terminal como administrador:
nvm install 22
nvm use 22node -v # Deve retornar v22.x.x
npm -v # Deve retornar 10.x.x- JDK
v21(OpenJDK,Eclipse Temurin,Amazon Correttoou qualquer outra distribuição livre de sua preferência) O Java Development Kit (JDK) é necessário para compilar e executar nosso projeto backend.
Recomendamos usar o SDKMAN! para gerenciar as versões do Java.
# Instala o SDKMAN!
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# Instala o Java 21
sdk install 21.0.4-temBaixe o OpenJDK 21 (por exemplo, o Eclipse Temurin) e siga as instruções do instalador para configurar as variáveis de ambiente.
java -version # Deve exibir a versão 21.x.x- PostgreSQL
v16.0
Não é necessário instalar o Postgres localmente, pois ele será executado através do Docker.
- Inicie o container do Postgres no Docker Desktop
- Abra o DBeaver e crie uma nova conexão
PostgreSQLcom as seguintes configurações:- URL: jdbc:postgresql://localhost:5432/avaliaif
- Host: localhost
- Banco de Dados: avaliaif
- Nome de usuário: postgres
- Senha: postgres
O Docker nos ajudará a criar um ambiente padronizado para rodar a aplicação (backend e banco de dados).
Acesse o site oficial do Docker e baixe o Docker Desktop para o seu sistema operacional (Windows, macOS ou Linux). O instalador é simples e intuitivo.
docker --version # Deve retornar a versão do Docker instaladaSiga estes passos para obter o código e preparar o ambiente.
Abra seu terminal, navegue até a pasta onde deseja salvar o projeto e execute o comando abaixo.
git clone git@github.com:ReneDouglas/projeto-avaliaIF.git
cd <NOME_DO_REPOSITÓRIO>Para garantir que todos usem exatamente as mesmas versões das bibliotecas,
usaremos o comando npm ci. Ele instala as dependências a partir do arquivo
package-lock.json.
# Navegue até a pasta do frontend
cd frontend
# Instale as dependências exatas
npm ciO backend (Java/Spring) terá suas dependências baixadas automaticamente pelo Maven/Gradle quando o Docker for iniciado.
Com o Docker, podemos subir todo o ambiente (backend, frontend e banco de dados) com um único comando.
Certifique-se de que o Docker Desktop esteja em execução na sua máquina.
Na raiz do projeto (onde o arquivo docker-compose.yml está localizado),
execute:
docker compose up --build -dup: Cria e inicia os containers.--build: Força a reconstrução das imagens. Use isso na primeira vez ou quando houver alterações nos arquivos de configuração (Dockerfile,package.json, etc.).-d: (detached) Executa os containers em segundo plano.
Para subir os containers sem a necessidade de realizar o build , utilize o
comando abaixo ou execute-os via Docker Desktop.
docker compose up -d- Frontend (React com Hot Reload): http://localhost:3000
- Backend (Java/Spring): http://localhost:8080
O Hot Reload está configurado para o frontend. Qualquer alteração que você fizer nos arquivos do React será refletida automaticamente no navegador.
Se você adicionar uma nova biblioteca no package.json (frontend) ou no
pom.xml (backend), a imagem Docker precisa ser reconstruída.
docker compose downdocker compose up --build -dEste comando irá recriar as imagens, baixando as novas dependências, e iniciar os containers atualizados.
Para manter o projeto organizado, seguiremos um fluxo de trabalho padrão com Git.
Nunca trabalhe diretamente nas branches main ou development. Para cada nova
funcionalidade (feature) ou correção (bugfix), crie sua própria branch a
partir da development.
-
Padrão de nome:
feature/task-{id}-{descrição-curta}- {
id}: O número da tarefa no nosso quadro de gestão do GitProjects. - {
descrição-curta}: Duas ou três palavras que resumem a tarefa (ex:cria-tela-login).
- {
-
Comandos
# 1. Mude para a branch 'development' e garanta que ela esteja atualizada git switch development git pull origin development # 2. Crie sua nova branch e mude para ela git switch -c feature/task-12-cria-tela-login
Commits são "checkpoints" do seu trabalho. Mensagens claras ajudam a entender o histórico do projeto. Usaremos o padrão Conventional Commits.
- Formato:
<prefixo>: <mensagem curta e descritiva> - Prefixos Comuns:
feat: Para uma nova funcionalidade (feature).fix: Para uma correção de bug.docs: Para alterações na documentação (README.md, etc.).style: Para formatação de código, ponto e vírgula, etc. (sem alteração de lógica).refact: Para refatoração de código que não altera a funcionalidade.chore: Para tarefas de manutenção, como atualização de dependências.
# Adicione os arquivos que você modificou
git add .
# Faça o commit com uma mensagem clara
git commit -m "feat: adiciona formulário de login com validação de campos"Após realizar seus commits na sua branch, envie-os para o GitHub.
# O comando abaixo envia sua branch local para o repositório remoto (origin)
git push origin feature/task-12-cria-tela-loginO que é um Pull Request e como solicitá-lo?
Um Pull Request (PR) é um pedido formal para que seu código (da sua branch) seja
revisado e incorporado (merged) à branch development. É uma oportunidade
para que outros colegas revisem seu trabalho antes que ele entre na base
principal do código.
- Após fazer o
git pushda sua branch, acesse a página do repositório no GitHub. - Você verá um aviso amarelo com o nome da sua branch e um botão "Compare & pull request". Clique nele.
- A página de criação do PR será aberta.
- Verifique se a branch
baseé adevelopmente a compare é a sua branch (feature/...). - Dê um título claro ao seu PR (ex: "Feature: Implementa tela de login").
- Escreva uma breve descrição do que foi feito e por quê. Se houver uma tarefa relacionada, mencione o ID dela (#3, por exemplo).
- Clique em "Create pull request".
Pronto! Agora os outros membros da equipe serão notificados para revisar seu código.
- Crie um arquivo
.vscodena raíz do projeto caso ele ainda não exista. - Crie um arquivo
launch.jsone cole o código abaixo. - No VSCode, vá para a aba
Run and Debug, selecioneAttach to Docker Containerno menu dropdown e clique no botão de play verde (Start Debugging).
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Attach to Docker Container",
"request": "attach",
"hostName": "localhost",
"port": 5005,
"projectName": "avaliaif-backend" // IMPORTANTE: Verifique se este é o nome do seu projeto no pom.xml
}
]
}
