Passed
Push — master ( b616ab...e5c15e )
by Murilo
01:33
created

AddressController::address()   A

Complexity

Conditions 6
Paths 3

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 24
rs 9.2222
cc 6
nc 3
nop 1
1
<?php
2
3
namespace Source\Controllers;
4
5
use \stdClass;
6
7
use Source\Core\Request;
8
use Source\Core\Response;
9
10
use Source\Models\User;
11
use Source\Models\Phone;
12
use Source\Models\Gender;
13
use Source\Models\AccessLevel;
14
use Source\Models\Address\Address;
15
use Source\Models\Address\City;
16
17
use Source\Controllers\Auth;
18
19
final class AddressController
20
{
21
    private $Message;
22
23
    private $Request;
24
25
    private $token;
26
27
    public function __construct()
28
    {
29
        $this->Message = new stdClass();
30
        $this->Request = new Request();
31
32
        $this->token = (new Auth())->validateLogin();
33
    }
34
35
    public function addAddress($data)
36
    {
37
        $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
38
39
        if (empty($data)) {
40
            $this->Message->message = 'Campos inválidos!';
41
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
42
            return;
43
        }
44
45
        $User = new User();
46
        /** @var Source\Models\User $User */
47
        $User = $User->findById($this->token['id'], 'id');
48
49
        if (!$User || $User == null) {
50
            $this->Message->message = 'Usuário não encontrado!';
51
            (new Response())->setStatusCode(HTTP_NOT_FOUND)->send($this->Message);
52
            return;
53
        }
54
        
55
        $city_id = filter_var($data['city_id'], FILTER_DEFAULT);
56
        $street = filter_var($data['street'], FILTER_DEFAULT);
57
        $complement = filter_var($data['complement'], FILTER_DEFAULT);
58
        $cep = filter_var($data['cep'], FILTER_DEFAULT);
59
        $number = filter_var($data['number'], FILTER_DEFAULT);
60
61
        if (!$city_id) {
62
            $this->Message->message = 'Cidade inválida!';
63
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
64
            return;
65
        }
66
67
        if (!$street) {
68
            $this->Message->message = 'Nome da rua inválida!';
69
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
70
            return;
71
        }
72
73
        if (!$cep) {
74
            $this->Message->message = 'CEP inválido!';
75
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
76
            return;
77
        }
78
79
        if (!$number) {
80
            $this->Message->message = 'Número da casa inválido!';
81
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
82
            return;
83
        }
84
85
        /** @var Source\Models\Address $Address */
86
        $Address = new Address();
87
88
        $Address->city_id = $city_id;
89
        $Address->street = $street;
90
        $Address->complement = $complement;
91
        $Address->cep = $cep;
92
        $Address->number = $number;
93
94
        if (!$Address->save()) {
95
            $this->Message->message = $Address->message();
96
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
97
            return;
98
        }
99
100
        if (!Address::bindAddress($User->id, $Address->id)) {
0 ignored issues
show
Bug Best Practice introduced by
The expression Source\Models\Address\Ad...User->id, $Address->id) of type null|true is loosely compared to false; this is ambiguous if the boolean can be false. You might want to explicitly use !== null instead.

If an expression can have both false, and null as possible values. It is generally a good practice to always use strict comparison to clearly distinguish between those two values.

$a = canBeFalseAndNull();

// Instead of
if ( ! $a) { }

// Better use one of the explicit versions:
if ($a !== null) { }
if ($a !== false) { }
if ($a !== null && $a !== false) { }
Loading history...
101
            $this->Message->message = 'Ocorreu algum erro ao cadastrar o endereço!';
102
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
103
            return;
104
        }
105
106
        $this->Message->message = 'Endereço salvo com sucesso!';
107
        (new Response())->setStatusCode(HTTP_OK)->send($this->Message);
108
        return;
109
    }
110
    
111
    public function updateAddress($data)
112
    {
113
        $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
114
115
        if (empty($data) || !isset($data['id']) || !filter_var($data['id'], FILTER_VALIDATE_INT)) {
116
            $this->Message->message = 'Campos inválidos!';
117
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
118
            return;
119
        }
120
121
        $User = new User();
122
        $User = $User->findById($this->token['id'], 'id');
123
124
        if (!$User || $User == null) {
125
            $this->Message->message = 'Usuário não encontrado!';
126
            (new Response())->setStatusCode(HTTP_NOT_FOUND)->send($this->Message);
127
            return;
128
        }
129
130
        if (!Address::getBindedAddress($User->id, $data['id'])) {
0 ignored issues
show
Bug Best Practice introduced by
The property id does not exist on Source\Core\Model. Since you implemented __get, consider adding a @property annotation.
Loading history...
Bug introduced by
$User->id of type null is incompatible with the type integer expected by parameter $userId of Source\Models\Address\Address::getBindedAddress(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

130
        if (!Address::getBindedAddress(/** @scrutinizer ignore-type */ $User->id, $data['id'])) {
Loading history...
131
            $this->Message->message = 'Você não possui permissão para editar este endereço!';
132
            (new Response())->setStatusCode(HTTP_NOT_FOUND)->send($this->Message);
133
            return;
134
        }
135
136
        if (empty($data['city_id'])) {
137
            $this->Message->message = 'Cidade inválida!';
138
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
139
            return;
140
        }
141
142
        $City = new City();
143
144
        if (!$City->findById($data['city_id'])) {
145
            $this->Message->message = 'Cidade inválida!';
146
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
147
            return;
148
        }
149
150
        if (empty($data['street'])) {
151
            $this->Message->message = 'Nome da rua inválida!';
152
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
153
            return;
154
        }
155
156
        if (empty($data['cep'])) {
157
            $this->Message->message = 'CEP inválido!';
158
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
159
            return;
160
        }
161
162
        if (empty($data['number'])) {
163
            $this->Message->message = 'Número da casa inválido!';
164
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
165
            return;
166
        }
167
168
        /** @var Source\Models\Address $Address */
169
        $Address = new Address();
170
        $Address->city_id = $data['city_id'];
171
        $Address->street = $data['street'];
172
        $Address->cep = $data['cep'];
173
        $Address->number = $data['number'];
174
175
        if (!$Address->save()) {
176
            $this->Message->message = $Address->message();
177
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
178
            return;
179
        }
180
181
        $this->Message->message = 'Endereço salvo com sucesso!';
182
        (new Response())->setStatusCode(HTTP_OK)->send($this->Message);
183
        return;
184
    }
185
186
    public function address($data)
187
    {
188
        $data = filter_var_array($data, FILTER_SANITIZE_STRIPPED);
189
190
        if (empty($data) || !isset($data['id']) || !filter_var($data['id'], FILTER_VALIDATE_INT)) {
191
            $this->Message->message = 'Campos inválidos!';
192
            (new Response())->setStatusCode(HTTP_PARTIAL_CONTENT)->send($this->Message);
193
            return;
194
        }
195
196
        /** @var Source\Models\Address $Address */
197
        $Address = new Address();
198
        $result = $Address->findById($data['id'], "*");
199
        
200
        if (!$result || $result == null) {
201
            $this->Message->message = 'Endereço não encontrado!';
202
            (new Response())->setStatusCode(HTTP_NOT_FOUND)->send($this->Message);
203
            return;
204
        }
205
206
        $result = $result->data();
207
        $this->Message->message = $result;
208
        
209
        (new Response())->setStatusCode(HTTP_OK)->send($this->Message);
210
    }
211
}
212