Feature/2 gestao disciplinas
O que foi feito
Implementação completa das histórias de Gestão de Disciplinas e Vínculo Monitor-Disciplina, cobrindo 13 SP.
Mudanças no banco
- Adicionado model
Disciplinacom soft delete via campoativa - Adicionado model
MonitorDisciplinacom enumStatusMonitoria(ATIVO/INATIVO) - Constraint
@@unique([monitor_id, disciplina_id])para evitar vínculo duplicado - Rodado
prisma db push+prisma generatepara sincronizar
Novas rotas
| Método | Rota | Acesso |
|---|---|---|
| POST | /api/disciplinas |
GESTOR |
| GET | /api/disciplinas |
Autenticado |
| GET | /api/disciplinas/:id |
Autenticado |
| PUT | /api/disciplinas/:id |
GESTOR |
| DELETE | /api/disciplinas/:id |
GESTOR |
| POST | /api/monitoria/vincular |
PROFESSOR |
| DELETE | /api/monitoria/desvincular/:disciplina_id/:monitor_id |
PROFESSOR |
| GET | /api/monitoria/disciplina/:id |
Autenticado |
| GET | /api/monitoria/monitor/:id |
Autenticado |
Regras de negócio atendidas
- RN-009 — só o professor orientador da disciplina pode vincular/desvincular monitores
- RN-010 — monitor pode estar vinculado a mais de uma disciplina simultaneamente
-
RN-011 — desvínculo muda status para
INATIVO, histórico preservado no banco
Testes realizados (Postman)
-
✅ Criar disciplina com GESTOR → 201 -
✅ Listar disciplinas → 200 -
✅ Buscar por ID com monitores expandidos → 200 -
✅ Atualizar descrição → 200 -
✅ Tentativa de criar com perfil ALUNO → 403 -
✅ Código de disciplina duplicado → 409 -
✅ Professor vincula aluno como monitor → 201 -
✅ Tentativa de vínculo duplicado → 409 -
✅ Professor sem ownership da disciplina → 403 -
✅ Desvincular monitor → 200, registro mantido como INATIVO
Closes #2 (closed)