UsersController   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 112
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
eloc 35
c 2
b 0
f 1
dl 0
loc 112
rs 10
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A register() 0 9 1
A update() 0 11 1
A getUser() 0 9 1
A processResponse() 0 11 2
A login() 0 11 2
A deleteUserAccount() 0 5 1
1
<?php
2
3
namespace FaithGen\SDK\Http\Controllers;
4
5
use FaithGen\SDK\Http\Requests\Users\LoginRequest;
6
use FaithGen\SDK\Http\Requests\Users\SaveRequest;
7
use FaithGen\SDK\Http\Resources\MinistryUser;
8
use FaithGen\SDK\Models\User;
9
use Illuminate\Database\Eloquent\ModelNotFoundException;
10
use Illuminate\Routing\Controller;
11
use InnoFlash\LaraStart\Traits\APIResponses;
12
13
class UsersController extends Controller
14
{
15
    use APIResponses;
16
17
    /**
18
     * Registers a user to the given ministry.
19
     *
20
     * @param SaveRequest $request
21
     *
22
     * @return \Illuminate\Http\JsonResponse
23
     */
24
    public function register(SaveRequest $request)
25
    {
26
        $user = User::create($request->only('name', 'email', 'phone'));
27
28
        $ministryUser = auth()->user()->ministryUsers()->create([
29
            'user_id' => $user->id,
30
        ]);
31
32
        return $this->processResponse($request, $ministryUser, 'Account created successfully.');
33
    }
34
35
    /**
36
     * Updates a user account.
37
     *
38
     * @param SaveRequest $request
39
     *
40
     * @return \Illuminate\Http\JsonResponse
41
     */
42
    public function update(SaveRequest $request)
43
    {
44
        $updated = auth('web')->user()
0 ignored issues
show
Unused Code introduced by
The assignment to $updated is dead and can be removed.
Loading history...
45
            ->update($request->only('name', 'email', 'phone'));
46
47
        $ministryUser = auth()->user()
48
            ->ministryUsers()
49
            ->where('user_id', auth('web')->user()->id)
0 ignored issues
show
Bug introduced by
Accessing id on the interface Illuminate\Contracts\Auth\Authenticatable suggest that you code against a concrete implementation. How about adding an instanceof check?
Loading history...
50
            ->first();
51
52
        return $this->processResponse($request, $ministryUser, 'Account updated successfully.');
53
    }
54
55
    /**
56
     * Logs in the user into the app.
57
     *
58
     * @param LoginRequest $request
59
     * @return \Illuminate\Http\JsonResponse
60
     *
61
     * @throws ModelNotFoundException
62
     */
63
    public function login(LoginRequest $request)
64
    {
65
        $ministryUser = auth()->user()
66
            ->ministryUsers()
67
            ->whereHas('user', fn ($user) => $user->where($request->validated()))
68
            ->first();
69
70
        if ($ministryUser) {
71
            return $this->processResponse($request, $ministryUser, 'Login successful.');
72
        } else {
73
            abort(401, 'This phone number is not valid for this app');
74
        }
75
    }
76
77
    /**
78
     * Processes the response to give to the user.
79
     *
80
     * @param $request
81
     * @param MinistryUser $ministryUser
82
     * @param string $messagePrefix
83
     * @return \Illuminate\Http\JsonResponse
84
     */
85
    private function processResponse($request, \FaithGen\SDK\Models\Pivots\MinistryUser $ministryUser, string $messagePrefix = 'Account logged successfully.')
86
    {
87
        $data = [
88
            'user' => new MinistryUser($ministryUser),
89
            'processing_image' => $request->has('image'),
90
        ];
91
92
        if (! $request->has('image')) {
93
            return $this->successResponse($messagePrefix, $data);
94
        } else {
95
            return $this->successResponse($messagePrefix.' We are uploading your picture now', $data);
96
        }
97
    }
98
99
    /**
100
     * Deletes a user account.
101
     *
102
     * @return \Illuminate\Http\JsonResponse
103
     */
104
    public function deleteUserAccount()
105
    {
106
        auth('web')->user()->delete();
107
108
        return $this->successResponse('Account deleted successfully.');
109
    }
110
111
    /**
112
     * Fetches the complete user profile.
113
     *
114
     * @return MinistryUser
115
     */
116
    public function getUser()
117
    {
118
        $ministryUser = auth()->user()->ministryUsers()
119
            ->where('user_id', request()->headers->get('x-user-key'))
120
            ->first();
121
122
        MinistryUser::withoutWrapping();
123
124
        return new MinistryUser($ministryUser);
125
    }
126
}
127