Completed
Push — master ( 9af059...286024 )
by Luc
12s
created

Company::getName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
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\Models;
4
5
use Ramsey\Uuid\UuidInterface;
6
use VSV\GVQ_API\Common\ValueObjects\NotEmptyString;
7
use VSV\GVQ_API\User\Models\User;
8
9
class Company
10
{
11
    /**
12
     * @var UuidInterface
13
     */
14
    private $id;
15
16
    /**
17
     * @var NotEmptyString
18
     */
19
    private $name;
20
21
    /**
22
     * @var TranslatedAliases
23
     */
24
    private $translatedAliases;
25
26
    /**
27
     * @var User
28
     */
29
    private $user;
30
31
    /**
32
     * @param UuidInterface $id
33
     * @param NotEmptyString $name
34
     * @param TranslatedAliases $translatedAliases
35
     * @param User $user
36
     */
37
    public function __construct(
38
        UuidInterface $id,
39
        NotEmptyString $name,
40
        TranslatedAliases $translatedAliases,
41
        User $user
42
    ) {
43
        $this->guardTranslatedAliases($translatedAliases);
44
45
        $this->id = $id;
46
        $this->name = $name;
47
        $this->translatedAliases = $translatedAliases;
48
        $this->user = $user;
49
    }
50
51
    /**
52
     * @return UuidInterface
53
     */
54
    public function getId(): UuidInterface
55
    {
56
        return $this->id;
57
    }
58
59
    /**
60
     * @return NotEmptyString
61
     */
62
    public function getName(): NotEmptyString
63
    {
64
        return $this->name;
65
    }
66
67
    /**
68
     * @return TranslatedAliases
69
     */
70
    public function getTranslatedAliases(): TranslatedAliases
71
    {
72
        return $this->translatedAliases;
73
    }
74
75
    /**
76
     * @return User
77
     */
78
    public function getUser(): User
79
    {
80
        return $this->user;
81
    }
82
83
    /**
84
     * @param TranslatedAliases $aliases
85
     */
86
    private function guardTranslatedAliases(TranslatedAliases $aliases): void
87
    {
88
        $languages = [];
89
        foreach ($aliases as $alias) {
90
            $languages[] = $alias->getLanguage()->toNative();
91
        }
92
        $languageCount = array_count_values($languages);
93
94
        if ($aliases->count() !== 2 || $languageCount['nl'] !== 1 || $languageCount['fr'] !== 1) {
95
            $suppliedAliases = [];
96
            foreach ($aliases as $alias) {
97
                $suppliedAliases[] = $alias->getAlias()->toNative().' ('.$alias->getLanguage()->toNative().')';
98
            }
99
100
            throw new \InvalidArgumentException(
101
                'Invalid value(s) for aliases: '.implode(', ', $suppliedAliases).
102
                '. Exactly one alias per language (nl and fr) required.'
103
            );
104
        }
105
    }
106
}
107