diff --git a/backend/app/Http/Controllers/InternshipStatusController.php b/backend/app/Http/Controllers/InternshipStatusController.php index a68f08f..3cee9dc 100644 --- a/backend/app/Http/Controllers/InternshipStatusController.php +++ b/backend/app/Http/Controllers/InternshipStatusController.php @@ -31,6 +31,26 @@ class InternshipStatusController extends Controller return response()->json($internship_statuses); } + public function get_next_states(int $id) { + $user = auth()->user(); + $internship = Internship::find($id); + + if(!$internship) { + return response()->json([ + 'message' => 'No such internship exists.' + ], 400); + } + + if ($user->role !== 'ADMIN' && $internship->user_id !== $user->id && $user->id !== $internship->contact) { + abort(403, 'Unauthorized'); + } + + $currentStatus = $this->currentInternshipStatus($internship); + $nextPossibleStatuses = $this->possibleNewStatuses($currentStatus->status, $user->role); + + return response()->json($nextPossibleStatuses); + } + /** * Display a listing of the resource. */ diff --git a/backend/routes/api.php b/backend/routes/api.php index e750141..ec0b164 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -34,6 +34,7 @@ Route::prefix('/internships')->group(function () { Route::get("/", [InternshipController::class, 'get'])->name("api.internships.get"); Route::put("/status", [InternshipStatusController::class, 'update'])->name("api.internships.status.update"); Route::get("/statuses", [InternshipStatusController::class, 'get'])->name("api.internships.get"); + Route::get("/next-statuses", [InternshipStatusController::class, 'get_next_states'])->name("api.internships.status.next.get"); Route::post("/basic", [InternshipController::class, 'update_basic'])->name("api.internships.update.basic"); }); diff --git a/frontend/app/components/InternshipStatusEditor.vue b/frontend/app/components/InternshipStatusEditor.vue index 9860666..fbaf858 100644 --- a/frontend/app/components/InternshipStatusEditor.vue +++ b/frontend/app/components/InternshipStatusEditor.vue @@ -1,6 +1,6 @@