validated(); [$start, $end] = $this->service->getSchoolYearRange($payload['school_year']); return response()->json([ 'ok' => true, 'school_year' => $payload['school_year'], 'range' => new SemesterRangeResource([ 'start_date' => $start, 'end_date' => $end, ]), ]); } public function semesterRange(SemesterRangeRequest $request): JsonResponse { $payload = $request->validated(); $range = $this->service->getSemesterRange($payload['school_year'], $payload['semester']); if ($range === null) { return response()->json(['ok' => false, 'message' => 'Invalid semester range.'], 422); } return response()->json([ 'ok' => true, 'school_year' => $payload['school_year'], 'semester' => $this->service->normalizeSemester($payload['semester']), 'range' => new SemesterRangeResource([ 'start_date' => $range[0], 'end_date' => $range[1], ]), ]); } public function normalize(SemesterNormalizeRequest $request): JsonResponse { $payload = $request->validated(); return response()->json([ 'ok' => true, 'normalized' => $this->service->normalizeSemester($payload['semester']), ]); } public function resolve(SemesterResolveRequest $request): JsonResponse { $payload = $request->validated(); $semester = $this->service->getSemesterForDate($payload['date'] ?? null); return response()->json([ 'ok' => true, 'resolution' => new SemesterResolveResource([ 'date' => $payload['date'] ?? null, 'semester' => $semester, ]), ]); } }