Files
alrahma_sunday_school_api/app/Http/Controllers/Api/SchoolYears/SchoolYearController.php
T
root 90f9857b06
API CI/CD / Validate (composer + pint) (push) Successful in 3m7s
API CI/CD / Test (PHPUnit) (push) Failing after 5m46s
API CI/CD / Build frontend assets (push) Successful in 1m2s
API CI/CD / Security audit (push) Failing after 49s
API CI/CD / Deploy to shared hosting (PHP) (push) Has been skipped
security fix and fix parent pages
2026-07-06 02:14:16 -04:00

143 lines
4.5 KiB
PHP

<?php
namespace App\Http\Controllers\Api\SchoolYears;
use App\Http\Controllers\Api\Core\BaseApiController;
use App\Http\Requests\SchoolYears\CloseSchoolYearRequest;
use App\Http\Requests\SchoolYears\PreviewCloseSchoolYearRequest;
use App\Http\Requests\SchoolYears\SaveSchoolYearRequest;
use App\Services\SchoolYears\SchoolYearClosureService;
use App\Services\SchoolYears\SchoolYearContextService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpFoundation\Response;
class SchoolYearController extends BaseApiController
{
public function __construct(
private SchoolYearClosureService $service,
private SchoolYearContextService $context
) {
parent::__construct();
}
public function index(Request $request): JsonResponse
{
$context = $this->context->options(
$request->query('school_year'),
$request->query('semester')
);
return response()->json([
'ok' => true,
'data' => $this->service->list(),
'meta' => $context,
'school_years' => $context['school_years'],
'current_school_year' => $context['current_school_year'],
'current_semester' => $context['current_semester'],
]);
}
public function current(Request $request): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->context->options(
$request->query('school_year'),
$request->query('semester')
),
]);
}
public function options(Request $request): JsonResponse
{
return $this->current($request);
}
public function store(SaveSchoolYearRequest $request): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->service->createYear($request->validated(), $this->getCurrentUserId()),
], Response::HTTP_CREATED);
}
public function update(SaveSchoolYearRequest $request, int $schoolYear): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->service->updateYear($schoolYear, $request->validated(), $this->getCurrentUserId()),
]);
}
public function summary(int $schoolYear): JsonResponse
{
return response()->json(['ok' => true, 'data' => $this->service->summary($schoolYear)]);
}
public function validateClose(PreviewCloseSchoolYearRequest $request, int $schoolYear): JsonResponse
{
return response()->json([
'ok' => true,
'validation' => $this->service->validateClose($schoolYear, $request->validated()),
]);
}
public function previewClose(PreviewCloseSchoolYearRequest $request, int $schoolYear): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->service->previewClose($schoolYear, $request->validated()),
]);
}
public function close(CloseSchoolYearRequest $request, int $schoolYear): JsonResponse
{
try {
$result = $this->service->close($schoolYear, $request->validated(), $this->getCurrentUserId());
} catch (ValidationException $e) {
throw $e;
} catch (\Throwable $e) {
return response()->json([
'ok' => false,
'message' => $e->getMessage(),
], Response::HTTP_CONFLICT);
}
return response()->json(['ok' => true, 'data' => $result]);
}
public function reopen(Request $request, int $schoolYear): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->service->reopen($schoolYear, $this->getCurrentUserId()),
]);
}
public function parentBalances(Request $request, int $schoolYear): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->service->parentBalances($schoolYear, $request->query('to_school_year')),
]);
}
public function promotionPreview(Request $request, int $schoolYear): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->service->promotionPreview($schoolYear, $request->query('to_school_year')),
]);
}
public function closingReport(int $schoolYear): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->service->closingReport($schoolYear),
]);
}
}