1 | <?php |
||
2 | |||
3 | namespace App\Http\Controllers; |
||
4 | |||
5 | use App\Exceptions\StateMachineException; |
||
6 | use App\Models\JobPoster; |
||
7 | use App\Http\Resources\JobPoster as JobPosterResource; |
||
8 | use App\Models\Lookup\JobPosterStatus; |
||
9 | use App\Services\JobStatusTransitionManager; |
||
10 | use Illuminate\Http\Request; |
||
11 | use Illuminate\Support\Facades\Lang; |
||
12 | |||
13 | class JobStatusController extends Controller |
||
14 | { |
||
15 | protected function transitionJobStatus(Request $request, JobPoster $job, string $to) |
||
16 | { |
||
17 | $fromStatus = $job->job_poster_status; |
||
18 | $from = $fromStatus->key; |
||
19 | |||
20 | // If the job already has the desired status, we can return without doing anything. |
||
21 | if ($from !== $to) { |
||
22 | $user = $request->user(); |
||
23 | |||
24 | $transitionManager = new JobStatusTransitionManager(); |
||
25 | |||
26 | // Ensure state transition is legal. |
||
27 | if (!$transitionManager->isLegalTransition($from, $to)) { |
||
28 | throw new StateMachineException(Lang::get('errors.illegal_status_transition', [ |
||
29 | 'from' => $from, |
||
30 | 'to' => $to, |
||
31 | ])); |
||
32 | } elseif (!$transitionManager->userCanTransition($user, $from, $to)) { |
||
33 | throw new StateMachineException(Lang::get('errors.user_must_own_status')); |
||
34 | } |
||
35 | |||
36 | // Save new status on job. |
||
37 | $toStatus = JobPosterStatus::where('key', $to)->first(); |
||
38 | $job->job_poster_status_id = $toStatus->id; |
||
39 | $job->save(); |
||
40 | } |
||
41 | |||
42 | return ($request->ajax() || $request->wantsJson()) |
||
43 | ? new JobPosterResource($job->fresh()) |
||
44 | : back(); |
||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||
45 | } |
||
46 | |||
47 | public function setJobStatus(Request $request, JobPoster $jobPoster, string $status) |
||
48 | { |
||
49 | return $this->transitionJobStatus($request, $jobPoster, $status); |
||
50 | } |
||
51 | } |
||
52 |