refactor: simplify status transition logic in Internship

This commit is contained in:
2025-11-29 14:34:05 +01:00
parent e309d8ea5d
commit fcb6cc13fa
2 changed files with 55 additions and 35 deletions

View File

@@ -44,9 +44,7 @@ class InternshipStatusDataController extends Controller
abort(403, 'Unauthorized');
}
$currentStatus = $internship->status;
$nextPossibleStatuses = $this->possibleNewStatuses($currentStatus->status, $user->role, $internship->report_confirmed);
$nextPossibleStatuses = $internship->nextStates($user->role);
return response()->json($nextPossibleStatuses);
}
@@ -109,7 +107,7 @@ class InternshipStatusDataController extends Controller
}
$internshipStatus = $internship->status;
$newStatusValidator = 'in:' . implode(',', $this->possibleNewStatuses($internshipStatus->status, $user->role, $internship->report_confirmed));
$newStatusValidator = 'in:' . implode(',', $internship->nextStates($user->role));
$request->validate([
'status' => ['required', 'string', 'uppercase', $newStatusValidator],
@@ -136,35 +134,4 @@ class InternshipStatusDataController extends Controller
{
//
}
private function possibleNewStatuses(string $current_status, string $userRole, bool $report_confirmed)
{
if ($userRole === "STUDENT")
return [];
switch ($current_status) {
case 'SUBMITTED':
return ['CONFIRMED', 'DENIED'];
case 'CONFIRMED':
if ($userRole === 'EMPLOYER') {
return ['DENIED'];
}
if ($report_confirmed) {
return ['SUBMITTED', 'DENIED', 'DEFENDED', 'NOT_DEFENDED'];
}
return ['SUBMITTED', 'DENIED'];
case 'DENIED':
if ($userRole === 'EMPLOYER') {
return ['CONFIRMED'];
}
return ['SUBMITTED', 'CONFIRMED'];
case 'DEFENDED':
case 'NOT_DEFENDED':
return [];
default:
throw new \InvalidArgumentException('Unknown status');
}
}
}