vendor/bitbag/wishlist-plugin/src/CommandHandler/Wishlist/CreateWishlistHandler.php line 65

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\SyliusWishlistPlugin\CommandHandler\Wishlist;
  9. use BitBag\SyliusWishlistPlugin\Command\Wishlist\CreateWishlist;
  10. use BitBag\SyliusWishlistPlugin\Entity\WishlistInterface;
  11. use BitBag\SyliusWishlistPlugin\Factory\WishlistFactoryInterface;
  12. use BitBag\SyliusWishlistPlugin\Resolver\ShopUserWishlistResolverInterface;
  13. use BitBag\SyliusWishlistPlugin\Resolver\TokenUserResolverInterface;
  14. use Doctrine\Persistence\ObjectManager;
  15. use Sylius\Component\Channel\Repository\ChannelRepositoryInterface;
  16. use Sylius\Component\Core\Model\ShopUserInterface;
  17. use Symfony\Component\HttpFoundation\RequestStack;
  18. use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
  19. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  20. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  21. use Webmozart\Assert\Assert;
  22. final class CreateWishlistHandler implements MessageHandlerInterface
  23. {
  24.     private TokenStorageInterface $tokenStorage;
  25.     private WishlistFactoryInterface $wishlistFactory;
  26.     private ShopUserWishlistResolverInterface $shopUserWishlistResolver;
  27.     private ObjectManager $wishlistManager;
  28.     private ChannelRepositoryInterface $channelRepository;
  29.     private TokenUserResolverInterface $tokenUserResolver;
  30.     private RequestStack $requestStack;
  31.     private string $wishlistCookieToken;
  32.     public function __construct(
  33.         TokenStorageInterface $tokenStorage,
  34.         WishlistFactoryInterface $wishlistFactory,
  35.         ShopUserWishlistResolverInterface $shopUserWishlistResolver,
  36.         ObjectManager $wishlistManager,
  37.         ChannelRepositoryInterface $channelRepository,
  38.         TokenUserResolverInterface $tokenUserResolver,
  39.         RequestStack $requestStack,
  40.         string $wishlistCookieToken,
  41.     ) {
  42.         $this->tokenStorage $tokenStorage;
  43.         $this->wishlistFactory $wishlistFactory;
  44.         $this->shopUserWishlistResolver $shopUserWishlistResolver;
  45.         $this->wishlistManager $wishlistManager;
  46.         $this->channelRepository $channelRepository;
  47.         $this->tokenUserResolver $tokenUserResolver;
  48.         $this->requestStack $requestStack;
  49.         $this->wishlistCookieToken $wishlistCookieToken;
  50.     }
  51.     public function __invoke(CreateWishlist $createWishlist): WishlistInterface
  52.     {
  53.         /** @var ?TokenInterface $token */
  54.         $token $this->tokenStorage->getToken();
  55.         $user $this->tokenUserResolver->resolve($token);
  56.         /** @var WishlistInterface $wishlist */
  57.         $wishlist $this->wishlistFactory->createNew();
  58.         $wishlist->setName('Wishlist');
  59.         if ($user instanceof ShopUserInterface) {
  60.             $wishlist $this->shopUserWishlistResolver->resolve($user);
  61.         }
  62.         if (null !== $createWishlist->getTokenValue())
  63.         {
  64.             $wishlist->setToken($createWishlist->getTokenValue());
  65.             $mainRequest $this->requestStack->getMainRequest();
  66.             Assert::notNull($mainRequest'The handler is destined to HTTP context only');
  67.             $mainRequest->attributes->set($this->wishlistCookieToken$createWishlist->getTokenValue());
  68.         }
  69.         $channelCode $createWishlist->getChannelCode();
  70.         $channel null !== $channelCode $this->channelRepository->findOneByCode($channelCode) : null;
  71.         if (null !== $channel) {
  72.             $wishlist->setChannel($channel);
  73.         }
  74.         $this->wishlistManager->persist($wishlist);
  75.         $this->wishlistManager->flush();
  76.         return $wishlist;
  77.     }
  78. }