src/MessageHandler/Query/WorkExample/GetWorkExamplesHandler.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\MessageHandler\Query\WorkExample;
  4. use Slivki\Dto\WorkExample\WorkExampleWithAddressesDto;
  5. use Slivki\Factory\Dto\WorkExample\WorkExampleWithAddressesDtoFactory;
  6. use Slivki\Message\Query\WorkExample\GetWorkExamplesQuery;
  7. use Slivki\Paginator\WorkExample\WorkExamplePaginatorInterface;
  8. use Slivki\Response\PaginateResponse;
  9. use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
  10. use function array_map;
  11. final class GetWorkExamplesHandler implements MessageHandlerInterface
  12. {
  13.     private WorkExamplePaginatorInterface $workExamplePaginator;
  14.     private WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory;
  15.     public function __construct(
  16.         WorkExamplePaginatorInterface $workExamplePaginator,
  17.         WorkExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory
  18.     ) {
  19.         $this->workExamplePaginator $workExamplePaginator;
  20.         $this->workExampleWithAddressesDtoFactory $workExampleWithAddressesDtoFactory;
  21.     }
  22.     public function __invoke(GetWorkExamplesQuery $query): PaginateResponse
  23.     {
  24.         $workExamplesPaginator $this->workExamplePaginator->findAllByQuery($query);
  25.         return new PaginateResponse(
  26.             array_map(
  27.                 fn (array $item): WorkExampleWithAddressesDto => $this->workExampleWithAddressesDtoFactory->create(
  28.                     $item[0],
  29.                     $query->getCurrentUserPosition(),
  30.                 ),
  31.                 (array) $workExamplesPaginator->getItems(),
  32.             ),
  33.             $workExamplesPaginator->getTotalItemCount(),
  34.         );
  35.     }
  36. }