Passed
Push — main ( 52ce48...69bf1c )
by Iain
07:03
created

CustomerCreatedSubscriber::convertBillingAddress()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 7
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 10
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * Copyright (C) 2020-2024 Iain Cambridge
7
 *
8
 *     This program is free software: you can redistribute it and/or modify
9
 *     it under the terms of the GNU General Public License as published by
10
 *     the Free Software Foundation, either version 3 of the License, or
11
 *     (at your option) any later version.
12
 *
13
 *     This program is distributed in the hope that it will be useful,
14
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 *     GNU General Public License for more details.
17
 *
18
 *     You should have received a copy of the GNU General Public License
19
 *     along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
 */
21
22
namespace Parthenon\Billing\Subscriber;
23
24
use Parthenon\Billing\Customer\CustomerRegisterInterface;
25
use Parthenon\Billing\Entity\CustomerInterface;
26
use Parthenon\Billing\Exception\NoCustomerException;
27
use Parthenon\User\Entity\MemberInterface;
28
use Parthenon\User\Event\PostUserSignupEvent;
29
use Parthenon\User\Repository\UserRepositoryInterface;
30
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
31
32
final class CustomerCreatedSubscriber implements EventSubscriberInterface
33
{
34
    public function __construct(
35
        private UserRepositoryInterface $userRepository,
36
        private CustomerRegisterInterface $customerRegister,
37
    ) {
38
    }
39
40
    public static function getSubscribedEvents()
41
    {
42
        return [
43
            PostUserSignupEvent::NAME => ['userCreated', 0],
44
        ];
45
    }
46
47
    public function userCreated(PostUserSignupEvent $event)
48
    {
49
        $user = $event->getUser();
50
51
        if ($user instanceof MemberInterface && $user->getTeam() instanceof CustomerInterface) {
52
            $customer = $user->getTeam();
53
        } elseif ($user instanceof CustomerInterface) {
54
            $customer = $user;
55
        } else {
56
            throw new NoCustomerException(sprintf('There is no BillaBear customer'));
57
        }
58
59
        $this->customerRegister->createCustomer($customer);
60
        $this->userRepository->save($customer);
61
    }
62
}
63