Initial commit

This commit is contained in:
Rafael Dias Martins
2026-08-31 14:10:20 -03:00
commit 8fcb5aac66
454 changed files with 60207 additions and 0 deletions
+162
View File
@@ -0,0 +1,162 @@
# Auditoria de Seguranca - course-plat
**Data:** 2026-05-18
**Escopo:** Analise completa de autenticacao, autorizacao e vulnerabilidades de seguranca
---
## CRITICO (Exploracao Imediata Possivel)
### 1. Middleware de Protecao de Rotas INATIVO
**Arquivo:** `src/proxy.js`
O middleware existe mas **nao ha `src/middleware.js`** no projeto. O Next.js so reconhece middleware nos caminhos padrao (`src/middleware.js` ou `middleware.js` na raiz). Toda a protecao de rotas por pagina esta desativada. Qualquer usuario pode acessar `/admin/dashboard` diretamente sem login.
### 2. `updateUserData` - Escalacao de Privilegio TOTAL (sem auth)
**Arquivo:** `src/app/lib/users/updateUserAction.js:11`
- `"use server"` com ZERO verificacao de autenticacao
- Qualquer cliente (nao autenticado) pode modificar qualquer usuario, incluindo alterar o campo `roles` para `["admin"]`
- **Impacto:** Um atacante pode se conceder acesso admin completo
### 3. `examActions.js` - 18 funcoes SEM autenticacao
**Arquivo:** `src/app/lib/actions/examActions.js` (1102 linhas)
| Funcao | Linha | Impacto |
|--------|-------|---------|
| `getExamTemplates` | 82 | Vazar todas as questoes + respostas corretas de provas |
| `getExamTemplateById` | 104 | Ver gabarito completo de qualquer prova |
| `updateExamTemplate` | 155 | Alterar respostas corretas de qualquer prova |
| `deleteExamTemplate` | 184 | Deletar qualquer modelo de prova |
| `duplicateExamTemplate` | 218 | Duplicar e ver conteudo de qualquer prova |
| `getExamAssignments` | 256 | Ver todas as atribuicoes de prova |
| `getExamAssignmentById` | ~298 | Ver detalhes completos de atribuicao |
| `createExamAssignment` | ~330 | Criar atribuicoes para qualquer turma |
| `updateExamAssignment` | ~350 | Modificar atribuicoes de prova |
| `deleteExamAssignment` | ~370 | Deletar atribuicoes |
| `archiveExamAssignment` | ~390 | Arquivar/desarquivar |
| `getExamAttempts` | ~410 | Ver todas as respostas e notas de todos os alunos |
| `getExamAttemptById` | ~430 | Ver detalhes de qualquer tentativa |
| `createExamAttempt` | ~450 | Criar tentativas impersonando qualquer aluno |
| `submitExamAttempt` | ~470 | Submeter respostas por qualquer tentativa |
| `getExamStatistics` | ~500 | Ver estatisticas gerais |
| `getStudentExamStatistics` | ~520 | Ver historico de qualquer aluno |
| `getClasses` | ~540 | Listar todas as turmas |
### 4. Server Actions administrativas sem autenticacao
15 funcoes com `"use server"` e ZERO verificacao de login:
| Funcao | Arquivo | Impacto |
|--------|---------|---------|
| `updateUserData` | `users/updateUserAction.js` | Escalacao de privilegio para admin |
| `saveUserData` | `users/createWardUserAction.js` | Criar contas de aluno sem auth |
| `saveProductAction` | `products/actions.js` | Criar/modificar produtos e precos |
| `deleteProductAction` | `products/actions.js` | Deletar qualquer produto |
| `saveClassAction` | `classes/saveClassAction.js` | Criar/modificar turmas |
| `toggleClassStatus` | `classes/toggleClassStatus.js` | Arquivar/ativar qualquer turma |
| `deleteClass` | `classes/deleteClass.js` | Deletar qualquer turma |
| `deleteClassTypeAction` | `classes/deleteClassType.js` | Deletar tipo de turma |
| `saveClassLink` | `classes/saveClassLinkAction.js` | Alterar link de aula |
| `saveClassTypeAction` | `classes/saveClassTypeAction.js` | Criar/modificar tipos de turma |
| `saveCategoryAction` | `categories/saveCategoryAction.js` | Criar/modificar categorias |
| `deleteCategory` | `categories/deleteCategory.js` | Deletar categorias |
| `deleteFile` | `generalActions/deleteFile.js` | Deletar qualquer arquivo do DB e S3 |
| `updateExamTemplate` | `examActions.js` | Alterar gabaritos de provas |
| `submitExamAttempt` | `examActions.js` | Submeter respostas por qualquer tentativa |
---
## ALTO (Risco Significativo)
### 5. IDOR em `/api/orders/[id]`
**Arquivo:** `src/app/api/orders/[id]/route.js`
Qualquer usuario autenticado pode ver qualquer pedido por ID, sem verificacao de propriedade.
### 6. Vazamento de Informacoes em `/api/health`
**Arquivo:** `src/app/api/health/route.js` - Totalmente publico
Expoe: status do MongoDB, contagem de usuarios, tipo de storage, endpoint S3, bucket name, `NODE_ENV`, `NEXTAUTH_URL`.
### 7. Endpoint de Debug em Producao
**Arquivo:** `src/app/api/debug-token/route.js`
Qualquer usuario autenticado pode ver sessao completa, roles e status admin.
### 8. Aulas sem verificacao de membros
**Arquivo:** `src/app/api/classes/[id]/lessons/route.js` (GET)
Qualquer usuario autenticado pode ver aulas de qualquer turma, sem verificar se e membro.
### 9. Headers de Debug no Middleware
**Arquivo:** `src/proxy.js:92-96`
Headers `x-debug-roles`, `x-debug-is-logged-in`, `x-debug-default-route` vazam informacoes de autenticacao em toda resposta.
---
## MEDIO
### 10. Ausencia de Headers de Seguranca
**Arquivo:** `next.config.mjs`
Nenhum header de seguranca configurado:
- Sem `Content-Security-Policy`
- Sem `X-Frame-Options`
- Sem `X-Content-Type-Options`
- Sem `Strict-Transport-Security`
- Sem `Referrer-Policy`
### 11. Vazamento de Erros Internos
Multiplas funcoes retornam erros raw ao cliente: `Erro: ${err}`, `error.message` - podem vazar stack traces, detalhes de conexao DB, etc.
### 12. `console.log` com Dados Sensiveis
`examActions.js` usa `console.log` para imprimir respostas de alunos e dados de questoes no log do servidor.
### 13. Upload de Arquivo sem Restricao de Entidade
**Arquivo:** `src/app/lib/generalActions/saveFileAction.js`
Qualquer usuario autenticado pode vincular arquivos a qualquer entidade (qualquer turma, tipo de turma, etc.).
### 14. Limite de Upload Muito Alto
**Arquivo:** `next.config.mjs:11`
`bodySizeLimit: '200mb'` permite uploads de ate 200MB, facilitando ataques de negacao de servico.
### 15. Recibos como Base64 no MongoDB
`submitOrderPaymentAction` armazena recibos como data URI base64 diretamente no documento do banco, causando growth descontrolado do DB.
---
## Resumo Quantitativo
| Severidade | Quantidade | Descricao |
|------------|------------|-----------|
| CRITICO | 15 | Server actions sem autenticacao nenhuma |
| ALTO | 12 | Autenticado mas sem verificacao de role/autorizacao |
| MEDIO | 5 | Autenticado e com role mas outros problemas |
| OK | 27 | Protegido corretamente com auth + autorizacao |
| **Total de funcoes auditadas** | **68** | |
---
## Plano de Correcao (Prioridade Decrescente)
1. **Renomear `src/proxy.js` para `src/middleware.js`** - Ativa a protecao de rotas por pagina
2. **Adicionar `auth()` + verificacao de role em TODAS as 15 server actions criticas** - Usar o padrao de `requireRole("admin")` ou `requireAuth()` do `authorization.js`
3. **Refazer `examActions.js`** - Todas as funcoes precisam de auth. Leitura de templates nao deve retornar `isCorrect`. Considerar consolidar com `examFlowActions.js` (que ja tem seguranca correta)
4. **Adicionar verificacao de propriedade em `/api/orders/[id]`**
5. **Proteger `/api/health`** com autenticacao admin ou remover dados sensiveis
6. **Remover `/api/debug-token`** em producao
7. **Remover headers de debug** do middleware
8. **Adicionar headers de seguranca** no `next.config.mjs`
9. **Sanitizar mensagens de erro** antes de enviar ao cliente
10. **Remover `console.log`** com dados sensiveis
11. **Reduzir `bodySizeLimit`** para algo mais razoavel (ex: 10MB)
12. **Adicionar verificacao de membership em GET lessons**
---
## Comparativo: examActions.js vs examFlowActions.js
`examFlowActions.js` demonstra **praticas de seguranca corretas** (auth + role + class membership checks em todas as 6 funcoes), enquanto `examActions.js` (21 funcoes) tem **quase nenhuma autenticacao ou autorizacao**. Sugere-se que `examFlowActions.js` foi escrito depois como substituicao mais segura, mas as funcoes inseguras em `examActions.js` nunca foram removidas ou protegidas.
+240
View File
@@ -0,0 +1,240 @@
# Manual do Administrador
## Visão Geral
O painel de administrador permite gerenciar todos os aspectos da plataforma de cursos, incluindo usuários, turmas, provas, pagamentos e arquivos.
## Acesso
- **URL**: `/admin/dashboard`
- **Role Necessária**: `admin`
---
## Funcionalidades
### 1. Dashboard Principal
**Rota**: `/admin/dashboard`
Página inicial com cards de navegação para todas as funcionalidades administrativas.
---
### 2. Gerenciamento de Tipos de Turma
**Rota**: `/admin/dashboard/classTypes`
#### Funcionalidades
- Criar novos tipos de turma (ex: "Starters", "Movers")
- Definir faixa etária
- Definir preço mensal
- Gerenciar arquivos por tipo de turma
#### Como Testar
1. Acesse `/admin/dashboard/classTypes`
2. Clique em "Novo Tipo de Turma"
3. Preencha nome, idade mínima, idade máxima e preço
4. Salve
5. **Esperado**: Tipo de turma aparece na lista
#### Campos
- `name`: Nome do tipo de turma
- `minAge`: Idade mínima
- `maxAge`: Idade máxima
- `price`: Preço mensal
---
### 3. Gerenciamento de Turmas
**Rota**: `/admin/dashboard/class`
#### Funcionalidades
- Criar novas turmas
- Atribuir professores
- Definir horário e dias da semana
- Ativar/desativar turmas
- Gerenciar alunos matriculados
- Upload de materiais
#### Como Testar
1. Acesse `/admin/dashboard/class`
2. Clique em "Nova Turma"
3. Selecione o tipo de turma
4. Adicione professores (multi-select)
5. Defina os dias da semana
6. Salve
7. **Esperado**: Turma criada e visível na lista
#### Campos
- `classType`: Tipo de turma (obrigatório)
- `teachers`: Professores (pode ter vários)
- `schedule`: Horário das aulas
- `days`: Dias da semana
- `active`: Status ativo/inativo
---
### 4. Gerenciamento de Usuários
**Rota**: `/admin/dashboard/users`
#### Funcionalidades
- Visualizar todos os usuários
- Editar informações de usuários
- Gerenciar roles (admin, teacher, student, parent)
- Vincular responsáveis a estudantes
- Excluir usuários
#### Como Testar
1. Acesse `/admin/dashboard/users`
2. Clique no ícone de editar em um usuário
3. Altere as roles marcando/desmarcando checkboxes
4. Para vincular responsável, selecione na lista
5. Salve
6. **Esperado**: Roles atualizadas, vínculos criados
#### Roles Disponíveis
- `admin`: Acesso completo ao painel administrativo
- `teacher`: Acesso a turmas atribuídas
- `student`: Acesso a turmas matriculadas
- `parent`: Acesso a dados dos filhos vinculados
---
### 5. Gerenciamento de Pagamentos
**Rotas**:
- `/admin/dashboard/payments` - Visão geral
- `/admin/dashboard/payments/by-class` - Por turma
#### Funcionalidades
- Criar obrigações de pagamento para alunos
- Aprovar/rejeitar pagamentos
- Visualizar comprovantes
- Estatísticas de pagamentos
#### Como Testar - Criar Obrigação
1. Acesse `/admin/dashboard/payments`
2. Clique em "Nova Obrigação"
3. Selecione o aluno
4. Digite o valor e data de vencimento
5. Salve
6. **Esperado**: Obrigação aparece na lista do aluno
#### Como Testar - Aprovar Pagamento
1. Na lista de pagamentos, encontre um pendente
2. Clique para ver detalhes
3. Visualize o comprovante
4. Clique em "Aprovar" ou "Rejeitar"
5. **Esperado**: Status atualizado
#### Status de Pagamento
- `pending`: Aguardando aprovação
- `verified`: Pagamento aprovado
- `rejected`: Pagamento rejeitado
---
### 6. Provas e Tarefas
**Rotas**:
- `/admin/dashboard/exams` - Gerenciar provas
- `/admin/dashboard/exam-templates` - Templates de prova
- `/admin/dashboard/assignments` - Atribuir provas a turmas
- `/admin/dashboard/statistics/exams` - Estatísticas
#### Funcionalidades
- Criar templates de provas reutilizáveis
- Adicionar perguntas (múltipla escolha, texto)
- Atribuir provas a turmas
- Definir data/hora de início e fim
- Configurar tentativas permitidas
- Ver resultados e estatísticas
#### Como Testar - Criar Template
1. Acesse `/admin/dashboard/exam-templates`
2. Clique em "Novo Template"
3. Digite título e descrição
4. Adicione perguntas:
- Pergunta de múltipla escolha: adicione opções e marque a correta
- Pergunta de texto: apenas o enunciado
5. Salve
6. **Esperado**: Template criado
#### Como Testar - Atribuir Prova
1. Acesse `/admin/dashboard/assignments`
2. Clique em "Nova Atribuição"
3. Selecione o template
4. Selecione a turma
5. Defina data/hora início e fim
6. Configure tentativas permitidas
7. Salve
8. **Esperado**: Prova aparece para os alunos da turma
---
### 7. Categorias de Arquivos
**Rota**: `/admin/dashboard/categories`
#### Funcionalidades
- Criar categorias para organizar arquivos
- Ex: "Material de Aula", "Lição de Casa", "Provas Antigas"
#### Como Testar
1. Acesse `/admin/dashboard/categories`
2. Clique em "Nova Categoria"
3. Digite o nome
4. Salve
5. **Esperado**: Categoria disponível ao fazer upload de arquivos
---
### 8. Gerenciamento de Arquivos
**Rotas**:
- `/admin/dashboard/files` - Lista de arquivos
- `/admin/dashboard/files/add` - Upload de arquivo
- `/admin/dashboard/files/[id]` - Editar arquivo
#### Funcionalidades
- Fazer upload de arquivos
- Associar a turmas ou tipos de turma
- Categorizar arquivos
- Gerenciar permissões
#### Como Testar
1. Acesse `/admin/dashboard/files/add`
2. Digite o nome do arquivo
3. Selecione o arquivo no computador
4. Selecione a categoria
5. Associe a uma turma ou tipo de turma (opcional)
6. Salve
7. **Esperado**: Arquivo disponível para download na turma
---
## Checklist de Testes
- [ ] Criar tipo de turma
- [ ] Criar turma com professores
- [ ] Criar usuário com role student
- [ ] Criar usuário com role teacher
- [ ] Vincular responsável a estudante
- [ ] Matricular estudante em turma
- [ ] Criar obrigação de pagamento
- [ ] Aprovar pagamento
- [ ] Criar template de prova
- [ ] Atribuir prova a turma
- [ ] Fazer upload de material para turma
---
## Possíveis Problemas
### Usuário não acessa o admin
- **Verifique**: O usuário tem a role `admin`?
- **Solução**: Edite o usuário em `/admin/dashboard/users`
### Turma não aparece para o professor
- **Verifique**: O professor está atribuído à turma?
- **Solução**: Edite a turma em `/admin/dashboard/class`
### Aluno não vê a prova
- **Verifique**: Data/hora da atribuição está correta?
- **Verifique**: Aluno está matriculado na turma?
- **Solução**: Verifique a atribuição em `/admin/dashboard/assignments`
+100
View File
@@ -0,0 +1,100 @@
# Teste Manual - Link da Aula (Professor, Estudante e Responsavel)
## Objetivo
Validar o fluxo completo de cadastro e visualizacao do campo **Link da Aula**:
- Professor registra aula com link
- Estudante visualiza e acessa o link no historico
- Responsavel visualiza e acessa o link no historico do estudante
## Pre-requisitos
- Aplicacao rodando localmente (ex: `http://localhost:3000`)
- 1 usuario com role `teacher`
- 1 usuario com role `student` matriculado na mesma turma do professor
- 1 usuario com role `guardian` vinculado ao estudante
- ID de turma valido (exemplo: `/dashboard/teacher/class/<classId>`)
- URL de teste para usar como link da aula (ex: `https://example.com/aula-01`)
## Cenário 1 - Professor registra aula com link
1. Fazer login como professor.
2. Acessar a turma: `/dashboard/teacher/class/<classId>`.
3. Clicar em **Registrar Aula**.
4. Preencher os campos obrigatorios:
- Data da aula
- Topico/Assunto
- Presenca (qualquer combinacao valida)
5. Preencher **Link da Aula** com URL valida (ex: `https://example.com/aula-01`).
6. Clicar em **Salvar**.
7. Acessar **Historico** da turma: `/dashboard/teacher/class/<classId>/history`.
### Resultado esperado
- Aula criada com sucesso.
- No card da aula no historico deve aparecer o botao/link **Abrir link da aula**.
- Ao clicar, o link abre em nova aba.
## Cenário 2 - Professor edita aula e atualiza/remove link
1. No historico da turma, abrir a aula registrada.
2. Editar a aula (fluxo de edicao ja existente).
3. Alterar o valor de **Link da Aula** para outra URL valida.
4. Salvar e validar no historico.
5. Editar novamente e limpar o campo **Link da Aula**.
6. Salvar.
### Resultado esperado
- Ao atualizar, o novo link passa a ser exibido no historico.
- Ao remover (campo vazio), o botao/link **Abrir link da aula** nao deve mais aparecer.
## Cenário 3 - Estudante visualiza link no historico
1. Fazer logout do professor e login como estudante da mesma turma.
2. Acessar: `/dashboard/student/class/<classId>/history`.
3. Localizar a aula registrada no Cenario 1.
4. Clicar em **Abrir link da aula**.
### Resultado esperado
- O link da aula aparece no card quando cadastrado pelo professor.
- O clique abre a URL em nova aba.
- Se o professor removeu o link (Cenario 2), o estudante nao deve ver o botao/link.
## Cenário 4 - Responsavel visualiza link no historico do estudante
1. Fazer logout do estudante e login como responsavel vinculado.
2. Acessar estudante e turma:
- `/dashboard/guardian/<studentId>/class/<classId>/history`
3. Localizar a aula registrada.
4. Clicar em **Abrir link da aula**.
### Resultado esperado
- O responsavel ve o mesmo link da aula registrado pelo professor.
- O clique abre a URL em nova aba.
- Se o link foi removido, o responsavel nao deve ver o botao/link.
## Cenário 5 - Validacao de URL invalida no formulario
1. Login como professor.
2. Abrir **Registrar Aula**.
3. Preencher `Link da Aula` com valor invalido (ex: `meu-link`).
4. Tentar salvar.
### Resultado esperado
- O navegador deve bloquear o envio por ser `type="url"` (ou indicar formato invalido).
- Aula nao deve ser salva ate corrigir para URL valida.
## Checklist rapido
- [ ] Professor consegue criar aula com link
- [ ] Link aparece no historico do professor
- [ ] Professor consegue atualizar link
- [ ] Professor consegue remover link
- [ ] Estudante visualiza link quando existir
- [ ] Responsavel visualiza link quando existir
- [ ] Link abre em nova aba para os 3 perfis
- [ ] URL invalida nao permite envio do formulario
+278
View File
@@ -0,0 +1,278 @@
# Manual do Responsável
## Visão Geral
O painel do responsável permite gerenciar os estudantes vinculados (filhos), acompanhar seu progresso, acessar materiais e gerenciar pagamentos.
## Acesso
- **URL**: `/dashboard/guardian`
- **Role Necessária**: `parent` ou `guardian`
---
## Funcionalidades
### 1. Dashboard Principal
**Rota**: `/dashboard/guardian`
Visão geral de todos os estudantes vinculados.
#### Informações Exibidas
- Número total de estudantes
- Turmas ativas
- Total de turmas
#### Lista de Estudantes
Cards com:
- Nome do estudante
- Nome de usuário
- Número de turmas
- Link para dashboard individual
#### Como Testar
1. Faça login como responsável
2. Acesse `/dashboard/guardian`
3. **Esperado**: Ver todos os estudantes vinculados
---
### 2. Dashboard Individual do Estudante
**Rota**: `/dashboard/guardian/[id]`
Página dedicada a um estudante específico.
#### Informações do Estudante
- Nome completo
- Nome de usuário
- Email
- Data de nascimento
#### Turmas Ativas
Cards das turmas em que o estudante está matriculado:
- Nome da turma
- Professores
- Horário
- Status
#### Turmas Arquivadas
Turmas inativas ou concluídas.
#### Como Testar
1. No dashboard principal, clique em um estudante
2. **Esperado**: Ver informações completas do estudante e suas turmas
---
### 3. Detalhes da Turma do Estudante
**Rota**: `/dashboard/guardian/[id]/class/[classId]`
Visão detalhada de uma turma específica do estudante.
#### Informações da Turma
- Nome
- Professores
- Horário e dias
- Status
#### Estatísticas do Estudante
- Taxa de presença (%)
- Total de aulas
- Presentes, atrasados, ausentes
#### Materiais Disponíveis
Arquivos organizados por categoria para download.
#### Como Testar - Acessar Turma
1. No dashboard do estudante, clique em uma turma
2. **Esperado**: Ver detalhes da turma e materiais
#### Como Testar - Baixar Material
1. Na seção "Materiais", clique em um arquivo
2. **Esperado**: Download iniciado
---
### 4. Histórico de Aulas
**Rota**: `/dashboard/guardian/[id]/class/[classId]/history`
Histórico de presença do estudante em uma turma.
#### Informações por Aula
- Data
- Conteúdo/tema
- Professor
- Status de presença do estudante
#### Status de Presença
- `Presente`: Estudante presente
- `Atrasado`: Estudante chegou atrasado
- `Ausente`: Estudante faltou
- `Justificado`: Falta justificada
#### Como Testar
1. Acesse uma turma do estudante
2. Clique em "Histórico"
3. **Esperado**: Ver todas as aulas com presença do estudante
---
### 5. Registrar Novo Estudante
**Rota**: `/dashboard/guardian/register-student`
Formulário para cadastrar um novo estudante vinculado ao responsável.
#### Campos Obrigatórios
- Nome completo
- Nome de usuário
- Data de nascimento
- Senha
#### Regras
- Estudante deve ter menos de 18 anos
- Senha deve ter no mínimo 8 caracteres
- Estudante é automaticamente vinculado ao responsável
#### Como Testar
1. Acesse `/dashboard/guardian`
2. Clique em "Registrar Novo Estudante"
3. Preencha todos os campos
4. Clique em "Registrar"
5. **Esperado**: Estudante criado e vinculado automaticamente
---
### 6. Gerenciamento de Pagamentos
**Rota**: `/dashboard/guardian/payments`
Gerenciar pagamentos de todos os estudantes vinculados.
#### Funcionalidades
- Ver obrigações de todos os estudantes
- Filtrar por estudante específico
- Registrar pagamentos
- Fazer upload de comprovantes
- Ver histórico completo
- Visualizar comprovantes
#### Como Testar - Registrar Pagamento
1. Acesse `/dashboard/guardian/payments`
2. Na seção "Obrigações", encontre uma pendente
3. Clique para registrar pagamento
4. Preencha:
- Valor (preenchido automaticamente da obrigação)
- Data do pagamento
- Método (PIX, transferência, dinheiro, cartão)
- Nome do pagador (opcional)
- Upload de comprovante (opcional)
- Observações (opcional)
5. Salve
6. **Esperado**: Pagamento registrado com status "pendente"
#### Abas de Navegação
- **Todos**: Ver pagamentos de todos os estudantes
- **Por Estudante**: Filtrar por estudante específico
#### Status de Pagamento
- `pending`: Aguardando aprovação
- `verified`: Pagamento aprovado
- `rejected`: Pagamento rejeitado
#### Métodos de Pagamento
- `pix`: PIX
- `transferência`: Transferência bancária
- `dinheiro`: Dinheiro
- `cartão_crédito`: Cartão de crédito
- `cartão_débito`: Cartão de débito
---
### 7. Registro de Pagamento Específico
**Rota**: `/dashboard/guardian/payments/register`
Formulário para registrar um pagamento a partir de uma obrigação específica.
#### Diferença para a Página Principal
- Campo de valor já vem preenchido
- Estudante e turma já estão selecionados
- Fluxo mais rápido para pagamentos individuais
#### Como Testar
1. A partir de uma obrigação, clique em registrar
2. Preencha os campos restantes
3. Salve
4. **Esperado**: Pagamento registrado
---
## Fluxo de Uso Típico
### Acompanhamento Diário
1. Acesse `/dashboard/guardian`
2. Clique em um estudante
3. Verifique as turmas e atividades recentes
### Acompanhamento de Pagamentos
1. Acesse `/dashboard/guardian/payments`
2. Verifique obrigações pendentes
3. Registre os pagamentos feitos
4. Aguarde aprovação
### Acompanhamento Acadêmico
1. Acesse um estudante
2. Entre em uma turma
3. Baixe os materiais para acompanhar
4. Verifique o histórico de presença
---
## Checklist de Testes
- [ ] Ver lista de estudantes vinculados
- [ ] Acessar dashboard de um estudante
- [ ] Ver turmas de um estudante
- [ ] Acessar detalhes de uma turma
- [ ] Baixar material da turma
- [ ] Ver histórico de presença
- [ ] Registrar novo estudante
- [ ] Registrar pagamento para um estudante
- [ ] Ver histórico de pagamentos
---
## Possíveis Problemas
### Não vejo um estudante
- **Verifique**: O estudante está vinculado à sua conta?
- **Solução**: Entre em contato com o admin
### Não consigo registrar estudante
- **Verifique**: A data de nascimento indica menor de 18 anos?
- **Solução**: Estudantes maiores de idade devem se cadastrar sozinhos
### Pagamento não é aprovado
- **Verifique**: O comprovante foi anexado corretamente?
- **Solução**: Entre em contato com o admin
### Não vejo todas as turmas do estudante
- **Possível causa**: Algumas turmas podem estar arquivadas
- **Solução**: Verifique na seção "Turmas Arquivadas"
---
## Relação Responsável-Estudante
### Como Funciona o Vínculo
- Estudantes têm um campo `guardiansAccounts` com IDs dos responsáveis
- Responsáveis têm um campo `wardAccounts` com IDs dos estudantes
- A relação é bidirecional
### Criando Vínculo (Admin)
1. Acesse `/admin/dashboard/users`
2. Edite o estudante
3. Selecione o responsável na lista
4. Salve
### Criando Vínculo (Auto-registro)
- Ao registrar um estudante pelo dashboard do responsável, o vínculo é automático
- Isso só funciona para menores de 18 anos
+248
View File
@@ -0,0 +1,248 @@
# Manual do Estudante
## Visão Geral
O painel do estudante permite visualizar turmas, acessar materiais, fazer provas, registrar presença e gerenciar pagamentos.
## Acesso
- **URL**: `/dashboard/student`
- **Role Necessária**: `student`
---
## Funcionalidades
### 1. Dashboard Principal
**Rota**: `/dashboard/student`
Lista de todas as turmas matriculadas com cards mostrando:
- Nome da turma
- Professores
- Horário
- Status
#### Como Testar
1. Faça login como estudante
2. Acesse `/dashboard/student`
3. **Esperado**: Ver todas as turmas matriculadas
---
### 2. Detalhes da Turma
**Rota**: `/dashboard/student/class/[id]`
Página principal de uma turma específica.
#### Informações Exibidas
- Nome da turma
- Professores
- Horário e dias
- Status
#### Estatísticas
- Taxa de presença (%)
- Total de aulas
- Presentes, atrasados, ausentes
#### Materiais Disponíveis
Arquivos organizados por categoria com opção de download.
#### Provas Disponíveis
Lista de provas para fazer com:
- Data limite
- Tempo disponível
- Botão para iniciar
#### Feed de Atividades Recentes
Mostra as últimas atividades da turma.
#### Como Testar - Acessar Turma
1. No dashboard, clique em uma turma
2. **Esperado**: Ver detalhes completos da turma
#### Como Testar - Baixar Material
1. Acesse uma turma
2. Na seção "Materiais", clique em um arquivo
3. **Esperado**: Download do arquivo iniciado
---
### 3. Histórico da Turma
**Rota**: `/dashboard/student/class/[id]/history`
Lista de todas as aulas com:
- Data
- Conteúdo/tema
- Professor
- Status de presença do aluno
#### Status de Presença
- `Presente`: Aluno presente
- `Atrasado`: Aluno chegou atrasado
- `Ausente`: Aluno faltou
- `Justificado`: Falta justificada
#### Como Testar
1. Acesse uma turma
2. Clique em "Histórico"
3. **Esperado**: Ver todas as aulas com sua presença
---
### 4. Fazendo Provas
**Rota**: `/dashboard/student/assignments/[id]/take`
Interface para fazer provas online.
#### Funcionalidades
- Timer com contagem regressiva
- Perguntas de múltipla escolha e texto
- Barra de progresso
- Salvar automaticamente
- Entender automaticamente ao acabar o tempo
#### Como Testar
1. Acesse uma turma
2. Na seção "Provas Disponíveis", clique em "Iniciar"
3. Responda às perguntas
4. Clique em "Entregar" ou aguarde o tempo acabar
5. **Esperado**: Prova entregue, redirecionado para resultados
#### Importante
- O timer não para se você sair da página
- Após o tempo acabar, a prova é entregue automaticamente
- Você pode ver suas respostas antes de entregar
---
### 5. Resultados de Provas
**Rota**: `/dashboard/student/assignments/[id]/results`
Ver resultados das provas feitas.
#### Informações Exibidas
- Nota final
- Tempo gasto
- Tentativas anteriores
- Feedback por pergunta (se disponível)
- Opção de tentar novamente (se permitido)
#### Como Testar
1. Após fazer uma prova, você será redirecionado para resultados
2. Ou acesse através da turma > Provas
3. **Esperado**: Ver nota, respostas e feedback
---
### 6. Pagamentos
**Rota**: `/dashboard/student/payments`
Gerenciar obrigações de pagamento e histórico.
#### Funcionalidades
- Ver obrigações pendentes
- Registrar novos pagamentos
- Ver histórico de pagamentos
- Fazer upload de comprovantes
- Ver status (pendente, aprovado, rejeitado)
#### Como Testar - Registrar Pagamento
1. Acesse `/dashboard/student/payments`
2. Na seção "Obrigações", clique em uma pendente
3. Preencha:
- Data do pagamento
- Método (PIX, transferência, dinheiro, cartão)
- Nome do pagador (opcional)
- Upload de comprovante (opcional)
4. Salve
5. **Esperado**: Pagamento registrado com status "pendente"
#### Métodos de Pagamento
- `pix`: PIX
- `transferência`: Transferência bancária
- `dinheiro`: Dinheiro
- `cartão_crédito`: Cartão de crédito
- `cartão_débito`: Cartão de débito
#### Status
- `pending`: Aguardando aprovação
- `verified`: Pagamento aprovado
- `rejected`: Pagamento rejeitado
---
### 7. Perfil
**Rota**: `/profile`
Editar informações pessoais.
#### Informações Editáveis
- Nome completo
- Nome de usuário
- Email
- Data de nascimento
#### Informações Somente Leitura
- Roles (funções)
- Responsáveis (se menor de idade)
- Estudantes sob responsabilidade (se responsável)
#### Como Testar
1. Acesse `/profile`
2. Altere qualquer campo permitido
3. Clique em "Salvar Alterações"
4. **Esperado**: Dados atualizados, mensagem de sucesso
#### Restrições para Menores de Idade
- Estudantes menores de 18 não podem remover responsáveis existentes
- Podem apenas ver quais responsáveis estão vinculados
---
## Fluxo de Uso Típico
### Dia a Dia
1. **Antes da aula**: Acesse a turma e baixe o material
2. **Durante o curso**: Faça as provas disponíveis antes da data limite
3. **Após provas**: Acompanhe seus resultados
### Mensalmente
1. Acesse `/dashboard/student/payments`
2. Verifique obrigações pendentes
3. Registre os pagamentos feitos
4. Aguarde aprovação
---
## Checklist de Testes
- [ ] Ver lista de turmas matriculadas
- [ ] Acessar detalhes de uma turma
- [ ] Baixar material da turma
- [ ] Ver histórico de presença
- [ ] Fazer uma prova
- [ ] Ver resultados de prova
- [ ] Registrar um pagamento
- [ ] Editar perfil
---
## Possíveis Problemas
### Não vejo uma turma
- **Verifique**: Você está matriculado nessa turma?
- **Solução**: Entre em contato com o admin
### Prova não aparece
- **Verifique**: A data/hora da prova está dentro do período?
- **Verifique**: Você já tentou o número máximo de vezes?
- **Solução**: Verifique com o professor
### Pagamento não é aprovado
- **Verifique**: O comprovante foi anexado corretamente?
- **Solução**: Entre em contato com o admin
### Não consigo editar responsável
- **Possível causa**: Você tem 18 anos ou mais
- **Solução**: Adultos não podem ter novos responsáveis, apenas remover existentes
+187
View File
@@ -0,0 +1,187 @@
# Manual do Professor
## Visão Geral
O painel do professor permite gerenciar turmas, fazer upload de materiais, registrar presença e criar/corrigir provas.
## Acesso
- **URL**: `/dashboard/teacher`
- **Role Necessária**: `teacher`
---
## Funcionalidades
### 1. Dashboard Principal
**Rota**: `/dashboard/teacher`
Lista de todas as turmas atribuídas ao professor com cards mostrando:
- Nome da turma
- Número de alunos
- Horário
#### Como Testar
1. Faça login como professor
2. Acesse `/dashboard/teacher`
3. **Esperado**: Ver todas as turmas atribuídas
---
### 2. Detalhes da Turma
**Rota**: `/dashboard/teacher/class/[id]`
Página principal de gerenciamento de uma turma específica.
#### Informações Exibidas
- Nome da turma
- Professores atribuídos
- Horário e dias
- Status (ativo/inativo)
- Estatísticas: número de alunos, taxa de presença, média das notas
#### Lista de Alunos
Tabela com:
- Nome do aluno
- Taxa de presença
- Média das provas
- Status
#### Ações Disponíveis
- **Upload de Materiais**: Adicionar arquivos para a turma
- **Registrar Aula**: Registrar presença e conteúdo da aula
- **Ver Histórico**: Ver todas as aulas anteriores
- **Copiar Link**: Copiar link da aula virtual
#### Como Testar - Upload de Material
1. Acesse uma turma
2. Clique em "Upload de Materiais"
3. Digite o nome do arquivo
4. Selecione o arquivo no computador
5. Selecione a categoria
6. Salve
7. **Esperado**: Arquivo aparece na seção de materiais
#### Como Testar - Registrar Aula
1. Acesse uma turma
2. Clique em "Registrar Aula"
3. Digite o tema/conteúdo da aula
4. Selecione a data
5. Marque a presença dos alunos (Presente, Atrasado, Ausente, Justificado)
6. Salve
7. **Esperado**: Aula registrada no histórico
---
### 3. Histórico da Turma
**Rota**: `/dashboard/teacher/class/[id]/history`
Lista de todas as aulas registradas com:
- Data da aula
- Conteúdo/tema
- Professor que registrou
- Resumo de presença
#### Como Testar
1. Acesse uma turma
2. Clique em "Ver Histórico"
3. **Esperado**: Ver todas as aulas com presença registrada
---
### 4. Templates de Provas
**Rota**: `/dashboard/teacher/exam-templates`
Gerenciar templates de provas reutilizáveis.
#### Funcionalidades
- Criar novo template
- Editar templates existentes
- Adicionar perguntas (múltipla escolha ou texto)
- Definir como público ou privado
#### Como Testar - Criar Template
1. Acesse `/dashboard/teacher/exam-templates`
2. Clique em "Novo Template"
3. Digite título e descrição
4. Clique em "Adicionar Pergunta"
5. Selecione o tipo:
- **Múltipla Escolha**: Digite a pergunta, adicione opções, marque a correta
- **Texto**: Digite apenas a pergunta
6. Salve
7. **Esperado**: Template criado e disponível para atribuir
---
### 5. Resultados de Provas
**Rota**: `/dashboard/teacher/assignments/[id]/results`
Ver e corrigir provas dos alunos.
#### Funcionalidades
- Ver tentativas dos alunos
- Corrigir provas manualmente
- Ver notas automáticas (para múltipla escolha)
- Acompanhar status de correção
#### Status de Correção
- `pending`: Aguardando correção
- `auto-graded`: Corrigido automaticamente
- `partially-graded`: Parcialmente corrigido
- `fully-graded`: Totalmente corrigido
#### Como Testar
1. Acesse os resultados de uma atribuição
2. Clique em uma tentativa de aluno
3. Para perguntas de texto, digite a nota e comentários
4. Salve
5. **Esperado**: Nota atribuída, status atualizado
---
## Fluxo de Trabalho Típico
### Preparar uma Turma
1. Acesse a turma
2. Faça upload dos materiais da primeira aula
3. Verifique a lista de alunos
### Durante o Curso
1. **Antes de cada aula**: Faça upload do material
2. **Após cada aula**: Registre a presença e o conteúdo
3. **Periodicamente**: Crie e atribua provas
### Criar uma Prova
1. Crie o template em `/dashboard/teacher/exam-templates`
2. Atribua à turma (isso pode precisar de intervenção do admin)
3. Acompanhe os resultados em `/dashboard/teacher/assignments/[id]/results`
---
## Checklist de Testes
- [ ] Ver lista de turmas atribuídas
- [ ] Acessar detalhes de uma turma
- [ ] Fazer upload de material
- [ ] Registrar uma aula com presença
- [ ] Ver histórico de aulas
- [ ] Criar template de prova
- [ ] Ver resultados de prova
- [ ] Corrigir prova manualmente
---
## Possíveis Problemas
### Não consigo ver uma turma
- **Verifique**: Você está atribuído a essa turma?
- **Solução**: Entre em contato com o admin
### Não consigo atribuir prova à turma
- **Possível causa**: Essa funcionalidade pode estar apenas no admin
- **Solução**: Peça ao admin para atribuir a prova
### Material não aparece para os alunos
- **Verifique**: O upload foi concluído com sucesso?
- **Verifique**: A turma está correta?
- **Solução**: Tente fazer upload novamente