UsersController::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 0
nc 1
nop 2
dl 0
loc 4
ccs 1
cts 1
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types = 1);
3
/**
4
 * /src/Controller/v1/UserGroup/UsersController.php
5
 *
6
 * @author TLe, Tarmo Leppänen <[email protected]>
7
 */
8
9
namespace App\Controller\v1\UserGroup;
10
11
use App\Entity\User;
12
use App\Entity\UserGroup;
13
use App\Enum\Role;
14
use App\Resource\UserResource;
15
use App\Rest\ResponseHandler;
16
use Nelmio\ApiDocBundle\Annotation\Model;
17
use OpenApi\Attributes as OA;
18
use OpenApi\Attributes\JsonContent;
19
use OpenApi\Attributes\Property;
20
use Symfony\Component\HttpFoundation\Request;
21
use Symfony\Component\HttpFoundation\Response;
22
use Symfony\Component\HttpKernel\Attribute\AsController;
23
use Symfony\Component\Routing\Annotation\Route;
24
use Symfony\Component\Routing\Requirement\Requirement;
25
use Symfony\Component\Security\Http\Attribute\IsGranted;
26
use Throwable;
27
28
/**
29
 * Class UsersController
30
 *
31
 * @package App\Controller\v1\UserGroup
32
 * @author TLe, Tarmo Leppänen <[email protected]>
33
 */
34
#[AsController]
35
class UsersController
36
{
37 6
    public function __construct(
38
        private readonly UserResource $userResource,
39
        private readonly ResponseHandler $responseHandler,
40
    ) {
41 6
    }
42
43
    /**
44
     * Endpoint action to list specified user group users.
45
     *
46
     * @throws Throwable
47
     */
48 6
    #[Route(
49
        path: '/v1/user_group/{userGroup}/users',
50
        requirements: [
51
            'userGroup' => Requirement::UUID_V1,
52
        ],
53
        methods: [Request::METHOD_GET],
54
    )]
55
    #[IsGranted(Role::ROOT->value)]
56
    #[OA\Tag(name: 'UserGroup Management')]
57
    #[OA\Parameter(
58
        name: 'Authorization',
59
        description: 'Authorization header',
60
        in: 'header',
61
        required: true,
62
        example: 'Bearer {token}',
63
        allowReserved: true,
64
    )]
65
    #[OA\Response(
66
        response: 200,
67
        description: 'User group users',
68
        content: new JsonContent(
69
            type: 'array',
70
            items: new OA\Items(
71
                ref: new Model(
72
                    type: User::class,
73
                    groups: ['User', 'User.userGroups', 'User.roles', 'UserGroup', 'UserGroup.role']
74
                ),
75
            ),
76
        ),
77
    )]
78
    #[OA\Response(
79
        response: 401,
80
        description: 'Invalid token',
81
        content: new JsonContent(
82
            properties: [
83
                new Property(property: 'code', type: 'integer'),
84
                new Property(property: 'message', type: 'string'),
85
            ],
86
            type: 'object',
87
            example: [
88
                'Token not found' => "{code: 401, message: 'JWT Token not found'}",
89
                'Expired token' => "{code: 401, message: 'Expired JWT Token'}",
90
            ],
91
        ),
92
    )]
93
    #[OA\Response(
94
        response: 403,
95
        description: 'Access denied',
96
        content: new JsonContent(
97
            properties: [
98
                new Property(property: 'code', type: 'integer'),
99
                new Property(property: 'message', type: 'string'),
100
            ],
101
            type: 'object',
102
            example: [
103
                'Access denied' => "{code: 403, message: 'Access denied'}",
104
            ],
105
        ),
106
    )]
107
    public function __invoke(Request $request, UserGroup $userGroup): Response
108
    {
109 6
        return $this->responseHandler
110 6
            ->createResponse($request, $this->userResource->getUsersForGroup($userGroup), $this->userResource);
111
    }
112
}
113