Code Duplication    Length = 97-98 lines in 2 locations

src/BenGorUser/User/Application/Service/SignUp/ByInvitationSignUpUserHandler.php 1 location

@@ 31-128 (lines=98) @@
28
 * @author Beñat Espiña <[email protected]>
29
 * @author Gorka Laucirica <[email protected]>
30
 */
31
class ByInvitationSignUpUserHandler
32
{
33
    /**
34
     * The user data transformer.
35
     *
36
     * @var UserDataTransformer
37
     */
38
    private $dataTransformer;
39
40
    /**
41
     * The user password encoder.
42
     *
43
     * @var UserPasswordEncoder
44
     */
45
    private $encoder;
46
47
    /**
48
     * The user factory.
49
     *
50
     * @var UserFactory
51
     */
52
    private $factory;
53
54
    /**
55
     * The user repository.
56
     *
57
     * @var UserRepository
58
     */
59
    private $userRepository;
60
61
    /**
62
     * The user guest repository.
63
     *
64
     * @var UserGuestRepository
65
     */
66
    private $userGuestRepository;
67
68
    /**
69
     * Constructor.
70
     *
71
     * @param UserRepository      $aUserRepository      The user repository
72
     * @param UserPasswordEncoder $anEncoder            The password encoder
73
     * @param UserFactory         $aFactory             The user factory
74
     * @param UserDataTransformer $aDataTransformer     The user data transformer
75
     * @param UserGuestRepository $aUserGuestRepository The user guest repository
76
     */
77
    public function __construct(
78
        UserRepository $aUserRepository,
79
        UserPasswordEncoder $anEncoder,
80
        UserFactory $aFactory,
81
        UserDataTransformer $aDataTransformer,
82
        UserGuestRepository $aUserGuestRepository
83
    ) {
84
        $this->userRepository = $aUserRepository;
85
        $this->encoder = $anEncoder;
86
        $this->factory = $aFactory;
87
        $this->dataTransformer = $aDataTransformer;
88
        $this->userGuestRepository = $aUserGuestRepository;
89
    }
90
91
    /**
92
     * Handles the given command.
93
     *
94
     * @param ByInvitationSignUpUserCommand $aCommand The command
95
     *
96
     * @throws UserGuestDoesNotExistException when the user guest does not exist
97
     *
98
     * @return mixed
99
     */
100
    public function __invoke(ByInvitationSignUpUserCommand $aCommand)
101
    {
102
        $userGuest = $this->userGuestRepository->userGuestOfInvitationToken(
103
            new UserToken($aCommand->invitationToken())
104
        );
105
        if (null === $userGuest) {
106
            throw new UserGuestDoesNotExistException();
107
        }
108
        $email = $userGuest->email();
109
        $this->userGuestRepository->remove($userGuest);
110
111
        $userRoles = array_map(function ($role) {
112
            return new UserRole($role);
113
        }, $aCommand->roles());
114
115
        $user = $this->factory->register(
116
            $this->userRepository->nextIdentity(),
117
            $email,
118
            UserPassword::fromPlain($aCommand->password(), $this->encoder),
119
            $userRoles
120
        );
121
        $user->enableAccount();
122
123
        $this->userRepository->persist($user);
124
        $this->dataTransformer->write($user);
125
126
        return $this->dataTransformer->read();
127
    }
128
}
129

src/BenGorUser/User/Application/Service/SignUp/ByInvitationWithConfirmationSignUpUserHandler.php 1 location

@@ 31-127 (lines=97) @@
28
 * @author Beñat Espiña <[email protected]>
29
 * @author Gorka Laucirica <[email protected]>
30
 */
31
class ByInvitationWithConfirmationSignUpUserHandler
32
{
33
    /**
34
     * The user data transformer.
35
     *
36
     * @var UserDataTransformer
37
     */
38
    private $dataTransformer;
39
40
    /**
41
     * The user password encoder.
42
     *
43
     * @var UserPasswordEncoder
44
     */
45
    private $encoder;
46
47
    /**
48
     * The user factory.
49
     *
50
     * @var UserFactory
51
     */
52
    private $factory;
53
54
    /**
55
     * The user repository.
56
     *
57
     * @var UserRepository
58
     */
59
    private $userRepository;
60
61
    /**
62
     * The user guest repository.
63
     *
64
     * @var UserGuestRepository
65
     */
66
    private $userGuestRepository;
67
68
    /**
69
     * Constructor.
70
     *
71
     * @param UserRepository      $aUserRepository      The user repository
72
     * @param UserPasswordEncoder $anEncoder            The password encoder
73
     * @param UserFactory         $aFactory             The user factory
74
     * @param UserDataTransformer $aDataTransformer     The user data transformer
75
     * @param UserGuestRepository $aUserGuestRepository The user guest repository
76
     */
77
    public function __construct(
78
        UserRepository $aUserRepository,
79
        UserPasswordEncoder $anEncoder,
80
        UserFactory $aFactory,
81
        UserDataTransformer $aDataTransformer,
82
        UserGuestRepository $aUserGuestRepository
83
    ) {
84
        $this->userRepository = $aUserRepository;
85
        $this->encoder = $anEncoder;
86
        $this->factory = $aFactory;
87
        $this->dataTransformer = $aDataTransformer;
88
        $this->userGuestRepository = $aUserGuestRepository;
89
    }
90
91
    /**
92
     * Handles the given command.
93
     *
94
     * @param ByInvitationWithConfirmationSignUpUserCommand $aCommand The command
95
     *
96
     * @throws UserGuestDoesNotExistException when the user guest does not exist
97
     *
98
     * @return mixed
99
     */
100
    public function __invoke(ByInvitationWithConfirmationSignUpUserCommand $aCommand)
101
    {
102
        $userGuest = $this->userGuestRepository->userGuestOfInvitationToken(
103
            new UserToken($aCommand->invitationToken())
104
        );
105
        if (null === $userGuest) {
106
            throw new UserGuestDoesNotExistException();
107
        }
108
        $email = $userGuest->email();
109
        $this->userGuestRepository->remove($userGuest);
110
111
        $userRoles = array_map(function ($role) {
112
            return new UserRole($role);
113
        }, $aCommand->roles());
114
115
        $user = $this->factory->register(
116
            $this->userRepository->nextIdentity(),
117
            $email,
118
            UserPassword::fromPlain($aCommand->password(), $this->encoder),
119
            $userRoles
120
        );
121
122
        $this->userRepository->persist($user);
123
        $this->dataTransformer->write($user);
124
125
        return $this->dataTransformer->read();
126
    }
127
}
128