CompanyDenormalizer::supportsDenormalization()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 1
nc 2
nop 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php declare(strict_types=1);
2
3
namespace VSV\GVQ_API\Company\Serializers;
4
5
use Ramsey\Uuid\Uuid;
6
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
7
use VSV\GVQ_API\Common\ValueObjects\NotEmptyString;
8
use VSV\GVQ_API\Company\Models\Company;
9
use VSV\GVQ_API\Company\Models\TranslatedAlias;
10
use VSV\GVQ_API\Company\Models\TranslatedAliases;
11
use VSV\GVQ_API\Company\ValueObjects\PositiveNumber;
12
use VSV\GVQ_API\User\Models\User;
13
use VSV\GVQ_API\User\Serializers\UserDenormalizer;
14
15
class CompanyDenormalizer implements DenormalizerInterface
16
{
17
    /**
18
     * @var TranslatedAliasDenormalizer
19
     */
20
    private $translatedAliasDenormalizer;
21
22
    /**
23
     * @var UserDenormalizer
24
     */
25
    private $userDenormalizer;
26
27
    /**
28
     * @param TranslatedAliasDenormalizer $translatedAliasDenormalizer
29
     * @param UserDenormalizer $userDenormalizer
30
     */
31
    public function __construct(
32
        TranslatedAliasDenormalizer $translatedAliasDenormalizer,
33
        UserDenormalizer $userDenormalizer
34
    ) {
35
        $this->translatedAliasDenormalizer = $translatedAliasDenormalizer;
36
        $this->userDenormalizer = $userDenormalizer;
37
    }
38
39
    /**
40
     * @inheritdoc
41
     */
42
    public function denormalize($data, $class, $format = null, array $context = array()): Company
43
    {
44
        $translatedAliases = array_map(
45
            function (array $translatedAlias) use ($format) {
46
                return $this->translatedAliasDenormalizer->denormalize(
47
                    $translatedAlias,
48
                    TranslatedAlias::class,
49
                    $format
50
                );
51
            },
52
            $data['aliases']
53
        );
54
55
        $user = $this->userDenormalizer->denormalize(
56
            $data['user'],
57
            User::class,
58
            $format,
59
            $context
60
        );
61
62
        return new Company(
63
            Uuid::fromString($data['id']),
64
            new NotEmptyString($data['name']),
65
            new PositiveNumber($data['numberOfEmployees']),
66
            new TranslatedAliases(...$translatedAliases),
67
            $user
68
        );
69
    }
70
71
    /**
72
     * @inheritdoc
73
     */
74
    public function supportsDenormalization($data, $type, $format = null): bool
75
    {
76
        return ($type === Company::class) && ($format === 'json');
77
    }
78
}
79