// ==================== GRADE LEVEL ROUTES ==================== /** * List all subjects for a grade level * * @param GradeLevel $gradeLevel * @return JsonResponse */ public function indexSubjects(GradeLevel $gradeLevel): JsonResponse { $subjects = $this->service->getSubjectsForGradeLevel($gradeLevel); return response()->json($subjects); } /** * Attach a subject to a grade level * * @param GradeLevel $gradeLevel * @param Request $request * @return JsonResponse */ public function attachSubject(GradeLevel $gradeLevel, Request $request): JsonResponse { $validated = $request->validate([ 'subject_id' => 'required|uuid|exists:subject,id', ]); $this->service->attachSubject($gradeLevel, $validated['subject_id']); return response()->json( [ 'message' => 'Subject attached successfully', 'grade_level_id' => $gradeLevel->id, 'subject_id' => $validated['subject_id'], ], 201 ); } /** * Detach a subject from a grade level * * @param GradeLevel $gradeLevel * @param string $subjectId * @return JsonResponse */ public function detachSubject(GradeLevel $gradeLevel, string $subjectId): JsonResponse { $this->service->detachSubject($gradeLevel, $subjectId); return response()->json( [ 'message' => 'Subject detached successfully', 'grade_level_id' => $gradeLevel->id, 'subject_id' => $subjectId, ] ); } /** * Attach multiple subjects at once * * @param GradeLevel $gradeLevel * @param Request $request * @return JsonResponse */ public function attachMultipleSubjects(GradeLevel $gradeLevel, Request $request): JsonResponse { $validated = $request->validate([ 'subject_ids' => 'required|array|min:1', 'subject_ids.*' => 'required|uuid|exists:subject,id', ]); $attached = $this->service->attachMultipleSubjects($gradeLevel, $validated['subject_ids']); return response()->json( [ 'message' => 'Subjects attached successfully', 'grade_level_id' => $gradeLevel->id, 'attached_count' => count($attached), 'subject_ids' => $attached, ], 201 ); } /** * Sync subjects (replace all with new list) * * @param GradeLevel $gradeLevel * @param Request $request * @return JsonResponse */ public function syncSubjects(GradeLevel $gradeLevel, Request $request): JsonResponse { $validated = $request->validate([ 'subject_ids' => 'required|array', 'subject_ids.*' => 'required|uuid|exists:subject,id', ]); $result = $this->service->syncSubjects($gradeLevel, $validated['subject_ids']); return response()->json( [ 'message' => 'Subjects synced successfully', 'grade_level_id' => $gradeLevel->id, 'attached' => $result['attached'], 'detached' => $result['detached'], 'updated' => $result['updated'], ] ); } }