Completed
Branch v2.0.0 (e47d62)
by Alexander
03:40
created

UserFactory   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 6
dl 0
loc 49
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 16 1
A retrieve() 0 29 4
1
<?php
2
3
namespace Domain\User\Factories;
4
5
use Domain\User\Exceptions\UserException;
6
use Domain\User\Specifications\UserSpecification;
7
use Domain\User\User;
8
use Domain\User\UserRepository;
9
10
class UserFactory
11
{
12
    public static function create(array $data = []): User
13
    {
14
        $filteredObject = UserFilterFactory::sanitizeCreationData($data);
15
16
        $user = new User();
17
        $user
18
            ->setEmail($filteredObject->email)
19
            ->setName($filteredObject->name)
20
            ->setPassword($filteredObject->password)
21
        ;
22
23
        $userSpecification = new UserSpecification($user);
24
        $userSpecification->validateNew();
25
26
        return $user;
27
    }
28
29
    public static function retrieve(array $params = [], $di): User
30
    {
31
        $filteredParams = UserFilterFactory::sanitizeRetrievingParams($params);
32
        $repository = new UserRepository($di);
33
34
        if ($filteredParams->userID) {
35
            if ($filteredParams->email) {
36
                throw new UserException('Only one retrieving param should be defined: userID or email.');
37
            }
38
39
            $userModel = $repository->fetchUserModelById($filteredParams->userID);
40
        } elseif ($filteredParams->email) {
41
            $userModel = $repository->fetchUserModelByEmail($filteredParams->email);
42
        } else {
43
            throw new UserException('Bad params for retrieving User');
44
        }
45
46
        $user = new User();
47
        $user
48
            ->setUserId($userModel->id)
49
            ->setEmail($userModel->email)
50
            ->setName($userModel->name)
51
        ;
52
53
        $userSpecification = new UserSpecification($user);
54
        $userSpecification->validate();
55
56
        return $user;
57
    }
58
}
59