abortUnlessLecturerOwnsAssignment($assignment); $assignment->load(['courseClass.course', 'courseClass.lecturer.user.profile', 'courseClass.academicTerm']); return Inertia::render('admin/academic-classes/assignments/submissions', [ 'assignment' => $assignment, 'submissions' => $this->service->forAssignment($assignment), ]); } public function grade(GradeSubmissionRequest $request, Assignment $assignment, Submission $submission): RedirectResponse { $this->service->grade($submission, $request->validated('score')); return Inertia::flash('toast', ['type' => 'success', 'message' => 'Nilai berhasil disimpan.'])->back(); } public function submit(SubmitAssignmentRequest $request, Assignment $assignment): RedirectResponse { $this->service->submitForStudent($assignment, $request->user()->student, $request->validated(), $request->file('file')); Inertia::flash('toast', ['type' => 'success', 'message' => 'Tugas berhasil dikumpulkan.']); return to_route('admin.academic-classes.assignments.index'); } /** * A dosen may only manage submissions for classes they lecture. */ private function abortUnlessLecturerOwnsAssignment(Assignment $assignment): void { $user = request()->user(); abort_if( $user->hasRole('dosen') && $assignment->courseClass?->lecturer_id !== $user->lecturer?->id, 403, ); } }