Passed
Push — feature/micro-ref-email ( b987f2...6f6312 )
by Tristan
04:47
created

ApplicationController::index()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 8
c 1
b 0
f 0
dl 0
loc 12
rs 10
cc 1
nc 1
nop 1
1
<?php
2
3
namespace App\Http\Controllers\Api;
4
5
use App\Http\Controllers\Controller;
6
use App\Http\Resources\JobApplication as JobApplicationResource;
7
use App\Models\ApplicationReview;
8
use App\Models\JobApplication;
9
use App\Models\JobPoster;
10
use App\Models\Lookup\Department;
11
use App\Models\Lookup\ReviewStatus;
12
use Illuminate\Http\Request;
13
use Illuminate\Http\Resources\Json\JsonResource;
14
use Illuminate\Validation\Rule;
15
16
class ApplicationController extends Controller
17
{
18
    /**
19
     * Return a single Job Application.
20
     *
21
     * @param JobApplication $application Incoming Job Application object.
22
     *
23
     * @return mixed
24
     */
25
    public function show(JobApplication $application)
26
    {
27
        $application->loadMissing('applicant', 'application_review', 'citizenship_declaration', 'veteran_status');
28
        return new JobApplicationResource($application);
29
    }
30
31
    /**
32
     * Return all Job Applications for a given Job Poster.
33
     *
34
     * @param JobPoster $jobPoster Incoming Job Poster object.
35
     *
36
     * @return mixed
37
     */
38
    public function index(JobPoster $jobPoster)
39
    {
40
        $applications = $jobPoster->submitted_applications()
41
            ->with([
42
                'applicant.user',
43
                'application_review',
44
                'citizenship_declaration',
45
                'veteran_status'
46
            ])
47
            ->get();
48
49
        return JobApplicationResource::collection($applications);
50
    }
51
52
    /**
53
     * Update a single Job Application Review.
54
     *
55
     * @param Request        $request     Incoming request object.
56
     * @param JobApplication $application Incoming Job Application object.
57
     *
58
     * @return mixed
59
     */
60
    public function updateReview(Request $request, JobApplication $application)
61
    {
62
        $request->validate([
63
            'review_status_id' => [
64
                'nullable',
65
                Rule::in(ReviewStatus::all()->pluck('id')->toArray())
66
            ],
67
            'department_id' => [
68
                'nullable',
69
                Rule::in(Department::all()->pluck('id')->toArray())
70
            ],
71
            'notes' => 'nullable|string'
72
        ]);
73
74
        $review = $application->application_review;
75
        if ($review === null) {
76
            $review = new ApplicationReview();
77
            $review->job_application()->associate($application);
78
        }
79
        $review->fill([
80
            'review_status_id' => $request->input('review_status_id'),
81
            'department_id' => $request->input('department_id'),
82
            'notes' => $request->input('notes'),
83
        ]);
84
        $review->save();
85
        $review->fresh();
86
87
        return new JsonResource($review);
88
    }
89
}
90