id() ?? 0); if ($teacherId <= 0) { return response()->json(['ok' => false, 'message' => 'Unauthorized.'], 401); } $data = $this->teacherService->listForTeacher($teacherId); return response()->json([ 'ok' => true, 'assignments' => $data['assignments'], 'drafts' => ExamDraftResource::collection($data['drafts']), 'legacy_exams' => ExamDraftResource::collection($data['legacyExams']), 'exam_types' => $data['examTypes'], 'status_options' => $data['statusOptions'], 'school_year' => $data['schoolYear'], 'semester' => $data['semester'], ]); } public function teacherStore(ExamDraftTeacherStoreRequest $request): JsonResponse { $teacherId = (int) (auth()->id() ?? 0); if ($teacherId <= 0) { return response()->json(['ok' => false, 'message' => 'Unauthorized.'], 401); } $result = $this->teacherService->store($teacherId, $request->validated(), $request->file('draft_file')); if (!$result['ok']) { return response()->json(['ok' => false, 'message' => $result['message'] ?? 'Unable to save.'], 422); } return response()->json([ 'ok' => true, 'draft' => new ExamDraftResource($result['draft']), ], 201); } public function adminIndex(): JsonResponse { $data = $this->adminService->list(); return response()->json([ 'ok' => true, 'drafts' => ExamDraftResource::collection($data['drafts']), 'class_sections' => $data['classSections'], 'legacy_by_class' => $data['legacyByClass'], 'exam_types' => $data['examTypes'], 'status_options' => $data['statusOptions'], 'school_year' => $data['schoolYear'], 'semester' => $data['semester'], 'allowed_extensions' => $data['allowedExtensions'], 'max_upload_bytes' => $data['maxUploadBytes'], ]); } public function adminUploadLegacy(ExamDraftAdminLegacyRequest $request): JsonResponse { $adminId = (int) (auth()->id() ?? 0); if ($adminId <= 0) { return response()->json(['ok' => false, 'message' => 'Unauthorized.'], 401); } $result = $this->adminService->uploadLegacy($adminId, $request->validated(), $request->file('old_exam_file')); if (!$result['ok']) { return response()->json(['ok' => false, 'message' => $result['message'] ?? 'Unable to save.'], 422); } return response()->json([ 'ok' => true, 'draft' => new ExamDraftResource($result['draft']), ], 201); } public function adminReview(ExamDraftAdminReviewRequest $request): JsonResponse { $adminId = (int) (auth()->id() ?? 0); if ($adminId <= 0) { return response()->json(['ok' => false, 'message' => 'Unauthorized.'], 401); } $result = $this->adminService->review($adminId, $request->validated(), $request->file('final_file')); if (!$result['ok']) { return response()->json(['ok' => false, 'message' => $result['message'] ?? 'Unable to save.'], 422); } return response()->json([ 'ok' => true, 'draft' => new ExamDraftResource($result['draft']), ]); } }