Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ListUsersController
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 list
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace App\Identity\Infrastructure\Controllers\Admin;
6
7use App\Identity\Application\Query\ListUsersHandler;
8use App\Identity\Application\Query\ListUsersQuery;
9use OpenApi\Attributes as OA;
10use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11use Symfony\Component\HttpFoundation\JsonResponse;
12use Symfony\Component\HttpFoundation\Request;
13use Symfony\Component\Routing\Attribute\Route;
14
15#[OA\Tag(name: 'Admin')]
16class ListUsersController extends AbstractController
17{
18    private const MAX_SIZE = 100;
19
20    public function __construct(
21        private readonly ListUsersHandler $handler,
22    ) {
23    }
24
25    /**
26     * A page of registered users (never the password hash), newest registration last.
27     * `page` is 1-based; `size` is clamped to [1, 100]. Response: {items, total, page, size}.
28     */
29    #[Route('/admin/users', name: 'admin_users_list', methods: ['GET'])]
30    public function list(Request $request): JsonResponse
31    {
32        $page = max(1, $request->query->getInt('page', 1));
33        $size = min(self::MAX_SIZE, max(1, $request->query->getInt('size', 20)));
34
35        return new JsonResponse($this->handler->handle(new ListUsersQuery($page, $size)));
36    }
37}