Completed
Push — master ( 785fac...ceacae )
by Beñat
03:05
created

InviteUserHandler::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 9
rs 9.6666
cc 1
eloc 7
nc 1
nop 3
1
<?php
2
3
/*
4
 * This file is part of the BenGorUser package.
5
 *
6
 * (c) Beñat Espiña <[email protected]>
7
 * (c) Gorka Laucirica <[email protected]>
8
 *
9
 * For the full copyright and license information, please view the LICENSE
10
 * file that was distributed with this source code.
11
 */
12
13
namespace BenGorUser\User\Application\Command\Invite;
14
15
use BenGorUser\User\Domain\Model\Exception\UserAlreadyExistException;
16
use BenGorUser\User\Domain\Model\UserEmail;
17
use BenGorUser\User\Domain\Model\UserGuestFactory;
18
use BenGorUser\User\Domain\Model\UserGuestRepository;
19
use BenGorUser\User\Domain\Model\UserRepository;
20
21
/**
22
 * Invite user command handler class.
23
 *
24
 * @author Beñat Espiña <[email protected]>
25
 * @author Gorka Laucirica <[email protected]>
26
 */
27
class InviteUserHandler
28
{
29
    /**
30
     * The user guest factory.
31
     *
32
     * @var UserGuestFactory
33
     */
34
    private $userGuestFactory;
35
36
    /**
37
     * The user repository.
38
     *
39
     * @var UserRepository
40
     */
41
    private $userRepository;
42
43
    /**
44
     * The user guest repository.
45
     *
46
     * @var UserGuestRepository
47
     */
48
    private $userGuestRepository;
49
50
    /**
51
     * Constructor.
52
     *
53
     * @param UserRepository      $aUserRepository      The user repository
54
     * @param UserGuestRepository $aUserGuestRepository The user guest repository
55
     * @param UserGuestFactory    $aUserGuestFactory    The user guest factory
56
     */
57
    public function __construct(
58
        UserRepository $aUserRepository,
59
        UserGuestRepository $aUserGuestRepository,
60
        UserGuestFactory $aUserGuestFactory
61
    ) {
62
        $this->userRepository = $aUserRepository;
63
        $this->userGuestRepository = $aUserGuestRepository;
64
        $this->userGuestFactory = $aUserGuestFactory;
65
    }
66
67
    /**
68
     * Handles the given command.
69
     *
70
     * @param InviteUserCommand $aCommand The command
71
     *
72
     * @throws UserAlreadyExistException when the user already exists
73
     */
74
    public function __invoke(InviteUserCommand $aCommand)
75
    {
76
        $email = new UserEmail($aCommand->email());
77
78
        $user = $this->userRepository->userOfEmail($email);
79
        if (null !== $user) {
80
            throw new UserAlreadyExistException();
81
        }
82
83
        $userGuest = $this->userGuestRepository->userGuestOfEmail($email);
84
        if (null === $userGuest) {
85
            $userGuest = $this->userGuestFactory->register(
86
                $this->userGuestRepository->nextIdentity(),
87
                $email
88
            );
89
        } else {
90
            $userGuest->regenerateInvitationToken();
91
        }
92
93
        $this->userGuestRepository->persist($userGuest);
94
    }
95
}
96