src/Component/ProductComparer/Controller/AddToCompareAction.php line 36

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\ProductComparer\Controller;
  4. use BitBag\OpenMarketplace\Component\Core\Common\Helper\FlashHelperInterface;
  5. use BitBag\OpenMarketplace\Component\Product\Entity\ProductInterface;
  6. use BitBag\OpenMarketplace\Component\Product\Repository\ProductRepositoryInterface;
  7. use BitBag\OpenMarketplace\Component\ProductComparer\Event\MissingCookieException;
  8. use BitBag\OpenMarketplace\Component\ProductComparer\Manager\ProductComparerManagerInterface;
  9. use RuntimeException;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. final class AddToCompareAction
  14. {
  15.     public function __construct(
  16.         private ProductRepositoryInterface $productRepository,
  17.         private ProductComparerManagerInterface $productComparerManager,
  18.         private FlashHelperInterface $flashHelper,
  19.         ) {
  20.     }
  21.     public function __invoke(Request $request): Response
  22.     {
  23.         $product $this->productRepository->find($request->get('productId'));
  24.         if (!$product instanceof ProductInterface) {
  25.             $this->flashHelper->addFlashMessage(
  26.                 FlashHelperInterface::ERROR,
  27.                 'app.product_compare.fail',
  28.             );
  29.             return $this->generateResponse($request);
  30.         }
  31.         try {
  32.             $this->productComparerManager->addProductToCompare($product);
  33.         } catch (RuntimeException) {
  34.             $this->flashHelper->addFlashMessage(
  35.                 FlashHelperInterface::ERROR,
  36.                 'app.product_compare.fail',
  37.             );
  38.             return $this->generateResponse($request);
  39.         } catch (MissingCookieException) {
  40.             $this->flashHelper->addFlashMessage(
  41.                 FlashHelperInterface::ERROR,
  42.                 'app.product_compare.missing_cookie',
  43.             );
  44.             return $this->generateResponse($request);
  45.         }
  46.         $this->flashHelper->addFlashMessage(
  47.             FlashHelperInterface::SUCCESS,
  48.             'app.product_compare.added',
  49.         );
  50.         return $this->generateResponse($request);
  51.     }
  52.     private function generateResponse(Request $request): Response
  53.     {
  54.         /** @var string $referer */
  55.         $referer $request->headers->get('referer');
  56.         return new RedirectResponse($referer);
  57.     }
  58. }