Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
UsersController
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
4 / 4
5
100.00% covered (success)
100.00%
1 / 1
 index
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
1
 user
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 entriesByAngeltype
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
1
 worklogs
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Engelsystem\Controllers\Api;
6
7use Engelsystem\Controllers\Api\Resources\UserAngelTypeReferenceResource;
8use Engelsystem\Controllers\Api\Resources\UserDetailResource;
9use Engelsystem\Controllers\Api\Resources\UserResource;
10use Engelsystem\Controllers\Api\Resources\WorklogResource;
11use Engelsystem\Http\Request;
12use Engelsystem\Http\Response;
13use Engelsystem\Models\AngelType;
14use Engelsystem\Models\BaseModel;
15use Engelsystem\Models\User\User;
16use Engelsystem\Models\UserAngelType;
17use Illuminate\Database\Eloquent\Collection;
18
19class 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}