Passed
Pull Request — master (#61)
by
unknown
05:43
created

CreateWishlistHandler::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 4
dl 0
loc 10
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitBag\SyliusWishlistPlugin\CommandHandler\Wishlist;
6
7
use BitBag\SyliusWishlistPlugin\Command\Wishlist\CreateWishlist;
8
use BitBag\SyliusWishlistPlugin\Entity\WishlistInterface;
9
use BitBag\SyliusWishlistPlugin\Factory\WishlistFactoryInterface;
10
use BitBag\SyliusWishlistPlugin\Resolver\ShopUserWishlistResolverInterface;
11
use Doctrine\Persistence\ObjectManager;
12
use Sylius\Component\Core\Model\ShopUserInterface;
13
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
14
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
15
16
final class CreateWishlistHandler implements MessageHandlerInterface
17
{
18
    private TokenStorageInterface $tokenStorage;
19
20
    private WishlistFactoryInterface $wishlistFactory;
21
22
    private ShopUserWishlistResolverInterface $shopUserWishlistResolver;
23
24
    private ObjectManager $wishlistManager;
25
26
    public function __construct(
27
        TokenStorageInterface $tokenStorage,
28
        WishlistFactoryInterface $wishlistFactory,
29
        ShopUserWishlistResolverInterface $shopUserWishlistResolver,
30
        ObjectManager $wishlistManager
31
    ) {
32
        $this->tokenStorage = $tokenStorage;
33
        $this->wishlistFactory = $wishlistFactory;
34
        $this->shopUserWishlistResolver = $shopUserWishlistResolver;
35
        $this->wishlistManager = $wishlistManager;
36
    }
37
38
    public function __invoke(CreateWishlist $createWishlist): WishlistInterface
39
    {
40
        $token = $this->tokenStorage->getToken();
41
        $user = $token ? $token->getUser() : null;
42
43
        if ($user instanceof ShopUserInterface) {
44
            $wishlist = $this->shopUserWishlistResolver->resolve($user);
45
        } else {
46
            $wishlist = $this->wishlistFactory->createNew();
47
        }
48
49
        $this->wishlistManager->persist($wishlist);
50
        $this->wishlistManager->flush();
51
52
        return $wishlist;
53
    }
54
}
55