Files
alrahma_sunday_school_api/app/Http/Controllers/Api/System/SemesterRangeController.php
T
2026-04-23 00:04:35 -04:00

81 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api\System;
use App\Http\Controllers\Api\Core\BaseApiController;
use App\Http\Requests\Semesters\SchoolYearRangeRequest;
use App\Http\Requests\Semesters\SemesterNormalizeRequest;
use App\Http\Requests\Semesters\SemesterRangeRequest;
use App\Http\Requests\Semesters\SemesterResolveRequest;
use App\Http\Resources\Semesters\SemesterRangeResource;
use App\Http\Resources\Semesters\SemesterResolveResource;
use App\Services\SemesterRangeService;
use Illuminate\Http\JsonResponse;
class SemesterRangeController extends BaseApiController
{
public function __construct(private SemesterRangeService $service)
{
parent::__construct();
}
public function schoolYearRange(SchoolYearRangeRequest $request): JsonResponse
{
$payload = $request->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,
]),
]);
}
}