HasAddress   A
last analyzed

Complexity

Total Complexity 21

Size/Duplication

Total Lines 130
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 21
eloc 41
c 0
b 0
f 0
dl 0
loc 130
ccs 38
cts 38
cp 1
rs 10

17 Methods

Rating   Name   Duplication   Size   Complexity  
A getPrecision() 0 3 1
A setPrecision() 0 3 1
A setCountry() 0 3 1
A getArea() 0 3 1
A getCountry() 0 3 1
A toLocation() 0 6 3
A getStreet() 0 3 1
A setArea() 0 3 1
A getLocality() 0 3 1
A getLatitude() 0 3 2
A setLatitude() 0 4 1
A setStreet() 0 3 1
A getLongitude() 0 3 2
A setLongitude() 0 4 1
A setPostcode() 0 3 1
A getPostcode() 0 3 1
A setLocality() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Application\Traits;
6
7
use Application\Enum\Precision;
8
use Application\Model\Country;
9
use Doctrine\ORM\Mapping as ORM;
10
use GraphQL\Doctrine\Attribute as API;
11
use LongitudeOne\Spatial\PHP\Types\Geography\Point;
12
13
/**
14
 * Common fields to represent an address.
15
 */
16
trait HasAddress
17
{
18
    #[ORM\Column(type: 'point', nullable: true)]
19
    #[API\Exclude]
20
    private ?Point $location = null;
21
22
    private ?float $latitude = null;
23
24
    private ?float $longitude = null;
25
26
    #[ORM\Column(name: '`precision`', type: 'enum', nullable: true)]
27
    private ?Precision $precision = null;
28
29
    #[ORM\Column(type: 'string', options: ['default' => ''])]
30
    private string $street = '';
31
32
    #[ORM\Column(type: 'string', length: 20, options: ['default' => ''])]
33
    private string $postcode = '';
34
35
    #[ORM\Column(type: 'string', length: 191, options: ['default' => ''])]
36
    private string $locality = '';
37
38
    #[ORM\Column(type: 'string', length: 191, options: ['default' => ''])]
39
    private string $area = '';
40
41
    #[ORM\ManyToOne(targetEntity: Country::class)]
42
    #[ORM\JoinColumn(onDelete: 'SET NULL')]
43
    private ?Country $country = null;
44
45
    /**
46
     * Get latitude.
47
     */
48 3
    public function getLatitude(): ?float
49
    {
50 3
        return $this->location ? $this->location->getLatitude() : null;
51
    }
52
53
    /**
54
     * Set latitude.
55
     */
56 1
    public function setLatitude(?float $latitude): void
57
    {
58 1
        $this->latitude = $latitude;
59 1
        $this->toLocation();
60
    }
61
62 1
    private function toLocation(): void
63
    {
64 1
        if ($this->longitude && $this->latitude) {
65 1
            $this->location = new Point($this->longitude, $this->latitude, 4326);
66
        } else {
67 1
            $this->location = null;
68
        }
69
    }
70
71
    /**
72
     * Get longitude.
73
     */
74 3
    public function getLongitude(): ?float
75
    {
76 3
        return $this->location ? $this->location->getLongitude() : null;
77
    }
78
79
    /**
80
     * Set longitude.
81
     */
82 1
    public function setLongitude(?float $longitude): void
83
    {
84 1
        $this->longitude = $longitude;
85 1
        $this->toLocation();
86
    }
87
88 3
    public function getPrecision(): ?Precision
89
    {
90 3
        return $this->precision;
91
    }
92
93 4
    public function setPrecision(?Precision $precision): void
94
    {
95 4
        $this->precision = $precision;
96
    }
97
98 3
    public function getStreet(): string
99
    {
100 3
        return $this->street;
101
    }
102
103 8
    public function setStreet(string $street): void
104
    {
105 8
        $this->street = $street;
106
    }
107
108 3
    public function getPostcode(): string
109
    {
110 3
        return $this->postcode;
111
    }
112
113 8
    public function setPostcode(string $postcode): void
114
    {
115 8
        $this->postcode = $postcode;
116
    }
117
118 6
    public function getLocality(): string
119
    {
120 6
        return $this->locality;
121
    }
122
123 9
    public function setLocality(string $locality): void
124
    {
125 9
        $this->locality = $locality;
126
    }
127
128 3
    public function getArea(): string
129
    {
130 3
        return $this->area;
131
    }
132
133 8
    public function setArea(string $area): void
134
    {
135 8
        $this->area = $area;
136
    }
137
138 6
    public function getCountry(): ?Country
139
    {
140 6
        return $this->country;
141
    }
142
143 12
    public function setCountry(?Country $country = null): void
144
    {
145 12
        $this->country = $country;
146
    }
147
}
148