Passed
Push — master ( 3cf6cb...68bea6 )
by Mike
02:42
created

UserWriter::getUserCredentialsEntity()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 5
ccs 0
cts 5
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
3
4
namespace Xervice\User\Business\Writer;
5
6
7
use DataProvider\UserDataProvider;
8
use DataProvider\UserLoginDataProvider;
9
use Orm\Xervice\User\Persistence\User;
10
use Orm\Xervice\User\Persistence\UserCredential;
11
use Orm\Xervice\User\Persistence\UserLogin;
12
use Xervice\User\Business\Exception\UserException;
13
use Xervice\User\Business\Validator\UserValidatorInterface;
14
use Xervice\User\UserQueryContainerInterface;
15
16
class UserWriter implements UserWriterInterface
17
{
18
    /**
19
     * @var \Xervice\User\Business\Validator\UserValidatorInterface
20
     */
21
    private $validator;
22
23
    /**
24
     * @var \Xervice\User\UserQueryContainerInterface
25
     */
26
    private $queryContainer;
27
28
    /**
29
     * UserWriter constructor.
30
     *
31
     * @param \Xervice\User\Business\Validator\UserValidatorInterface $validator
32
     * @param \Xervice\User\UserQueryContainerInterface $queryContainer
33
     */
34 5
    public function __construct(
35
        UserValidatorInterface $validator,
36
        UserQueryContainerInterface $queryContainer
37
    ) {
38 5
        $this->validator = $validator;
39 5
        $this->queryContainer = $queryContainer;
40 5
    }
41
42
    /**
43
     * @param \DataProvider\UserDataProvider $userDataProvider
44
     *
45
     * @return \DataProvider\UserDataProvider
46
     * @throws \Propel\Runtime\Exception\PropelException
47
     * @throws \Xervice\User\Business\Exception\UserException
48
     */
49 5
    public function createUser(UserDataProvider $userDataProvider): UserDataProvider
50
    {
51 5
        $this->validator->validateUser($userDataProvider);
52
53 5
        $user = new User();
54 5
        return $this->persistUserFromDataProvider($userDataProvider, $user);
55
    }
56
57
    /**
58
     * @param \DataProvider\UserDataProvider $userDataProvider
59
     *
60
     * @return \DataProvider\UserDataProvider
61
     * @throws \Propel\Runtime\Exception\PropelException
62
     * @throws \Xervice\User\Business\Exception\UserException
63
     */
64 1
    public function updateUser(UserDataProvider $userDataProvider): UserDataProvider
65
    {
66 1
        $this->validator->validateUser($userDataProvider);
67
68 1
        $user = $this->queryContainer->getUserQuery()->findOneByUserId($userDataProvider->getUserId());
69 1
        return $this->persistUserFromDataProvider($userDataProvider, $user);
70
    }
71
72
    /**
73
     * @param \DataProvider\UserDataProvider $userDataProvider
74
     *
75
     * @throws \Propel\Runtime\Exception\PropelException
76
     */
77 5
    public function deleteUser(UserDataProvider $userDataProvider): void
78
    {
79 5
        $user = new User();
80 5
        $user->setUserId($userDataProvider->getUserId());
81 5
        $user->delete();
82 5
    }
83
84
    /**
85
     * @param \Orm\Xervice\User\Persistence\User $user
86
     * @param \DataProvider\UserDataProvider $userDataProvider
87
     *
88
     * @return \Orm\Xervice\User\Persistence\User
89
     * @throws \Propel\Runtime\Exception\PropelException
90
     */
91 5
    private function hydrateEntityFromDataProvider(User $user, UserDataProvider $userDataProvider): User
92
    {
93 5
        $user->fromArray($userDataProvider->toArray());
94
95 5
        if ($userDataProvider->hasUserLogins()) {
96 5
            foreach ($userDataProvider->getUserLogins() as $loginDataProvider) {
97 5
                $userLoginEntity = $this->queryContainer->getLoginEntityFromDataProvider($loginDataProvider);
98 5
                $user->addUserLogin($userLoginEntity);
99
            }
100
        }
101
102 5
        return $user;
103
    }
104
105
    /**
106
     * @param \DataProvider\UserDataProvider $userDataProvider
107
     * @param $user
108
     *
109
     * @return \DataProvider\UserDataProvider
110
     * @throws \Propel\Runtime\Exception\PropelException
111
     */
112 5
    private function persistUserFromDataProvider(
113
        UserDataProvider $userDataProvider,
114
        User $user
115
    ): \DataProvider\UserDataProvider {
116
117 5
        $user = $this->hydrateEntityFromDataProvider($user, $userDataProvider);
118 5
        $user->save();
119
120 5
        return $userDataProvider->setUserId($user->getUserId());
121
    }
122
}