AffiliateReferralAssigner::assign()   A
last analyzed

Complexity

Conditions 4
Paths 4

Size

Total Lines 22
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 10
nc 4
nop 1
dl 0
loc 22
rs 9.9332
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Odiseo\SyliusReferralsPlugin\Assigner;
6
7
use Odiseo\SyliusReferralsPlugin\Entity\AffiliateReferralAwareInterface;
8
use Odiseo\SyliusReferralsPlugin\Entity\AffiliateReferralInterface;
9
use Odiseo\SyliusReferralsPlugin\Repository\AffiliateReferralRepositoryInterface;
10
use Sylius\Component\Core\Model\OrderInterface;
11
use Symfony\Component\HttpFoundation\Session\Session;
12
13
final class AffiliateReferralAssigner implements AffiliateReferralAssignerInterface
14
{
15
    public function __construct(
16
        private AffiliateReferralRepositoryInterface $affiliateReferralRepository,
17
    ) {
18
    }
19
20
    public function assign(OrderInterface $order): void
21
    {
22
        $session = new Session();
23
24
        if (!$session->has(AffiliateReferralInterface::TOKEN_PARAM_NAME)) {
25
            return;
26
        }
27
28
        /** @var AffiliateReferralInterface|null $affiliateReferral */
29
        $affiliateReferral = $this->affiliateReferralRepository->findOneBy([
30
            'tokenValue' => $session->get(AffiliateReferralInterface::TOKEN_PARAM_NAME),
31
        ]);
32
33
        if (null === $affiliateReferral) {
34
            return;
35
        }
36
37
        if ($order instanceof AffiliateReferralAwareInterface) {
38
            $order->setAffiliateReferral($affiliateReferral);
39
        }
40
41
        $session->remove(AffiliateReferralInterface::TOKEN_PARAM_NAME);
42
    }
43
}
44