src/MessageHandler/Query/Beauty/Offer/GetMastersHandler.php line 38

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Slivki\MessageHandler\Query\Beauty\Offer;
  4. use Slivki\Entity\GeoLocation;
  5. use Slivki\Message\Query\Beauty\Offer\GetMastersQuery;
  6. use Slivki\Repository\Beauty\Masters\BeautyMasterRepositoryInterface;
  7. use Slivki\Repository\Offer\OfferRepositoryInterface;
  8. use Slivki\Response\Beauty\Offer\Factory\MasterResponseFactory;
  9. use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
  10. use function array_map;
  11. final class GetMastersHandler implements MessageHandlerInterface
  12. {
  13.     private OfferRepositoryInterface $offerRepository;
  14.     private BeautyMasterRepositoryInterface $beautyMasterRepository;
  15.     private MasterResponseFactory $responseFactory;
  16.     public function __construct(
  17.         OfferRepositoryInterface $offerRepository,
  18.         BeautyMasterRepositoryInterface $beautyMasterRepository,
  19.         MasterResponseFactory $responseFactory
  20.     ) {
  21.         $this->offerRepository $offerRepository;
  22.         $this->beautyMasterRepository $beautyMasterRepository;
  23.         $this->responseFactory $responseFactory;
  24.     }
  25.     public function __invoke(GetMastersQuery $query): array
  26.     {
  27.         $offer $this->offerRepository->getById($query->getOfferId());
  28.         $geoLocationIds array_map(
  29.             static fn (GeoLocation $geoLocation): int => $geoLocation->getID(),
  30.             $offer->getGeoLocations()->toArray(),
  31.         );
  32.         return array_map(
  33.             [$this->responseFactory'create'],
  34.             $this->beautyMasterRepository->findByGeoLocationIds($geoLocationIds),
  35.         );
  36.     }
  37. }