<?php
declare(strict_types=1);
namespace Slivki\MessageHandler\Query\Beauty\Offer;
use Slivki\Dto\WorkExample\WorkExampleWithAddressesDto;
use Slivki\Entity\WorkExample;
use Slivki\Factory\Dto\WorkExample\WorkExampleWithAddressesDtoFactory;
use Slivki\Message\Query\Beauty\Offer\GetWorkExampleOfMasterQuery;
use Slivki\Paginator\WorkExample\WorkExamplePaginatorInterface;
use Slivki\Response\PaginateResponse;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
use function array_map;
final class GetWorkExampleOfMasterHandler implements MessageHandlerInterface
{
private WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory;
private WorkExamplePaginatorInterface $workExamplePaginator;
public function __construct(
WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory,
WorkExamplePaginatorInterface $workExamplePaginator
) {
$this->workExampleWithAddressesDtoFactory = $workExampleWithAddressesDtoFactory;
$this->workExamplePaginator = $workExamplePaginator;
}
public function __invoke(GetWorkExampleOfMasterQuery $query): PaginateResponse
{
$pagination = $this->workExamplePaginator->findByMaster($query);
return new PaginateResponse(
array_map(
fn (WorkExample $workExample): WorkExampleWithAddressesDto => $this->workExampleWithAddressesDtoFactory->create(
$workExample,
null,
),
$pagination->getItems(),
),
$pagination->getTotalItemCount(),
);
}
}