UserWriter   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 105
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 105
ccs 28
cts 28
cp 1
rs 10
c 0
b 0
f 0
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A persistUserFromDataProvider() 0 9 1
A deleteUser() 0 5 1
A updateUser() 0 6 1
A createUser() 0 6 1
A hydrateEntityFromDataProvider() 0 12 3
A __construct() 0 6 1
1
<?php
2
3
4
namespace Xervice\User\Business\Model\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\Model\Exception\UserException;
0 ignored issues
show
Bug introduced by
The type Xervice\User\Business\Mo...Exception\UserException was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
13
use Xervice\User\Business\Model\Validator\UserValidatorInterface;
14
use Xervice\User\Persistence\UserDataReader;
15
use Xervice\User\UserQueryContainerInterface;
0 ignored issues
show
Bug introduced by
The type Xervice\User\UserQueryContainerInterface was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
16
17
class UserWriter implements UserWriterInterface
18
{
19
    /**
20
     * @var \Xervice\User\Business\Model\Validator\UserValidatorInterface
21
     */
22
    private $validator;
23
24
    /**
25
     * @var \Xervice\User\Persistence\UserDataReader
26
     */
27
    private $userDataReader;
28
29
    /**
30
     * UserWriter constructor.
31
     *
32
     * @param \Xervice\User\Business\Model\Validator\UserValidatorInterface $validator
33
     * @param \Xervice\User\Persistence\UserDataReader $userDataReader
34
     */
35 7
    public function __construct(
36
        UserValidatorInterface $validator,
37
        UserDataReader $userDataReader
38
    ) {
39 7
        $this->validator = $validator;
40 7
        $this->userDataReader = $userDataReader;
41 7
    }
42
43
    /**
44
     * @param \DataProvider\UserDataProvider $userDataProvider
45
     *
46
     * @return \DataProvider\UserDataProvider
47
     * @throws \Propel\Runtime\Exception\PropelException
48
     * @throws \Xervice\User\Business\Model\Exception\UserException
49
     */
50 7
    public function createUser(UserDataProvider $userDataProvider): UserDataProvider
51
    {
52 7
        $this->validator->validateUser($userDataProvider);
53
54 7
        $user = new User();
55 7
        return $this->persistUserFromDataProvider($userDataProvider, $user);
56
    }
57
58
    /**
59
     * @param \DataProvider\UserDataProvider $userDataProvider
60
     *
61
     * @return \DataProvider\UserDataProvider
62
     * @throws \Propel\Runtime\Exception\PropelException
63
     * @throws \Xervice\User\Business\Model\Exception\UserException
64
     */
65 1
    public function updateUser(UserDataProvider $userDataProvider): UserDataProvider
66
    {
67 1
        $this->validator->validateUser($userDataProvider);
68
69 1
        $user = $this->userDataReader->getUserQuery()->findOneByUserId($userDataProvider->getUserId());
70 1
        return $this->persistUserFromDataProvider($userDataProvider, $user);
71
    }
72
73
    /**
74
     * @param \DataProvider\UserDataProvider $userDataProvider
75
     *
76
     * @throws \Propel\Runtime\Exception\PropelException
77
     */
78 7
    public function deleteUser(UserDataProvider $userDataProvider): void
79
    {
80 7
        $user = new User();
81 7
        $user->setUserId($userDataProvider->getUserId());
82 7
        $user->delete();
83 7
    }
84
85
    /**
86
     * @param \Orm\Xervice\User\Persistence\User $user
87
     * @param \DataProvider\UserDataProvider $userDataProvider
88
     *
89
     * @return \Orm\Xervice\User\Persistence\User
90
     * @throws \Propel\Runtime\Exception\PropelException
91
     */
92 7
    private function hydrateEntityFromDataProvider(User $user, UserDataProvider $userDataProvider): User
93
    {
94 7
        $user->fromArray($userDataProvider->toArray());
95
96 7
        if ($userDataProvider->hasUserLogins()) {
97 7
            foreach ($userDataProvider->getUserLogins() as $loginDataProvider) {
98 7
                $userLoginEntity = $this->userDataReader->getLoginEntityFromDataProvider($loginDataProvider);
99 7
                $user->addUserLogin($userLoginEntity);
100
            }
101
        }
102
103 7
        return $user;
104
    }
105
106
    /**
107
     * @param \DataProvider\UserDataProvider $userDataProvider
108
     * @param $user
109
     *
110
     * @return \DataProvider\UserDataProvider
111
     * @throws \Propel\Runtime\Exception\PropelException
112
     */
113 7
    private function persistUserFromDataProvider(
114
        UserDataProvider $userDataProvider,
115
        User $user
116
    ): \DataProvider\UserDataProvider {
117
118 7
        $user = $this->hydrateEntityFromDataProvider($user, $userDataProvider);
119 7
        $user->save();
120
121 7
        return $userDataProvider->setUserId($user->getUserId());
122
    }
123
}