Passed
Push — task/explore-skills-ui ( d41a63...af1244 )
by Yonathan
06:51 queued 10s
created

ApplicantController   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
wmc 6
eloc 33
c 4
b 0
f 0
dl 0
loc 74
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getProfile() 0 4 1
A updateProfile() 0 52 5
1
<?php
2
3
namespace App\Http\Controllers\Api;
4
5
use App\Http\Controllers\Controller;
6
use App\Http\Requests\UpdateApplicantProfile;
7
use App\Http\Resources\ApplicantProfile as ApplicantProfileResource;
8
use App\Models\Applicant;
9
use App\Models\ApplicantClassification;
10
11
class ApplicantController extends Controller
12
{
13
14
    /**
15
     * Retrieve Applicant profile.
16
     *
17
     * @param Applicant $applicant Incoming Applicant object.
18
     *
19
     * @return mixed
20
     */
21
    public function getProfile(Applicant $applicant)
22
    {
23
          $applicant->loadMissing('applicant_classifications');
24
          return new ApplicantProfileResource($applicant);
25
    }
26
27
    /**
28
     * Update Applicant profile.
29
     *
30
     * @param UpdateApplicantProfile $request Form Validation casted request object.
31
     * @param Applicant              $applicant Incoming Applicant object.
32
     */
33
    public function updateProfile(UpdateApplicantProfile $request, Applicant $applicant)
34
    {
35
        $validatedRequest = $request->validated();
36
        // If there are no applicant classifications in the request,
37
        // then delete all applicant classifications attached to applicant.
38
        if (!array_key_exists('applicant_classifications', $validatedRequest)) {
39
            $applicant->applicant_classifications()->delete();
40
        } else {
41
            $newApplicantClassifications = collect($validatedRequest['applicant_classifications'])->unique(
0 ignored issues
show
Bug introduced by
The function collect was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

41
            $newApplicantClassifications = /** @scrutinizer ignore-call */ collect($validatedRequest['applicant_classifications'])->unique(
Loading history...
42
                // Remove all duplicate classification-level combinations from the collection.
43
                function ($newApplicantClassification) {
44
                    return $newApplicantClassification['classification_id'].$newApplicantClassification['level'];
45
                }
46
            );
47
            $oldApplicantClassifications = $applicant->applicant_classifications;
48
49
            // Delete old applicant classifications that were not resubmitted.
50
            foreach ($oldApplicantClassifications as $oldApplicantClassification) {
51
                $newApplicantClassification = $newApplicantClassifications->firstWhere(
52
                    'id',
53
                    $oldApplicantClassification['id']
54
                );
55
                if ($newApplicantClassification === null) {
56
                    $oldApplicantClassification->delete();
57
                }
58
            }
59
60
61
            // Update old applicant classifications and/or create them if it doesn't exist.
62
            $newApplicantClassifications->map(function ($newApplicantClassification) use ($oldApplicantClassifications) {
63
                $applicantClassification = $oldApplicantClassifications->firstWhere(
64
                    'id',
65
                    $newApplicantClassification['id']
66
                );
67
                if (!$applicantClassification) {
68
                    $applicantClassification = new ApplicantClassification();
69
                }
70
                $applicantClassification->applicant_id = $newApplicantClassification['applicant_id'];
71
                $applicantClassification->classification_id = $newApplicantClassification['classification_id'];
72
                $applicantClassification->fill($newApplicantClassification);
73
                $applicantClassification->save();
74
            });
75
        }
76
77
        $applicant->citizenship_declaration_id = $validatedRequest['citizenship_declaration_id'];
78
        $applicant->veteran_status_id = $validatedRequest['veteran_status_id'];
79
        $applicant->save();
80
81
        $applicant->refresh();
82
        $applicant->loadMissing('applicant_classifications');
83
84
        return new ApplicantProfileResource($applicant);
85
    }
86
}
87