--- name: Avaliações de Professor description: Sistema de avaliação por estrelas + comentário do aluno → admin type: project originSessionId: 9f56349d-73d5-48f7-b7da-f744b427bde6 --- Implementado em 2026-04-28. Aluno avalia o professor pelo app; admin vê tudo agregado na ficha. **Tabela:** `avaliacoes_professor` (migration `2026-04-28-110000_CreateAvaliacoesProfessor.php`) - aluno_id, professor_id, matricula_id (nullable), estrelas (1–5, CHECK), comentario, timestamps - Índices em professor_id, aluno_id, estrelas **Model:** `AvaliacaoProfessorModel` - `resumoProfessor(id)` → total, media, distribuicao 1–5 - `listarProfessor(id, limite)` → últimas avaliações com nome do aluno - `mediasPorProfessores(ids)` → batch para a listagem do painel **API aluno (filter apiauth):** - `POST /api/aluno/avaliacoes` body: `{professor_id, matricula_id?, estrelas, comentario}` — valida se aluno tem matrícula com aquele professor - `GET /api/aluno/avaliacoes/minhas` **API painel (auth direcao):** - `GET /direcao/api/professor/avaliacoes/{id}` em `ProfessorController::apiAvaliacoesProfessor` **Painel:** - `ProfessorController::index()` injeta `avaliacao_media` e `avaliacao_total` em cada card via `mediasPorProfessores` - View `direcao/professores.php`: mostra estrelas no card + botão "ver" abre modal com resumo (média grande, distribuição em barras) e lista de comentários - Botão também na barra de ações do card (ícone fa-star) **App aluno:** - `screens/avaliar_professor_screen.dart` — recebe `Matricula`, mostra header com gradient, 5 estrelas tocáveis, legenda dinâmica, textarea com 1000 chars - Atalho na home (cartão "Avaliar professor" — desabilitado se não houver matrícula ativa) **How to apply:** o admin não precisa interagir — só visualizar. Avaliações são livres e anônimas para o professor (apenas direção vê). Não foi imposto unique por aluno+professor — aluno pode reavaliar quando quiser; média recalcula naturalmente.