--- name: Edição de Aulas e Conflitos description: Problemas resolvidos na edição de aulas pela dashboard — validação do Model, conflitos, verificação de sala/capacidade type: project originSessionId: f66a0c91-ebe6-4409-a5d7-0f325b097340 --- ## Edição de Aulas - Problemas Resolvidos (2026-04-14) ### Update parcial falhava silenciosamente - `AulaModel` tem `validationRules` com campos `required` (matricula_id, professor_id, sala_id, status, etc.) - Ao fazer update parcial (ex: só mudar `data_aula`), a validação rejeitava porque os outros campos required não estavam no array - `$this->aulaModel->update()` retornava `true` mesmo sem salvar nada - **Solução**: usar `$this->db->table('aulas')->where('id', $id)->update($dados)` direto, sem passar pelo Model ### CI4 Model corrompe estado entre queries - `$this->aulaModel->first()` na verificação de conflito corrompia o builder para queries seguintes - Causava erro `Trying to access array offset on value of type null` - **Solução**: todas as verificações de conflito usam `$db->table('aulas')` direto ### Conflito de professor — aula em grupo - Professor pode dar aula para múltiplos alunos na **mesma sala** (aula em grupo) - Conflito de professor só é detectado se for em **sala diferente** - Conflito de sala respeita a **capacidade** da sala (`salas.capacidade`) ### Comparação de horários - Form envia `09:00`, banco tem `09:00:00` — comparação estrita (`!==`) sempre dava diferente - **Solução**: comparar com `substr($aula['horario_inicio'], 0, 5)` - Professor e sala: usar comparação frouxa (`!=`) pois podem ser int vs string ### Aula movida para outra semana - Quando move aula para fora da semana visível, desaparece do calendário - Usuário achava que não funcionou e salvava novamente com dados originais - **Solução**: mensagem azul avisando "A aula foi movida para DD/MM/YYYY (fora da semana atual)" **Why:** Esses bugs são sutis e podem voltar se alguém usar `$this->aulaModel->update()` novamente. **How to apply:** Sempre usar `$this->db->table('aulas')` para updates parciais e verificações de conflito no AulaController.