Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
38 / 38 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
1 / 1 |
UsersController | |
100.00% |
38 / 38 |
|
100.00% |
4 / 4 |
5 | |
100.00% |
1 / 1 |
index | |
100.00% |
9 / 9 |
|
100.00% |
1 / 1 |
1 | |||
user | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
2 | |||
entriesByAngeltype | |
100.00% |
13 / 13 |
|
100.00% |
1 / 1 |
1 | |||
worklogs | |
100.00% |
10 / 10 |
|
100.00% |
1 / 1 |
1 |
1 | <?php |
2 | |
3 | declare(strict_types=1); |
4 | |
5 | namespace Engelsystem\Controllers\Api; |
6 | |
7 | use Engelsystem\Controllers\Api\Resources\UserAngelTypeReferenceResource; |
8 | use Engelsystem\Controllers\Api\Resources\UserDetailResource; |
9 | use Engelsystem\Controllers\Api\Resources\UserResource; |
10 | use Engelsystem\Controllers\Api\Resources\WorklogResource; |
11 | use Engelsystem\Http\Request; |
12 | use Engelsystem\Http\Response; |
13 | use Engelsystem\Models\AngelType; |
14 | use Engelsystem\Models\BaseModel; |
15 | use Engelsystem\Models\User\User; |
16 | use Engelsystem\Models\UserAngelType; |
17 | use Illuminate\Database\Eloquent\Collection; |
18 | |
19 | class UsersController extends ApiController |
20 | { |
21 | use UsesAuth; |
22 | |
23 | public function index(): Response |
24 | { |
25 | $models = User::query() |
26 | ->orderBy('name') |
27 | ->get(); |
28 | |
29 | $models = $models->map(function (BaseModel $model) { |
30 | return UserResource::toIdentifierArray($model); |
31 | }); |
32 | |
33 | $data = ['data' => $models]; |
34 | return $this->response |
35 | ->withContent(json_encode($data)); |
36 | } |
37 | |
38 | public function user(Request $request): Response |
39 | { |
40 | $id = $request->getAttribute('user_id'); |
41 | $user = $this->getUser($id); |
42 | |
43 | $userData = $user->id == $this->auth->user()->id ? new UserDetailResource($user) : new UserResource($user); |
44 | $data = ['data' => $userData->toArray()]; |
45 | return $this->response |
46 | ->withContent(json_encode($data)); |
47 | } |
48 | |
49 | public function entriesByAngeltype(Request $request): Response |
50 | { |
51 | $id = (int) $request->getAttribute('angeltype_id'); |
52 | /** @var AngelType $angelType */ |
53 | $angelType = AngelType::findOrFail($id); |
54 | |
55 | /** @var User[]|Collection $models */ |
56 | $models = $angelType->userAngelTypes() |
57 | ->orderBy('name') |
58 | ->get(); |
59 | |
60 | /** @var UserAngelType[]|Collection $models */ |
61 | $models = $models->map(function (User $model) { |
62 | // Patch to use the existing user model instead of a partially populated one |
63 | $model->pivot->setRelatedModel($model); |
64 | return $model->pivot; |
65 | }); |
66 | |
67 | /** @var UserAngelTypeReferenceResource[]|Collection $models */ |
68 | $models = UserAngelTypeReferenceResource::collection($models); |
69 | |
70 | $data = ['data' => $models]; |
71 | return $this->response |
72 | ->withContent(json_encode($data)); |
73 | } |
74 | |
75 | public function worklogs(Request $request): Response |
76 | { |
77 | $id = (int) $request->getAttribute('user_id'); |
78 | /** @var User $user */ |
79 | $user = User::findOrFail($id); |
80 | |
81 | $models = $user->worklogs(); |
82 | |
83 | $models = $models |
84 | ->orderBy('worked_at') |
85 | ->get(); |
86 | |
87 | $models = WorklogResource::collection($models); |
88 | |
89 | $data = ['data' => $models]; |
90 | return $this->response |
91 | ->withContent(json_encode($data)); |
92 | } |
93 | } |