src/MessageHandler/Query/Beauty/Offer/GetMastersWithFilterHandler.php line 34

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\MessageHandler\Query\Beauty\Offer;
  4. use Slivki\Message\Query\Beauty\Offer\GetMastersWithFilterQuery;
  5. use Slivki\Paginator\Beauty\Master\MasterPaginatorInterface;
  6. use Slivki\Response\Beauty\Offer\Factory\MasterResponseFactory;
  7. use Slivki\Response\PaginateResponse;
  8. use Slivki\Services\Beauty\BeautyMasterResponseDistanceUpdater;
  9. use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
  10. use function array_map;
  11. final class GetMastersWithFilterHandler implements MessageHandlerInterface
  12. {
  13.     private MasterPaginatorInterface $masterPaginator;
  14.     private MasterResponseFactory $responseFactory;
  15.     private BeautyMasterResponseDistanceUpdater $beautyMasterResponseDistanceUpdater;
  16.     public function __construct(
  17.         MasterPaginatorInterface $masterPaginator,
  18.         MasterResponseFactory $responseFactory,
  19.         BeautyMasterResponseDistanceUpdater $beautyMasterResponseDistanceUpdater
  20.     ) {
  21.         $this->masterPaginator $masterPaginator;
  22.         $this->responseFactory $responseFactory;
  23.         $this->beautyMasterResponseDistanceUpdater $beautyMasterResponseDistanceUpdater;
  24.     }
  25.     public function __invoke(GetMastersWithFilterQuery $query): PaginateResponse
  26.     {
  27.         $pagination $this->masterPaginator->findAllMasterForOfferQueryByFilter($query);
  28.         $masters array_map(
  29.             [$this->responseFactory'create'],
  30.             (array) $pagination->getItems(),
  31.         );
  32.         $currentUserPosition $query->getCurrentUserPosition();
  33.         if (null === $currentUserPosition) {
  34.             return new PaginateResponse(
  35.                 $masters,
  36.                 $pagination->getTotalItemCount(),
  37.             );
  38.         }
  39.         $updatedMasters = [];
  40.         foreach ($masters as $master) {
  41.             $updatedMasters[] = $this->beautyMasterResponseDistanceUpdater->updateMasterResponse($master$currentUserPosition);
  42.         }
  43.         return new PaginateResponse(
  44.             $updatedMasters,
  45.             $pagination->getTotalItemCount(),
  46.         );
  47.     }
  48. }