UserService   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 113
Duplicated Lines 0 %

Test Coverage

Coverage 96.88%

Importance

Changes 0
Metric Value
eloc 28
dl 0
loc 113
ccs 31
cts 32
cp 0.9688
rs 10
c 0
b 0
f 0
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A deleteUser() 0 3 1
A updateUser() 0 18 2
A getUsers() 0 3 1
A createUser() 0 23 2
A getById() 0 3 1
A __construct() 0 6 1
1
<?php
2
3
namespace App\Services;
4
5
use App\Http\Requests\UserSearchRequest;
6
use App\Http\Requests\UserStoreRequest;
7
use App\Models\User;
8
use App\Repositories\UserProfileRepositoryInterface;
9
use App\Repositories\UserRepositoryInterface;
10
11
class UserService
12
{
13
    private UserRepositoryInterface $userRepository;
14
    private UserProfileRepositoryInterface $userProfileRepository;
15
16
    /**
17
     * AdminService constructor.
18
     *
19
     * @param \App\Repositories\UserRepositoryInterface $userRepository
20
     * @param \App\Repositories\UserProfileRepositoryInterface $userProfileRepository
21
     */
22 5
    public function __construct(
23
        UserRepositoryInterface $userRepository,
24
        UserProfileRepositoryInterface $userProfileRepository
25
    ) {
26 5
        $this->userRepository = $userRepository;
27 5
        $this->userProfileRepository = $userProfileRepository;
28 5
    }
29
30
    /**
31
     * Create an user and the profile at the same time
32
     *
33
     * @param \App\Http\Requests\UserStoreRequest $request
34
     *
35
     * @return User
36
     */
37 1
    public function createUser(UserStoreRequest $request): User
38
    {
39 1
        $user = $this->userRepository->storeUser($request->all());
40
41
        // Assign an new empty user profile to the user
42 1
        $this->userProfileRepository->store([
43 1
            'user_id' => $user->id,
44 1
            'name' => $request->name,
45 1
            'surname' => $request->surname,
46 1
            'country_id' => $request->country_id,
47 1
            'description' => $request->description,
48 1
            'accept_terms' => ($request->accept_terms == 'on') ? 1 : 0,
49
        ]);
50
51
        // Teams membership
52 1
        $roles = $request->team_membership ?? [];
53
54
        // User level
55 1
        $roles[] = $request->role;
56
57 1
        $user->assignRole($roles);
58
59 1
        return $user;
60
    }
61
62
    /**
63
     * Update the user user and profile at the same time
64
     *
65
     * @param \App\Http\Requests\UserStoreRequest $request
66
     * @param int $userId
67
     *
68
     * @return User
69
     * @throws \Spatie\ModelStatus\Exceptions\InvalidStatus
70
     */
71 1
    public function updateUser(UserStoreRequest $request, int $userId): User
72
    {
73 1
        $user = $this->userRepository->update($request->all(), $userId);
74 1
        $this->userProfileRepository->update($request->all(), $user->profile->id);
75
76 1
        $roles = [];
77
78
        // User level
79 1
        $roles[] = $request->role;
80
81
        // Teams membership
82
        // (Just if the role is admin, for super admins we don't need them)
83 1
        if ($request->role == "Admin") {
84
            $roles[] = $request->team_membership;
85
        }
86 1
        $user->syncRoles($roles);
87
88 1
        return $user;
89
    }
90
91
    /**
92
     * Return the user from the database
93
     *
94
     * @param int $userId
95
     *
96
     * @return User
97
     */
98 1
    public function getById(int $userId): User
99
    {
100 1
        return $this->userRepository->getById($userId);
101
    }
102
103
    /**
104
     * Get all the administrators.
105
     *
106
     * @param int|null $recordsPerPage
107
     * @param array|null $searchParameters
108
     *
109
     * @return \Illuminate\Database\Eloquent\Collection|\Illuminate\Contracts\Pagination\LengthAwarePaginator
110
     */
111 1
    public function getUsers(int $recordsPerPage = null, array $searchParameters = null)
112
    {
113 1
        return $this->userRepository->users($recordsPerPage, $searchParameters);
114
    }
115
116
    /**
117
     * Delete the user from the database
118
     *
119
     * @param int $userId
120
     */
121 1
    public function deleteUser(int $userId): void
122
    {
123 1
        $this->userRepository->delete($userId);
124 1
    }
125
}
126