Passed
Push — develop ( dfa246...179c36 )
by Francisco
02:27
created

EnrollmentController::store()   A

Complexity

Conditions 2
Paths 3

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 13
c 1
b 0
f 0
nc 3
nop 1
dl 0
loc 22
rs 9.2
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use Illuminate\Http\Request;
6
use App\Judite\Models\Course;
7
use Illuminate\Support\Facades\DB;
8
use Illuminate\Support\Facades\Auth;
9
use App\Exceptions\UserIsAlreadyEnrolledInCourseException;
10
11
class EnrollmentController extends Controller
12
{
13
    /**
14
     * Create a new controller instance.
15
     */
16
    public function __construct()
17
    {
18
        $this->middleware('can.enroll');
19
    }
20
21
    /**
22
     * Store a newly created resource in storage.
23
     *
24
     * @param \Illuminate\Http\Request $request
25
     *
26
     * @return \Illuminate\Http\Response
27
     */
28
    public function store(Request $request)
29
    {
30
        try {
31
            $course = DB::transaction(function () use ($request) {
32
                $this->validate($request, [
33
                    'course_id' => 'exists:courses,id',
34
                ]);
35
36
                $student = Auth::user()->student;
0 ignored issues
show
Bug introduced by
Accessing student on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
37
                $course = Course::find($request->input('course_id'));
38
                $student->enroll($course);
39
40
                return $course;
41
            });
42
43
            flash("You have successfully enrolled in {$course->name}.")->success();
44
        } catch (UserIsAlreadyEnrolledInCourseException $e) {
45
            $course = $e->getCourse();
46
            flash("You are already enrolled in {$course->name}.")->error();
47
        }
48
49
        return redirect()->route('courses.index');
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->route('courses.index') returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
50
    }
51
52
    /**
53
     * Remove the specified resource from storage.
54
     *
55
     * @param \Illuminate\Http\Request $request
56
     *
57
     * @return \Illuminate\Http\Response
58
     */
59
    public function destroy(Request $request)
60
    {
61
        $course = DB::transaction(function () use ($request) {
62
            $this->validate($request, [
63
                'course_id' => 'exists:courses,id',
64
            ]);
65
66
            $student = Auth::user()->student;
0 ignored issues
show
Bug introduced by
Accessing student on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
67
            $course = Course::find($request->input('course_id'));
68
            $student->removeEnrollmentInCourse($course);
69
70
            return $course;
71
        });
72
73
        flash("You have successfully deleted the enrollment in {$course->name}.")->success();
74
75
        return redirect()->route('courses.index');
0 ignored issues
show
Bug Best Practice introduced by
The expression return redirect()->route('courses.index') returns the type Illuminate\Http\RedirectResponse which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
76
    }
77
}
78