-
Notifications
You must be signed in to change notification settings - Fork 0
Sprint 2
A Sprint 2 foi focada no desenvolvimento das features descritas na Sprint 1 por cada um dos membros, de tal maneira que foram implementadas tanto os cenários de teste quanto as funcionalidades.
O sistema CAMAAR é uma aplicação web desenvolvida em Ruby on Rails 8.1.3 com banco de dados SQLite3, destinada à gestão de avaliações acadêmicas na Universidade de Brasília. O sistema possui três papéis de usuário: Administrador, Professor e Estudante, cada um com acesso a diferentes funcionalidades.
Email: admin@unb.br · Senha: Admin123
| ID | Funcionalidade | Issue | Responsável | Pontos |
|---|---|---|---|---|
| F01 | Login de usuário | #104 | Yuri Santana Lopes | 2 |
| F02 | Cadastro de usuário | #100 | Luidgi Varela Carneiro | 2 |
| F03 | Redefinição de senha de usuário | #107 | João Vitor das Neves Romero | 3 |
| F04 | Criação de formulário | #103 | João Felipe Stein | 5 |
| F05 | Responder formulário criado | #99 | Arthur Souza Chagas | 5 |
| F06 | Importar dados do SIGAA | #98 | João Vitor das Neves Romero | 5 |
| F07 | Criar template de formulário | #102 | João Felipe Stein | 5 |
| F08 | Gerar relatório do administrador | #101 | Arthur Souza Chagas | 8 |
| F09 | Definição de senha | #105 | Yuri Santana Lopes | 3 |
| F10 | Criação de formulário para discentes e docentes | #113 | Luidgi Varela Carneiro | 3 |
| F11 | Atualizar base de dados com os dados do SIGAA | #108 | Yuri Santana Lopes | 8 |
| F12 | Sistema de gerenciamento por departamento | #106 | Arthur Souza Chagas | 8 |
| F13 | Visualização de formulários para responder | #109 | João Felipe Stein | 3 |
| F15 | Visualização de templates criados | #111 | João Vitor das Neves Romero | 2 |
| F16 | Edição / deleção de templates | #112 | João Felipe Stein | 3 |
Responsável: Yuri Santana Lopes Issue: #104 Pontos: 2
Permite que um usuário já cadastrado acesse o sistema através de suas credenciais (e-mail e senha). Após a autenticação bem-sucedida, o sistema redireciona o usuário para a página correspondente ao seu papel:
-
Administrador →
/gerenciamento -
Professor →
/relatorios -
Estudante →
/avaliacoes
- O usuário acessa a rota
GET /logine visualiza o formulário de login. - Submete o formulário via
POST /logininformando e-mail e senha. - O sistema busca o usuário pelo e-mail (normalizado para minúsculas) e verifica a senha com
bcryptviahas_secure_password. - Em caso de sucesso, o
iddo usuário é armazenado na sessão (session[:usuario_id]) e o redirecionamento é feito conforme o papel. - Em caso de falha, o formulário é reexibido com mensagem de erro.
O encerramento de sessão é feito via DELETE /logout, que remove session[:usuario_id] e redireciona para a tela de login.
Responsável: Luidgi Varela Carneiro Issue: #100 Pontos: 2
Permite que um novo usuário crie uma conta no sistema. Contas criadas por este fluxo recebem automaticamente o papel de Estudante.
- O usuário acessa
GET /signupe visualiza o formulário de cadastro. - Preenche nome, e-mail, senha e confirmação de senha, e submete via
POST /signup. - O sistema cria um registro
Usuariocomrole: :estudante. - As seguintes validações são aplicadas:
- Nome: obrigatório.
- E-mail: obrigatório, formato válido e único no sistema (insensível a maiúsculas).
- Senha: mínimo de 8 caracteres, contendo letras e números.
- Confirmação de senha: deve corresponder à senha informada.
- Em caso de sucesso, o usuário é redirecionado para a tela de login com mensagem de confirmação.
- Em caso de erro, o formulário é reexibido com os erros de validação detalhados.
Responsável: João Vitor das Neves Romero Issue: #107 Pontos: 3
Permite que um usuário autenticado altere sua senha atual para uma nova senha de sua escolha.
- O usuário autenticado acessa
GET /senha/redefinir. - O formulário exibe três campos: senha atual, nova senha e confirmação da nova senha.
- O formulário é submetido via
POST /senha/redefinir. - O sistema autentica a senha atual do usuário via
authenticate. - Se a senha atual for válida, atualiza o
password_digestcom a nova senha, sujeita às mesmas regras de complexidade (mínimo 8 caracteres, letras e números). - A rota é protegida por
before_action :require_login, impedindo acesso de usuários não autenticados.
Responsável: João Felipe Stein Issue: #103 Pontos: 5
Permite que um administrador crie um formulário de avaliação associando um template de perguntas a uma turma específica e definindo o público-alvo (discente ou docente).
- O administrador acessa
GET /gerenciamento/formularios. - O sistema carrega os templates disponíveis (
TemplateFormulario) e as turmas cadastradas (Turma), com suas respectivas matérias. - O formulário de criação exibe os campos:
- Nome do formulário
- Template (seleção a partir dos templates existentes)
-
Turma (exibida como
"NOME DA MATÉRIA - Turma N - SEMESTRE") - Público-alvo (radio button: Discente ou Docente)
- O formulário é submetido via
POST /gerenciamento/formularios. - O sistema valida os campos com o contexto
:criacao_por_publico:- Nome único por turma e público-alvo.
- Template e turma obrigatórios.
- Público-alvo deve ser discente ou docente.
- Se o público for discente, a turma deve possuir ao menos uma matrícula ativa.
- O
criador_formularioé associado automaticamente ao administrador logado. - Em caso de sucesso, o formulário é salvo e o usuário é redirecionado com mensagem de confirmação.
Responsável: Arthur Souza Chagas Issue: #99 Pontos: 5
Permite que estudantes e professores respondam os formulários de avaliação que lhes foram destinados.
- O usuário autenticado visualiza os formulários pendentes na tela de avaliações (ver F13).
- Ao selecionar um formulário, acessa a tela de resposta contendo as perguntas definidas no template associado.
- As perguntas podem ser do tipo discursivo ou múltipla escolha (radio), conforme o campo
tipo_perguntada entidadePergunta. - Ao submeter, o sistema registra um
RespostaFormulariovinculando o usuário ao formulário, e umRespostaPerguntapara cada resposta individual. - Formulários já respondidos não são exibidos novamente para o mesmo usuário, pois a consulta de pendentes exclui registros já presentes em
resposta_formularios.
Responsável: João Vitor das Neves Romero Issue: #98 Pontos: 5
Permite que o administrador importe dados exportados do SIGAA para popular a base de dados do CAMAAR com turmas, professores e alunos.
-
O administrador acessa a página de gerenciamento e clica no botão "Importar Dados".
-
Um modal é exibido solicitando dois arquivos JSON:
-
classes.json— contém os metadados das turmas (código e nome da matéria, código da turma, semestre e horário). -
class_members.json— contém os membros de cada turma (docente e lista de discentes), referenciados pelo código da matéria, código da turma e semestre.
-
-
O botão de importação permanece desabilitado até que ambos os arquivos sejam selecionados.
-
Ao confirmar, os arquivos são enviados via
POST /gerenciamento/importare processados peloImportarDadosService. -
O serviço cruza os dois arquivos pelo triplo
(code, classCode, semester)e cria, em uma única transação, os seguintes registros (apenas se ainda não existirem):Entidade Identificador único Departamentonome_departamentoMateriacodigoMateriaUsuario(docente)emailProfessorusuario_idTurmamateria + numero_turma + semestre_stringUsuario(discente)emailEstudanteusuario_idMatriculaestudante + turma -
Quando os dados são importados, emails são disparados para cada um dos usuários contendo um link de acesso com token que expira em 48h. Ao acessar o link contido no email, o usuário deverá definir a sua senha para que ele seja efetivamente cadastrado no sistema.
-
O código da turma (ex.:
"TA") é convertido para número ordinal (A=1,B=2, ...). -
Ao final, uma mensagem de resumo indica a quantidade de registros criados.
Responsável: João Felipe Stein Issue: #102 Pontos: 5
Permite que o administrador crie templates de formulário reutilizáveis, compostos por um conjunto de perguntas que podem ser atribuídas a diferentes turmas em diferentes momentos.
- O administrador acessa
GET /gerenciamento/templates. - Define o nome do template e adiciona perguntas de dois tipos:
- Discursiva: campo aberto para resposta em texto.
- Múltipla escolha (radio): conjunto de opções predefinidas e, opcionalmente, gabarito.
- O template é salvo como
TemplateFormulariocom suas perguntas (Pergunta) associadas. - Templates criados ficam disponíveis para seleção na criação de formulários (F04).
Responsável: Arthur Souza Chagas Issue: #101 Pontos: 8
Permite que o administrador visualize um relatório consolidado com informações referentes a todos os formulários respondidos no sistema, possibilitando análise de resultados por turma e matéria.
- O administrador acessa
GET /gerenciamento/resultados. - O sistema consulta os formulários respondidos (
RespostaFormulario) e agrega os dados por formulário, turma e matéria. - O relatório exibe métricas como:
- Total de respostas por formulário.
- Média de notas (
nota_media,nota_final) por turma. - Distribuição de respostas por questão (para perguntas de múltipla escolha).
- A funcionalidade é restrita a usuários com papel de Administrador.
Responsável: Yuri Santana Lopes Issue: #105 Pontos: 3
Permite que usuários importados do SIGAA, ao acessarem o link enviado pelo email com token que expira em 48h, consigam definir uma senha permanente de sua escolha no primeiro acesso ao sistema.
- Usuários importados via SIGAA (F06) recebem um email (presente na pasta "/notificacoes") contendo um link para que cadastre a senha de suas conta.
- O usuário que recebeu o email deve abrir o link que expira em 48h e cadastrar uma senha para a sua conta.
- Após realizar o cadastro de uma senha para a sua conta e confirmar, o usuário consegue entrar no sistema.
Responsável: Luidgi Varela Carneiro Issue: #113 Pontos: 3
Estende a criação de formulários (F04) permitindo que o administrador especifique o público-alvo: discentes (estudantes matriculados na turma) ou docentes (professor responsável pela turma).
- Durante a criação de um formulário, o administrador seleciona o público-alvo via botões de rádio: Discente ou Docente.
- A seleção define o campo
publico_estudanteno registroFormulario:-
true→ formulário destinado a discentes. -
false→ formulário destinado ao docente da turma.
-
- Ao criar formulários para discentes, o sistema valida se a turma selecionada possui ao menos uma matrícula ativa (
trancado: false). Caso contrário, a criação é bloqueada com mensagem de erro. - A filtragem de formulários pendentes por papel (F13) utiliza este campo para exibir apenas os formulários pertinentes a cada usuário.
Responsável: Yuri Santana Lopes Issue: #108 Pontos: 8
Estende a funcionalidade de importação (F06) com comportamento de upsert: ao reimportar dados do SIGAA, registros já existentes são atualizados com novas informações, enquanto registros ausentes são inseridos. Nenhum dado existente é removido.
O mesmo fluxo de importação da F06 é utilizado. A diferença está na lógica do ImportarDadosService, que substitui find_or_create_by! por find_or_initialize_by seguido de save! para as entidades com campos atualizáveis:
| Entidade | Campo atualizado | Campo protegido |
|---|---|---|
Materia |
nome_materia |
departamento (imutável após criação) |
Usuario |
nome |
role, password, matricula
|
Turma |
professor |
materia, numero_turma, semestre_string
|
Campos protegidos como role e password nunca são sobrescritos, preservando quaisquer alterações feitas manualmente no sistema após a importação inicial.
Ao final da operação, a mensagem de resumo distingue registros criados de registros atualizados (ex.: "3 usuarios criados; 1 materias atualizados.").
Responsável: Arthur Souza Chagas Issue: #106 Pontos: 8
Permite que o administrador gerencie usuários e turmas segmentados por departamento, refletindo a estrutura organizacional da universidade.
- Cada
Adminestá vinculado a umDepartamento, que por sua vez agrupa asMaterias e suas respectivasTurmas. - O painel de gerenciamento exibe as turmas e usuários filtrados pelo departamento do administrador logado.
- O administrador pode visualizar, dentro do seu departamento:
- Turmas ativas por semestre.
- Professores e alunos vinculados a cada turma.
- A hierarquia de departamento é estabelecida no momento da importação dos dados do SIGAA (F06), onde o campo
docente.departamentodo JSON define oDepartamentoassociado à matéria.
Responsável: João Felipe Stein Issue: #109 Pontos: 3
Permite que estudantes e professores visualizem a lista de formulários pendentes de resposta que lhes foram destinados.
- O usuário autenticado acessa
GET /avaliacoes. - O sistema consulta os formulários pendentes com base no papel do usuário:
-
Estudante: formulários com
publico_estudante: truecujas turmas possuam matrícula ativa do estudante (não trancada). -
Professor: formulários com
publico_estudante: falsecujas turmas sejam de responsabilidade do professor.
-
Estudante: formulários com
- Formulários já respondidos (presentes em
resposta_formulariospara o usuário) são excluídos da listagem. - Os resultados são exibidos como cartões contendo:
- Nome do formulário.
- Nome da matéria e semestre.
- Nome do professor responsável pela turma.
- Se não houver formulários pendentes, uma mensagem de confirmação é exibida: "Você está em dia! Sem formulários para preencher."
Responsável: Luidgi Varela Carneiro Issue: #110 Pontos: 5
Permite que o administrador visualize os resultados consolidados de um formulário específico, incluindo as respostas recebidas e métricas de desempenho.
- O administrador acessa
GET /gerenciamento/resultados. - Seleciona o formulário desejado a partir da lista de formulários criados.
- O sistema exibe:
- Total de respostas recebidas vs. total de destinatários.
- Para perguntas discursivas: listagem das respostas enviadas.
- Para perguntas de múltipla escolha: distribuição percentual das respostas por opção.
- Nota média consolidada (
nota_media) quando aplicável.
- O acesso é restrito ao papel de Administrador.
Responsável: João Vitor das Neves Romero Issue: #111 Pontos: 2
Permite que o administrador visualize a lista completa dos templates de formulário existentes no sistema.
- O administrador acessa
GET /gerenciamento/templates. - O sistema lista todos os
TemplateFormulariocadastrados, exibindo:- Nome do template.
- Número de perguntas associadas.
- Data de criação.
- A partir desta listagem, o administrador pode selecionar um template para edição (F16) ou utilizá-lo na criação de um novo formulário (F04).
Responsável: João Felipe Stein Issue: #112 Pontos: 3
Permite que o administrador edite ou remova templates de formulário previamente criados, desde que não estejam em uso por formulários ativos.
- A partir da listagem de templates (F15), o administrador seleciona um template para edição ou exclusão.
-
Edição: o administrador pode alterar o nome do template e adicionar, modificar ou remover perguntas individuais. As alterações são salvas via
PATCH /gerenciamento/templates/:id. -
Exclusão: o administrador pode remover um template via
DELETE /gerenciamento/templates/:id. O sistema verifica se o template está referenciado por algumFormularioativo; em caso positivo, a exclusão é bloqueada com mensagem de aviso. - O acesso é restrito ao papel de Administrador.