Completed
Pull Request — master (#25)
by
unknown
02:01
created

RequestInquiry::userAliasRevoked()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types = 1);
3
4
namespace Link0\Bunq\Domain;
5
6
use DateTimeInterface;
7
use DateTimeZone;
8
use Money\Currency;
9
use Money\Money;
10
11
final class RequestInquiry
12
{
13
    /**
14
     * @var Id
15
     */
16
    private $id;
17
18
    /**
19
     * @var DateTimeInterface
20
     */
21
    private $created;
22
23
    /**
24
     * @var DateTimeInterface
25
     */
26
    private $updated;
27
28
    /**
29
     * @var DateTimeInterface
30
     */
31
    private $timeResponded;
32
33
    /**
34
     * @var DateTimeInterface
35
     */
36
    private $timeExpiry;
37
38
    /**
39
     * @var Money
40
     */
41
    private $amountInquired;
42
43
    /**
44
     * @var Money
45
     */
46
    private $amountResponded;
47
48
    /**
49
     * @var string
50
     */
51
    private $status;
52
53
    /**
54
     * @var string
55
     */
56
    private $description;
57
58
    /**
59
     * @var LabelMonetaryAccount
60
     */
61
    private $userAliasCreated;
62
63
    /**
64
     * @var LabelMonetaryAccount
65
     */
66
    private $userAliasRevoked;
67
68
    /**
69
     * @var LabelMonetaryAccount;
70
     */
71
    private $counterpartyAlias;
72
73
74
    /**
75
     * Private constructor
76
     */
77
    private function __construct(array $requestInquiry)
78
    {
79
        $timezone = new DateTimeZone('UTC');
80
81
        $this->id = Id::fromInteger(intval($requestInquiry['id']));
82
        $this->description = $requestInquiry['description'];
83
        $this->status = $requestInquiry['status'];
84
85
        $this->created = new \DateTimeImmutable($requestInquiry['created'], $timezone);
86
        $this->updated = new \DateTimeImmutable($requestInquiry['updated'], $timezone);
87
        $this->timeResponded = is_null($requestInquiry['timeResponded']) ? null : new \DateTimeImmutable($requestInquiry['timeResponded'], $timezone);
88
        $this->timeExpiry = is_null($requestInquiry['timeExpiry']) ? null : new \DateTimeImmutable($requestInquiry['timeExpiry'], $timezone);
89
90
        $this->amountInquired = new Money(
91
            $requestInquiry['amountInquired']['value'] * 100, // cents
92
            new Currency($requestInquiry['amountInquired']['currency'])
93
        );
94
95
        $this->amountResponded = is_null($requestInquiry['amountResponded']) ? null : new Money(
96
            $requestInquiry['amountResponded']['value'] * 100, // cents
97
            new Currency($requestInquiry['amountResponded']['currency'])
98
        );
99
100
        $this->userAliasCreated = LabelMonetaryAccount::fromArray($requestInquiry['userAliasCreated']);
101
        $this->userAliasRevoked = is_null($requestInquiry['userAliasRevoked']) ? null : LabelMonetaryAccount::fromArray($requestInquiry['userAliasRevoked']);
102
        $this->counterpartyAlias = LabelMonetaryAccount::fromArray($requestInquiry['counterpartyAlias']);
103
    }
104
105
    /**
106
     * @param array $requestInquiry
107
     * @return RequestInquiry
108
     */
109
    public static function fromArray(array $requestInquiry)
110
    {
111
        return new self($requestInquiry);
112
    }
113
114
    /**
115
    * @return Id
116
    */
117
    public function id(): Id
118
    {
119
        return $this->id;
120
    }
121
122
    /**
123
     * @return DateTimeInterface
124
     */
125
    public function created(): DateTimeInterface
126
    {
127
        return $this->created;
128
    }
129
130
    /**
131
     * @return DateTimeInterface
132
     */
133
    public function updated(): DateTimeInterface
134
    {
135
        return $this->updated;
136
    }
137
138
    /**
139
     * @return DateTimeInterface
140
     */
141
    public function timeResponded(): DateTimeInterface
142
    {
143
        return $this->timeResponded;
144
    }
145
146
    /**
147
     * @return DateTimeInterface
148
     */
149
    public function timeExpiry(): DateTimeInterface
150
    {
151
        return $this->timeExpiry;
152
    }
153
154
    /**
155
     * @return Money
156
     */
157
    public function amountInquired(): Money
158
    {
159
        return $this->amountInquired;
160
    }
161
162
    /**
163
     * @return Money
164
     */
165
    public function amountResponded(): Money
166
    {
167
        return $this->amountResponded;
168
    }
169
170
    /**
171
     * @return string
172
     */
173
    public function status(): string
174
    {
175
        return $this->status;
176
    }
177
178
    /**
179
     * @return string
180
     */
181
    public function description(): string
182
    {
183
        return $this->description;
184
    }
185
186
    /**
187
     * @return LabelMonetaryAccount
188
     */
189
    public function userAliasCreated(): LabelMonetaryAccount
190
    {
191
        return $this->userAliasCreated;
192
    }
193
194
    /**
195
     * @return LabelMonetaryAccount
196
     */
197
    public function userAliasRevoked(): LabelMonetaryAccount
198
    {
199
        return $this->userAliasRevoked;
200
    }
201
202
    /**
203
     * @return LabelMonetaryAccount
204
     */
205
    public function counterpartyAlias(): LabelMonetaryAccount
206
    {
207
        return $this->counterpartyAlias;
208
    }
209
}
210