Passed
Pull Request — master (#81)
by
unknown
04:59
created

CreateNewWishlistHandler::__invoke()   A

Complexity

Conditions 4
Paths 8

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 4
eloc 10
c 2
b 0
f 0
nc 8
nop 1
dl 0
loc 18
rs 9.9332
1
<?php
2
3
/*
4
 * This file was created by developers working at BitBag
5
 * Do you need more information about us and what we do? Visit our https://bitbag.io website!
6
 * 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
7
*/
8
9
declare(strict_types=1);
10
11
namespace BitBag\SyliusWishlistPlugin\CommandHandler\Wishlist;
12
13
use BitBag\SyliusWishlistPlugin\Command\Wishlist\CreateNewWishlist;
14
use BitBag\SyliusWishlistPlugin\Factory\WishlistFactoryInterface;
15
use BitBag\SyliusWishlistPlugin\Repository\WishlistRepositoryInterface;
16
use BitBag\SyliusWishlistPlugin\Resolver\WishlistCookieTokenResolverInterface;
17
use Sylius\Component\Core\Model\ShopUserInterface;
18
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
19
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
20
21
final class CreateNewWishlistHandler implements MessageHandlerInterface
22
{
23
    private WishlistRepositoryInterface $wishlistRepository;
24
25
    private TokenStorageInterface $tokenStorage;
26
27
    private WishlistFactoryInterface $wishlistFactory;
28
29
    private WishlistCookieTokenResolverInterface $wishlistCookieTokenResolver;
30
31
    public function __construct(
32
        WishlistRepositoryInterface $wishlistRepository,
33
        TokenStorageInterface $tokenStorage,
34
        WishlistFactoryInterface $wishlistFactory,
35
        WishlistCookieTokenResolverInterface $wishlistCookieTokenResolver
36
    ) {
37
        $this->wishlistRepository = $wishlistRepository;
38
        $this->tokenStorage = $tokenStorage;
39
        $this->wishlistFactory = $wishlistFactory;
40
        $this->wishlistCookieTokenResolver = $wishlistCookieTokenResolver;
41
    }
42
43
    public function __invoke(CreateNewWishlist $createNewWishlist): void
44
    {
45
        $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
46
47
        if ($user instanceof ShopUserInterface) {
48
            $wishlist = $this->wishlistFactory->createForUser($user);
49
        } else {
50
            $wishlist = $this->wishlistFactory->createNew();
51
        }
52
53
        $wishlistCookieToken = $this->wishlistCookieTokenResolver->resolve();
54
55
        if ($wishlistCookieToken) {
56
            $wishlist->setToken($wishlistCookieToken);
57
        }
58
59
        $wishlist->setName($createNewWishlist->getName());
60
        $this->wishlistRepository->add($wishlist);
61
    }
62
}
63