Passed
Push — master ( 72576e...ceb7cb )
by Paul
04:15
created

UserController   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 111
Duplicated Lines 0 %

Test Coverage

Coverage 92.73%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 58
c 1
b 0
f 0
dl 0
loc 111
ccs 51
cts 55
cp 0.9273
rs 10
wmc 12

5 Methods

Rating   Name   Duplication   Size   Complexity  
A index() 0 22 3
A update() 0 30 3
A delete() 0 13 2
A create() 0 25 2
A show() 0 11 2
1
<?php
2
3
namespace Devpri\Tinre\Http\Controllers\Web;
4
5
use Devpri\Tinre\Http\Controllers\Controller;
6
use Devpri\Tinre\Http\Resources\Web\User as UserResource;
7
use Devpri\Tinre\Models\User;
8
use Illuminate\Database\Eloquent\Builder;
9
use Illuminate\Http\Request;
10
use Illuminate\Support\Facades\Hash;
11
12
class UserController extends Controller
13
{
14 3
    public function index(Request $request)
15
    {
16 3
        $user = $request->user();
17
18 3
        if ($user->cant('viewAny', User::class)) {
19 2
            abort(401);
20
        }
21
22 1
        $search = $request->search;
23
24 1
        $query = User::query();
25
26 1
        if ($search) {
27
            $query->where(function (Builder $query) use ($search) {
28
                $query->where('name', 'LIKE', "%{$search}%")
29
                    ->orWhere('email', 'LIKE', "%{$search}%");
30
            });
31
        }
32
33 1
        $users = $query->orderBy('created_at', 'DESC')->paginate(30);
34
35 1
        return UserResource::collection($users)->additional(['authorized_actions' => (new User)->authorizedActions()]);
36
    }
37
38 2
    public function show(Request $request, $id)
39
    {
40 2
        $authUser = $request->user();
41
42 2
        $user = User::where('id', $id)->firstOrFail();
43
44 2
        if ($authUser->cant('view', $user)) {
45
            abort(401);
46
        }
47
48 2
        return new UserResource($user);
49
    }
50
51 2
    public function create(Request $request)
52
    {
53 2
        $authUser = $request->user();
54
55 2
        if ($authUser->cant('create', User::class)) {
56 1
            abort(401);
57
        }
58
59 1
        $validatedData = $request->validate([
60 1
            'active' => ['required', 'boolean'],
61
            'name' => ['required', 'string', 'max:255'],
62
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
63
            'role' => ['required', 'string'],
64
            'password' => ['required', 'string', 'min:8'],
65
        ]);
66
67 1
        $user = new User;
68 1
        $user->active = $validatedData['active'];
69 1
        $user->name = $validatedData['name'];
70 1
        $user->email = $validatedData['email'];
71 1
        $user->role = $validatedData['role'];
72 1
        $user->password = Hash::make($validatedData['password']);
73 1
        $user->save();
74
75 1
        return (new UserResource($user))->additional(['message' => 'The user has been created.']);
76
    }
77
78 4
    public function update(Request $request, $id)
79
    {
80 4
        $authUser = $request->user();
81
82 4
        $user = User::where('id', $id)->firstOrFail();
83
84 4
        if ($authUser->cant('update', $user)) {
85 3
            abort(401);
86
        }
87
88 1
        $validatedData = $request->validate([
89 1
            'active' => ['required', 'boolean'],
90
            'name' => ['required', 'string', 'max:255'],
91 1
            'email' => ['required', 'string', 'email', 'max:255', "unique:users,email,{$user->id}"],
92
            'role' => ['required', 'string'],
93
            'password' => ['nullable', 'string', 'min:8'],
94
        ]);
95
96 1
        $user->active = $validatedData['active'];
97 1
        $user->name = $validatedData['name'];
98 1
        $user->email = $validatedData['email'];
99 1
        $user->role = $validatedData['role'];
100
101 1
        if (isset($validatedData['password'])) {
102 1
            $user->password = Hash::make($validatedData['password']);
103
        }
104
105 1
        $user->save();
106
107 1
        return (new UserResource($user))->additional(['message' => 'The user has been updated.']);
108
    }
109
110 3
    public function delete(Request $request, $id)
111
    {
112 3
        $authUser = $request->user();
113
114 3
        $user = User::where('id', $id)->firstOrFail();
115
116 3
        if ($authUser->cant('delete', $user)) {
117 2
            abort(401);
118
        }
119
120 1
        $user->delete();
121
122 1
        return ['message' => 'The user has been deleted.'];
123
    }
124
}
125