LogEntityTrait::getHttpHost()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
declare(strict_types = 1);
3
/**
4
 * /src/Entity/Traits/LogEntityTrait.php
5
 *
6
 * @author TLe, Tarmo Leppänen <[email protected]>
7
 */
8
9
namespace App\Entity\Traits;
10
11
use App\Entity\User;
12
use DateTimeImmutable;
13
use DateTimeZone;
14
use Doctrine\DBAL\Types\Types;
15
use Doctrine\ORM\Mapping as ORM;
16
use Symfony\Component\HttpFoundation\Request;
17
use Symfony\Component\Serializer\Annotation\Groups;
18
use Throwable;
19
20
/**
21
 * Trait LogEntityTrait
22
 *
23
 * @package App\Entity\Traits
24
 * @author TLe, Tarmo Leppänen <[email protected]>
25
 *
26
 * @property User|null $user
27
 */
28
trait LogEntityTrait
29
{
30
    #[ORM\Column(
31
        name: 'time',
32
        type: Types::DATETIME_IMMUTABLE,
33
        nullable: false,
34
    )]
35
    #[Groups([
36
        'LogLogin',
37
        'LogLogin.time',
38
        'LogRequest',
39
        'LogRequest.time',
40
    ])]
41
    protected DateTimeImmutable $time;
42
43
    #[ORM\Column(
44
        name: '`date`',
45
        type: Types::DATE_IMMUTABLE,
46
        nullable: false,
47
    )]
48
    #[Groups([
49
        'LogLogin',
50
        'LogLogin.date',
51
        'LogRequest',
52
        'LogRequest.date',
53
    ])]
54
    protected DateTimeImmutable $date;
55
56
    #[ORM\Column(
57
        name: 'agent',
58
        type: Types::TEXT,
59
        nullable: false,
60
    )]
61
    #[Groups([
62
        'LogLogin',
63
        'LogLogin.agent',
64
        'LogRequest',
65
        'LogRequest.agent',
66
    ])]
67
    protected string $agent = '';
68
69
    #[ORM\Column(
70
        name: 'http_host',
71
        type: Types::STRING,
72
        length: 255,
73
        nullable: false,
74
    )]
75
    #[Groups([
76
        'LogLogin',
77
        'LogLogin.httpHost',
78
        'LogRequest',
79
        'LogRequest.httpHost',
80
    ])]
81
    protected string $httpHost = '';
82
83
    #[ORM\Column(
84
        name: 'client_ip',
85
        type: Types::STRING,
86
        length: 255,
87
        nullable: false,
88
    )]
89
    #[Groups([
90
        'LogLogin',
91
        'LogLogin.clientIp',
92
        'LogRequest',
93
        'LogRequest.clientIp',
94
    ])]
95
    private string $clientIp = '';
96
97 2
    public function getTime(): DateTimeImmutable
98
    {
99 2
        return $this->time;
100
    }
101
102 5
    public function getDate(): DateTimeImmutable
103
    {
104 5
        return $this->date;
105
    }
106
107 2
    public function getAgent(): string
108
    {
109 2
        return $this->agent;
110
    }
111
112 2
    public function getHttpHost(): string
113
    {
114 2
        return $this->httpHost;
115
    }
116
117 2
    public function getClientIp(): string
118
    {
119 2
        return $this->clientIp;
120
    }
121
122 3
    public function getCreatedAt(): ?DateTimeImmutable
123
    {
124 3
        return $this->getDate();
125
    }
126
127 633
    private function processRequestData(Request $request): void
128
    {
129 633
        $this->clientIp = $request->getClientIp() ?? '';
130 633
        $this->httpHost = $request->getHttpHost();
131 633
        $this->agent = $request->headers->get('User-Agent') ?? '';
132
    }
133
134
    /**
135
     * @throws Throwable
136
     */
137 665
    #[ORM\PrePersist]
138
    private function processTimeAndDate(): void
139
    {
140 665
        $now = new DateTimeImmutable(timezone: new DateTimeZone('UTC'));
141
142 665
        $this->time = $now;
143 665
        $this->date = $now;
144
    }
145
}
146