<?php
declare(strict_types=1);
namespace Slivki\MessageHandler\Query\WorkExample;
use Slivki\Dto\WorkExample\WorkExampleWithAddressesDto;
use Slivki\Factory\Dto\WorkExample\WorkExampleWithAddressesDtoFactory;
use Slivki\Message\Query\WorkExample\GetWorkExamplesQuery;
use Slivki\Paginator\WorkExample\WorkExamplePaginatorInterface;
use Slivki\Response\PaginateResponse;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
use function array_map;
final class GetWorkExamplesHandler implements MessageHandlerInterface
{
private WorkExamplePaginatorInterface $workExamplePaginator;
private WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory;
public function __construct(
WorkExamplePaginatorInterface $workExamplePaginator,
WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory
) {
$this->workExamplePaginator = $workExamplePaginator;
$this->workExampleWithAddressesDtoFactory = $workExampleWithAddressesDtoFactory;
}
public function __invoke(GetWorkExamplesQuery $query): PaginateResponse
{
$workExamplesPaginator = $this->workExamplePaginator->findAllByQuery($query);
return new PaginateResponse(
array_map(
fn (array $item): WorkExampleWithAddressesDto => $this->workExampleWithAddressesDtoFactory->create(
$item[0],
$query->getCurrentUserPosition(),
),
(array) $workExamplesPaginator->getItems(),
),
$workExamplesPaginator->getTotalItemCount(),
);
}
}