Passed
Push — task/all-applications-to-pdf ( cb7375...852a46 )
by Tristan
59:34 queued 50:51
created

AssessmentController   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 99
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 6
eloc 46
dl 0
loc 99
ccs 0
cts 44
cp 0
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A store() 0 29 2
A destroy() 0 7 1
A update() 0 22 2
A show() 0 6 1
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use App\Models\Assessment;
6
use App\Models\Criteria;
7
use App\Models\Lookup\AssessmentType;
8
9
use Illuminate\Http\Request;
10
use Illuminate\Http\Response;
11
12
class AssessmentController extends Controller
13
{
14
    /**
15
     * Store a newly created resource in storage.
16
     *
17
     * @param  \Illuminate\Http\Request $request Incoming request.
18
     * @return mixed
19
     */
20
    public function store(Request $request)
21
    {
22
        $this->authorize('create', Assessment::class);
23
24
        try {
25
            $criterion_id = (int)$request->json('criterion_id');
26
            $assessment_type_id = (int)$request->json('assessment_type_id');
27
            $criteria = Criteria::findOrFail($criterion_id);
28
            AssessmentType::findOrFail($assessment_type_id);
29
30
            $assessment = new Assessment([
31
                'criterion_id' => $criterion_id,
32
                'assessment_type_id' => $assessment_type_id
33
            ]);
34
            // Check that this user is allowed to create an Assessment for this criterion
35
            $this->authorize('update', $assessment);
36
37
            $assessment->save();
38
            $assessment->refresh();
39
            $assessment['criteria'] = $criteria->toArray();
40
        } catch (\Exception $e) {
41
            return response()->json([
42
                'error' => $e->getMessage()
43
            ], 400);
44
        }
45
46
        return [
47
            'success' => "Successfully created assessment $assessment->id",
48
            'assessment' => $assessment->toArray()
49
        ];
50
    }
51
52
    /**
53
     * Display the specified resource.
54
     *
55
     * @param  \App\Models\Assessment $assessment Incoming object.
56
     * @return mixed
57
     */
58
    public function show(Assessment $assessment)
59
    {
60
        $this->authorize('view', $assessment);
61
        $criteria = Criteria::find($assessment->id);
62
        $assessment['criteria'] = $criteria->toArray();
63
        return $assessment->toArray();
64
    }
65
66
    /**
67
     * Update the specified resource in storage.
68
     *
69
     * @param  \Illuminate\Http\Request $request    Incoming request.
70
     * @param  \App\Models\Assessment   $assessment Incoming object.
71
     * @return mixed
72
     */
73
    public function update(Request $request, Assessment $assessment)
74
    {
75
        $this->authorize('update', $assessment);
76
        try {
77
            $criterion_id = (int)$request->json('criterion_id');
78
            $assessment_type_id = (int)$request->json('assessment_type_id');
79
            $criteria = Criteria::findOrFail($criterion_id);
80
            AssessmentType::findOrFail($assessment_type_id);
81
82
            $assessment->criterion_id = $criterion_id;
83
            $assessment->assessment_type_id = $assessment_type_id;
84
            $assessment->save();
85
            $assessment['criteria'] = $criteria->toArray();
86
        } catch (\Exception $e) {
87
            return response()->json([
88
                'error' => $e->getMessage()
89
            ], 400);
90
        }
91
92
        return [
93
            'success' => "Successfully updated assessment $assessment->id",
94
            'assessment' => $assessment->toArray(),
95
        ];
96
    }
97
98
    /**
99
     * Remove the specified resource from storage.
100
     *
101
     * @param  \App\Models\Assessment $assessment Incoming object.
102
     * @return mixed
103
     */
104
    public function destroy(Assessment $assessment)
105
    {
106
        $this->authorize('delete', $assessment);
107
        $assessment->delete();
108
109
        return [
110
            'success' => "Successfully deleted assessment $assessment->id"
111
        ];
112
    }
113
}
114