vendor/bitbag/elasticsearch-plugin/src/Controller/Action/Api/ListProductsByPartialNameAction.php line 22

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file was created by developers working at BitBag
  4.  * Do you need more information about us and what we do? Visit our https://bitbag.io website!
  5.  * We are hiring developers from all over the world. Join us and start your new, exciting adventure and become part of us: https://bitbag.io/career
  6. */
  7. declare(strict_types=1);
  8. namespace BitBag\SyliusElasticsearchPlugin\Controller\Action\Api;
  9. use BitBag\SyliusElasticsearchPlugin\Controller\Response\DTO\Item;
  10. use BitBag\SyliusElasticsearchPlugin\Controller\Response\ItemsResponse;
  11. use BitBag\SyliusElasticsearchPlugin\Finder\NamedProductsFinderInterface;
  12. use BitBag\SyliusElasticsearchPlugin\Transformer\Product\TransformerInterface;
  13. use Sylius\Component\Core\Model\ProductInterface;
  14. use Symfony\Component\HttpFoundation\JsonResponse;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. final class ListProductsByPartialNameAction
  18. {
  19.     /** @var NamedProductsFinderInterface */
  20.     private $namedProductsFinder;
  21.     /** @var TransformerInterface */
  22.     private $productSlugTransformer;
  23.     /** @var TransformerInterface */
  24.     private $productChannelPriceTransformer;
  25.     /** @var TransformerInterface */
  26.     private $productImageTransformer;
  27.     public function __construct(
  28.         NamedProductsFinderInterface $namedProductsFinder,
  29.         TransformerInterface $productSlugResolver,
  30.         TransformerInterface $productChannelPriceResolver,
  31.         TransformerInterface $productImageResolver
  32.     ) {
  33.         $this->namedProductsFinder $namedProductsFinder;
  34.         $this->productSlugTransformer $productSlugResolver;
  35.         $this->productChannelPriceTransformer $productChannelPriceResolver;
  36.         $this->productImageTransformer $productImageResolver;
  37.     }
  38.     public function __invoke(Request $request): Response
  39.     {
  40.         $itemsResponse ItemsResponse::createEmpty();
  41.         if (null === $request->query->get('query')) {
  42.             return JsonResponse::create($itemsResponse->toArray());
  43.         }
  44.         $products $this->namedProductsFinder->findByNamePart($request->query->get('query'));
  45.         /** @var ProductInterface $product */
  46.         foreach ($products as $product) {
  47.             if (null === $productMainTaxon $product->getMainTaxon()) {
  48.                 continue;
  49.             }
  50.             $itemsResponse->addItem(new Item(
  51.                 $productMainTaxon->getName(),
  52.                 $product->getName(),
  53.                 $product->getShortDescription(),
  54.                 $this->productSlugTransformer->transform($product),
  55.                 $this->productChannelPriceTransformer->transform($product),
  56.                 $this->productImageTransformer->transform($product)
  57.             ));
  58.         }
  59.         return JsonResponse::create($itemsResponse->toArray());
  60.     }
  61. }