Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ListUsersHandler
100.00% covered (success)
100.00%
12 / 12
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
 handle
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace App\Identity\Application\Query;
6
7use App\Identity\Domain\UserRepository;
8use App\Shared\Infrastructure\Storage\SignedImageUrl;
9
10final class ListUsersHandler
11{
12    public function __construct(
13        private readonly UserRepository $users,
14        private readonly SignedImageUrl $imageUrls,
15    ) {
16    }
17
18    /**
19     * @return array{items: list<array<string, string|bool|null>>, total: int, page: int, size: int}
20     */
21    public function handle(ListUsersQuery $query): array
22    {
23        $offset = ($query->page - 1) * $query->size;
24
25        $items = array_map(
26            fn ($user): array => AdminUserView::fromUser($user, $this->imageUrls->for($user->avatarName()))->toArray(),
27            $this->users->paginate($offset, $query->size),
28        );
29
30        return [
31            'items' => $items,
32            'total' => $this->users->count(),
33            'page' => $query->page,
34            'size' => $query->size,
35        ];
36    }
37}