LogEntityTrait   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 116
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 66
dl 0
loc 116
ccs 20
cts 20
cp 1
rs 10
c 0
b 0
f 0
wmc 8

8 Methods

Rating   Name   Duplication   Size   Complexity  
A getAgent() 0 3 1
A getCreatedAt() 0 3 1
A getTime() 0 3 1
A processRequestData() 0 5 1
A getClientIp() 0 3 1
A processTimeAndDate() 0 7 1
A getHttpHost() 0 3 1
A getDate() 0 3 1
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