user()->load('classe'); $fil = $eleve->filConversation; if ($fil && $request->boolean('lu')) { $fil->update(['lu_par_eleve_a' => now()]); } return response()->json([ 'actif' => $eleve->classe->chat_actif, 'non_lus' => $fil ? $fil->nonLusPourEleve() : 0, 'messages' => $fil ? $fil->messages->map(fn (MessageChat $m) => [ 'id' => $m->id, 'expediteur' => $m->expediteur, 'contenu' => $m->contenu, 'envoye_a' => $m->created_at->toIso8601String(), ]) : [], ]); } public function envoyer(Request $request): JsonResponse { $eleve = Auth::guard('eleve')->user()->load('classe'); abort_unless($eleve->classe->chat_actif, 403, 'Le chat est désactivé pour ta classe.'); $donnees = $request->validate(['contenu' => ['required', 'string', 'max:2000']]); $fil = FilConversation::firstOrCreate( ['eleve_id' => $eleve->id], ['classe_id' => $eleve->classe_id], ); // Pas de mise à jour de lu_par_eleve_a ici : nonLusPourEleve() ne // compte que les messages du prof, jamais les siens. $message = $fil->messages()->create([ 'expediteur' => MessageChat::ELEVE, 'contenu' => $donnees['contenu'], ]); return response()->json(['id' => $message->id], 201); } }