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

UserFactory::retrieve()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 29
rs 9.456
c 0
b 0
f 0
cc 4
nc 4
nop 2
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