fix test issues
API CI/CD / Validate (composer + pint) (push) Successful in 3m5s
API CI/CD / Test (PHPUnit) (push) Failing after 7m12s
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

This commit is contained in:
root
2026-07-06 02:39:13 -04:00
parent 90f9857b06
commit 304fa6bfd0
14 changed files with 1018 additions and 17 deletions
@@ -139,4 +139,12 @@ class SchoolYearController extends BaseApiController
'data' => $this->service->closingReport($schoolYear),
]);
}
public function archive(Request $request, int $schoolYear): JsonResponse
{
return response()->json([
'ok' => true,
'data' => $this->service->archive($schoolYear, $this->getCurrentUserId()),
]);
}
}
+1 -1
View File
@@ -8,7 +8,7 @@ use Illuminate\Support\Facades\Route;
/**
* Laravel named routes (`route()`), cookie-session URLs, SPA paths, and absolute URLs for `public/` paths.
*/
final class ApplicationUrlService
class ApplicationUrlService
{
/** Absolute URL for a path under `public/` (e.g. `/docs/openapi_*.yaml`). */
public function absolutePublicPathUrl(string $path): string
@@ -1168,6 +1168,34 @@ class SchoolYearClosureService
return $email !== '' ? $email : $userId;
}
public function archive(int $id, ?int $actorId): array
{
$year = $this->findOrFail($id);
if ($year->status === SchoolYear::STATUS_ARCHIVED) {
throw ValidationException::withMessages([
'school_year' => ['This school year is already archived.'],
]);
}
$oldState = $year->toArray();
$year->status = SchoolYear::STATUS_ARCHIVED;
$year->is_current = false;
$year->save();
$this->logAudit(
$actorId,
'school_year_archived',
'school_years',
(int) $year->id,
$oldState,
$year->fresh()?->toArray(),
null
);
return $this->presentSchoolYear($year->fresh());
}
private function presentSchoolYear(?SchoolYear $year): ?array
{
if (! $year) {