<?php
declare(strict_types=1);
namespace Slivki\MessageHandler\Query\Beauty\Offer;
use Slivki\Message\Query\Beauty\Offer\GetMastersWithFilterQuery;
use Slivki\Paginator\Beauty\Master\MasterPaginatorInterface;
use Slivki\Response\Beauty\Offer\Factory\MasterResponseFactory;
use Slivki\Response\PaginateResponse;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
use function array_map;
final class GetMastersWithFilterHandler implements MessageHandlerInterface
{
private MasterPaginatorInterface $masterPaginator;
private MasterResponseFactory $responseFactory;
public function __construct(MasterPaginatorInterface $masterPaginator, MasterResponseFactory $responseFactory)
{
$this->masterPaginator = $masterPaginator;
$this->responseFactory = $responseFactory;
}
public function __invoke(GetMastersWithFilterQuery $query): PaginateResponse
{
$pagination = $this->masterPaginator->findAllMasterForOfferQueryByFilter($query);
return new PaginateResponse(
array_map(
[$this->responseFactory, 'create'],
(array) $pagination->getItems(),
),
$pagination->getTotalItemCount(),
);
}
}