verifierProprietaire($classe); return view('devoirs.index', ['classe' => $classe, 'devoirs' => $classe->devoirs()->withCount('rendus')->get()]); } public function store(Request $request, Classe $classe): RedirectResponse { $this->verifierProprietaire($classe); $donnees = $request->validate([ 'titre' => ['required', 'string', 'max:150'], 'consigne' => ['required', 'string', 'max:5000'], 'echeance' => ['required', 'date', 'after:now'], ]); $devoir = $classe->devoirs()->create($donnees); return redirect()->route('mes-classes.devoirs.show', [$classe, $devoir]); } public function show(Classe $classe, Devoir $devoir): View { $this->verifierProprietaire($classe); $this->verifierAppartenance($classe, $devoir); $rendus = $devoir->rendus()->with('eleve')->get()->keyBy('eleve_id'); return view('devoirs.show', [ 'classe' => $classe, 'devoir' => $devoir, 'eleves' => $classe->eleves, 'rendus' => $rendus, ]); } public function noter(Request $request, Classe $classe, Devoir $devoir, RenduDevoir $rendu): RedirectResponse { $this->verifierProprietaire($classe); $this->verifierAppartenance($classe, $devoir); abort_if($rendu->devoir_id !== $devoir->id, 404); $donnees = $request->validate(['note' => ['required', 'integer', 'min:0', 'max:20']]); $rendu->update($donnees); return redirect()->route('mes-classes.devoirs.show', [$classe, $devoir]); } public function destroy(Classe $classe, Devoir $devoir): RedirectResponse { $this->verifierProprietaire($classe); $this->verifierAppartenance($classe, $devoir); $devoir->delete(); return redirect()->route('mes-classes.devoirs.index', $classe); } private function verifierProprietaire(Classe $classe): void { abort_if($classe->user_id !== Auth::guard('web')->id(), 403); } private function verifierAppartenance(Classe $classe, Devoir $devoir): void { abort_if($devoir->classe_id !== $classe->id, 404); } }