Passed
Push — master ( bc79f7...517d2b )
by Samuel
02:55
created

NoteData::__construct()   A

Complexity

Conditions 4
Paths 8

Size

Total Lines 14
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 12
c 1
b 0
f 0
dl 0
loc 14
ccs 13
cts 13
cp 1
rs 9.8666
cc 4
nc 8
nop 1
crap 4
1
<?php
2
3
namespace App\Domain\Note\Data;
4
5
use App\Domain\Authorization\Privilege;
6
use App\Domain\User\Data\UserData;
7
use IntlDateFormatter;
8
9
class NoteData implements \JsonSerializable
10
{
11
    public ?int $id;
12
    public ?int $userId;
13
    public ?int $clientId;
14
    public ?string $message;
15
    public ?int $isMain; // int 1 or 0
16
    public ?int $hidden; // int 1 or 0
17
    public ?\DateTimeImmutable $createdAt;
18
    public ?\DateTimeImmutable $updatedAt;
19
    public ?\DateTimeImmutable $deletedAt;
20
21
    // Not in database
22
    public ?UserData $user;
23
24
    // User mutation rights from authenticated user
25
    public string $privilege = Privilege::N->name; // json_encode automatically takes $enum->value
26
27 36
    public function __construct(?array $noteValues = null)
28
    {
29 36
        $this->id = $noteValues['id'] ?? null;
30 36
        $this->userId = $noteValues['user_id'] ?? null;
31 36
        $this->clientId = $noteValues['client_id'] ?? null;
32 36
        $this->message = $noteValues['message'] ?? null;
33 36
        $this->isMain = $noteValues['is_main'] ?? null;
34 36
        $this->hidden = $noteValues['hidden'] ?? null;
35 36
        $this->createdAt = $noteValues['created_at'] ?? null
36 36
            ? new \DateTimeImmutable($noteValues['created_at']) : null;
37 36
        $this->updatedAt = $noteValues['updated_at'] ?? null
38 36
            ? new \DateTimeImmutable($noteValues['updated_at']) : null;
39 36
        $this->deletedAt = $noteValues['deleted_at'] ?? null
40 36
            ? new \DateTimeImmutable($noteValues['deleted_at']) : null;
41
    }
42
43
    /**
44
     * Returns all values of object as array.
45
     * The array keys should match with the database
46
     * column names since it is likely used to
47
     * modify a database table.
48
     *
49
     * @return array
50
     */
51
    /*    public function toArrayForDatabase(): array
52
        {
53
            $note = [];
54
            // Not include required, from db non-nullable values if they are null -> for update
55
            if ($this->id !== null) {
56
                $note['id'] = $this->id;
57
            }
58
            if ($this->userId !== null) {
59
                $note['user_id'] = $this->userId;
60
            }
61
            if ($this->clientId !== null) {
62
                $note['client_id'] = $this->clientId;
63
            }
64
65
            // "message" is nullable, and null is a valid db value, so it has to be included
66
            $note['message'] = $this->message;
67
            $note['is_main'] = $this->isMain;
68
            $note['hidden'] = $this->hidden;
69
70
            return $note;
71
        }*/
72
73 8
    public function jsonSerialize(): array
74
    {
75 8
        $dateFormatter = new IntlDateFormatter(
76 8
            setlocale(LC_ALL, 0) ?: null,
77 8
            IntlDateFormatter::LONG,
78 8
            IntlDateFormatter::SHORT
79 8
        );
80
81 8
        return [
82 8
            'id' => $this->id,
83 8
            'userId' => $this->userId,
84 8
            'clientId' => $this->clientId,
85 8
            'message' => $this->message,
86
            // 'isMain' => $this->isMain,
87 8
            'hidden' => $this->hidden,
88 8
            'createdAt' => $this->createdAt ? $dateFormatter->format($this->createdAt) : null,
89 8
            'updatedAt' => $this->updatedAt ? $dateFormatter->format($this->updatedAt) : null,
90 8
        ];
91
    }
92
}
93