Passed
Push — task/batch-request-skills-step ( 9a97f0 )
by Yonathan
07:29
created

ExperienceSkillsController::batchDestroy()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 7
c 1
b 0
f 0
dl 0
loc 11
rs 10
cc 2
nc 2
nop 1
1
<?php
2
namespace App\Http\Controllers\Api;
3
4
use App\Http\Controllers\Controller;
5
use App\Http\Requests\BatchStoreExperienceSkill;
6
use App\Http\Requests\StoreExperienceSkill;
7
use App\Models\ExperienceSkill;
8
use Illuminate\Http\Request;
9
use Illuminate\Http\Resources\Json\JsonResource;
10
11
class ExperienceSkillsController extends Controller
12
{
13
    public function store(StoreExperienceSkill $request)
14
    {
15
        $data = $request->validated();
16
        // Restore soft deleted experienceSkill if it exists, otherwise create a new one.
17
        $softDeletedExperienceSkill = ExperienceSkill::onlyTrashed()
18
            ->where([
19
            ['skill_id', $data['skill_id']],
20
            ['experience_id', $data['experience_id']],
21
            ['experience_type', $data['experience_type']]
22
        ])->first();
23
        if ($softDeletedExperienceSkill) {
24
            $softDeletedExperienceSkill->restore();
25
            $softDeletedExperienceSkill->save();
26
            return new JsonResource($softDeletedExperienceSkill->fresh());
27
        } else {
28
            $experienceSkill = new ExperienceSkill($data);
29
            $experienceSkill->skill_id = $data['skill_id'];
30
            $experienceSkill->experience_id = $data['experience_id'];
31
            $experienceSkill->experience_type = $data['experience_type'];
32
            $experienceSkill->justification = $data['justification'];
33
            $experienceSkill->save();
34
            return new JsonResource($experienceSkill->fresh());
35
        }
36
    }
37
38
    public function update(Request $request, ExperienceSkill $experienceSkill)
39
    {
40
        $validatedData = $request->validate([
41
            'justification' => 'nullable|string',
42
        ]);
43
        $experienceSkill->fill($validatedData);
44
        $experienceSkill->save();
45
        return new JsonResource($experienceSkill->fresh());
46
    }
47
48
    public function destroy(ExperienceSkill $experienceSkill)
49
    {
50
        $experienceSkill->delete();
51
    }
52
53
    public function batchStore(BatchStoreExperienceSkill $request)
54
    {
55
        $newExperienceSkills = $request->validated();
56
        $response = [];
57
58
        foreach ($newExperienceSkills as $newExperienceSkill) {
59
            // Restore soft deleted experienceSkill if it exists, otherwise create a new one.
60
            $softDeletedExperienceSkill = ExperienceSkill::onlyTrashed()
61
                ->where([
62
                ['skill_id', $newExperienceSkill['skill_id']],
63
                ['experience_id', $newExperienceSkill['experience_id']],
64
                ['experience_type', $newExperienceSkill['experience_type']]
65
            ])->first();
66
            if ($softDeletedExperienceSkill) {
67
                $softDeletedExperienceSkill->restore();
68
                $softDeletedExperienceSkill->save();
69
                array_push($response, $softDeletedExperienceSkill);
70
            } else {
71
                $experienceSkill = new ExperienceSkill($newExperienceSkill);
72
                $experienceSkill->skill_id = $newExperienceSkill['skill_id'];
73
                $experienceSkill->experience_id = $newExperienceSkill['experience_id'];
74
                $experienceSkill->experience_type = $newExperienceSkill['experience_type'];
75
                $experienceSkill->justification = $newExperienceSkill['justification'];
76
                $experienceSkill->save();
77
                $experienceSkill->fresh();
78
                array_push($response, $experienceSkill);
79
            }
80
        }
81
82
        return new JsonResource($response);
83
    }
84
85
    public function batchUpdate(Request $request)
86
    {
87
        $newExperienceSkills = $request->validate([
88
            '*.id' => 'required|exists:App\Models\ExperienceSkill,id',
89
            '*.justification' => 'nullable|string',
90
        ]);
91
        $response = [];
92
93
        foreach ($newExperienceSkills as $newExperienceSkill) {
94
            $experienceSkill = ExperienceSkill::where('id', $newExperienceSkill['id'])->first();
95
            $this->authorize('update', $experienceSkill);
96
            $experienceSkill->fill($newExperienceSkill);
97
            $experienceSkill->save();
98
            array_push($response, $experienceSkill);
99
        }
100
        return new JsonResource($response);
101
    }
102
103
    public function batchDestroy(Request $request)
104
    {
105
        $experienceSkillIds = $request->validate([
106
            '*.id' => 'required|exists:App\Models\ExperienceSkill,id',
107
        ]);
108
        $experienceSkills = ExperienceSkill::whereIn('id', $experienceSkillIds);
109
        foreach ($experienceSkills as $experienceSkill) {
110
            $this->authorize('update', $experienceSkill);
111
        }
112
        $experienceSkills->delete();
113
        return response()->json(['success' => 'success'], 200);
0 ignored issues
show
Bug introduced by
The function response 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

113
        return /** @scrutinizer ignore-call */ response()->json(['success' => 'success'], 200);
Loading history...
114
    }
115
}
116