3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
- declare (strict_types = 1 );
6
+ declare (strict_types= 1 );
7
7
8
8
namespace Magento \CustomerGraphQl \Model \Resolver ;
9
9
10
10
use Magento \Authorization \Model \UserContextInterface ;
11
- use Magento \Customer \Api \CustomerRepositoryInterface ;
12
11
use Magento \Customer \Api \Data \CustomerInterface ;
13
12
use Magento \Customer \Api \AddressMetadataManagementInterface ;
13
+ use Magento \Customer \Api \CustomerRepositoryInterface ;
14
14
use Magento \Customer \Api \AddressRepositoryInterface ;
15
15
use Magento \Customer \Api \Data \AddressInterfaceFactory ;
16
16
use Magento \Customer \Api \Data \AddressInterface ;
17
- use Magento \Customer \Api \Data \RegionInterfaceFactory ;
18
- use Magento \Customer \Api \Data \AddressExtensionInterfaceFactory ;
19
- use Magento \Framework \Api \AttributeInterfaceFactory ;
17
+ use Magento \Framework \Api \DataObjectHelper ;
20
18
use Magento \Framework \GraphQl \Schema \Type \ResolveInfo ;
21
19
use Magento \Framework \GraphQl \Config \Element \Field ;
22
20
use Magento \Framework \GraphQl \Exception \GraphQlAuthorizationException ;
23
- use Magento \Framework \GraphQl \Query \Resolver \ContextInterface ;
24
21
use Magento \Framework \GraphQl \Query \ResolverInterface ;
25
22
use Magento \Framework \GraphQl \Exception \GraphQlInputException ;
26
23
use Magento \Framework \GraphQl \Exception \GraphQlNoSuchEntityException ;
29
26
use Magento \Eav \Model \Config ;
30
27
31
28
/**
32
- * Customers Address Update
29
+ * Customers Address, used for GraphQL request processing.
33
30
*/
34
31
class Address implements ResolverInterface
35
32
{
@@ -68,10 +65,11 @@ class Address implements ResolverInterface
68
65
const MUTATION_ADDRESS_UPDATE = 'customerAddressUpdate ' ;
69
66
const MUTATION_ADDRESS_DELETE = 'customerAddressDelete ' ;
70
67
68
+
71
69
/**
72
70
* @var CustomerRepositoryInterface
73
71
*/
74
- private $ customerRepository ;
72
+ private $ customerRepositoryInterface ;
75
73
76
74
/**
77
75
* @var AddressRepositoryInterface
@@ -83,21 +81,6 @@ class Address implements ResolverInterface
83
81
*/
84
82
private $ addressInterfaceFactory ;
85
83
86
- /**
87
- * @var RegionInterfaceFactory
88
- */
89
- private $ regionInterfaceFactory ;
90
-
91
- /**
92
- * @var AttributeInterfaceFactory
93
- */
94
- private $ attributeInterfaceFactory ;
95
-
96
- /**
97
- * @var AddressExtensionInterfaceFactory
98
- */
99
- private $ addressExtensionInterfaceFactory ;
100
-
101
84
/**
102
85
* @var Config
103
86
*/
@@ -109,37 +92,35 @@ class Address implements ResolverInterface
109
92
private $ addressDataProvider ;
110
93
111
94
/**
112
- * @param CustomerRepositoryInterface $customerRepository
95
+ * @var \Magento\Framework\Api\DataObjectHelper
96
+ */
97
+ private $ dataObjectHelper ;
98
+
99
+ /**
113
100
* @param AddressRepositoryInterface $addressRepositoryInterface
114
101
* @param AddressInterfaceFactory $addressInterfaceFactory
115
- * @param RegionInterfaceFactory $regionInterfaceFactory
116
- * @param AttributeInterfaceFactory $attributeInterfaceFactory
117
- * @param AddressExtensionInterfaceFactory $addressExtensionInterfaceFactory
118
102
* @param Config $eavConfig
119
103
* @param AddressDataProvider $addressDataProvider
104
+ * @param DataObjectHelper $dataObjectHelper
120
105
*/
121
106
public function __construct (
122
- CustomerRepositoryInterface $ customerRepository ,
107
+ CustomerRepositoryInterface $ customerRepositoryInterface ,
123
108
AddressRepositoryInterface $ addressRepositoryInterface ,
124
109
AddressInterfaceFactory $ addressInterfaceFactory ,
125
- RegionInterfaceFactory $ regionInterfaceFactory ,
126
- AttributeInterfaceFactory $ attributeInterfaceFactory ,
127
- AddressExtensionInterfaceFactory $ addressExtensionInterfaceFactory ,
128
110
Config $ eavConfig ,
129
- AddressDataProvider $ addressDataProvider
111
+ AddressDataProvider $ addressDataProvider ,
112
+ DataObjectHelper $ dataObjectHelper
130
113
) {
131
- $ this ->customerRepository = $ customerRepository ;
114
+ $ this ->customerRepositoryInterface = $ customerRepositoryInterface ;
132
115
$ this ->addressRepositoryInterface = $ addressRepositoryInterface ;
133
116
$ this ->addressInterfaceFactory = $ addressInterfaceFactory ;
134
- $ this ->regionInterfaceFactory = $ regionInterfaceFactory ;
135
- $ this ->attributeInterfaceFactory = $ attributeInterfaceFactory ;
136
- $ this ->addressExtensionInterfaceFactory = $ addressExtensionInterfaceFactory ;
137
117
$ this ->eavConfig = $ eavConfig ;
138
118
$ this ->addressDataProvider = $ addressDataProvider ;
119
+ $ this ->dataObjectHelper = $ dataObjectHelper ;
139
120
}
140
121
141
122
/**
142
- * { @inheritdoc}
123
+ * @inheritdoc
143
124
*/
144
125
public function resolve (
145
126
Field $ field ,
@@ -148,7 +129,7 @@ public function resolve(
148
129
array $ value = null ,
149
130
array $ args = null
150
131
) {
151
- /** @var ContextInterface $context */
132
+ /** @var \Magento\Framework\GraphQl\Query\Resolver\ ContextInterface $context */
152
133
if ((!$ context ->getUserId ()) || $ context ->getUserType () == UserContextInterface::USER_TYPE_GUEST ) {
153
134
throw new GraphQlAuthorizationException (
154
135
__ (
@@ -158,7 +139,7 @@ public function resolve(
158
139
);
159
140
}
160
141
/** @var \Magento\Customer\Api\Data\CustomerInterface $customer */
161
- $ customer = $ this ->customerRepository ->getById ($ context ->getUserId ());
142
+ $ customer = $ this ->customerRepositoryInterface ->getById ($ context ->getUserId ());
162
143
switch ($ field ->getName ()) {
163
144
case self ::MUTATION_ADDRESS_CREATE :
164
145
return $ this ->addressDataProvider ->processCustomerAddress (
@@ -177,10 +158,10 @@ public function resolve(
177
158
178
159
/**
179
160
* Get input address attribute errors
180
- * @param $addressInput
161
+ * @param array $addressInput
181
162
* @return bool|string
182
163
*/
183
- private function getAddressInputError ($ addressInput )
164
+ private function getAddressInputError (array $ addressInput )
184
165
{
185
166
foreach (self ::ADDRESS_ATTRIBUTES as $ attribute ) {
186
167
if ($ this ->isAttributeRequired ($ attribute ) && !isset ($ addressInput [$ attribute ])) {
@@ -192,7 +173,7 @@ private function getAddressInputError($addressInput)
192
173
193
174
/**
194
175
* Check if attribute is set as required
195
- * @param $attributeName
176
+ * @param string $attributeName
196
177
* @return bool
197
178
*/
198
179
private function isAttributeRequired ($ attributeName )
@@ -204,81 +185,18 @@ private function isAttributeRequired($attributeName)
204
185
}
205
186
206
187
/**
188
+ * Add $addressInput array information to a $address object
207
189
* @param AddressInterface $address
208
190
* @param array $addressInput
209
191
* @return AddressInterface
210
192
*/
211
- private function fillAddress ($ address , $ addressInput )
193
+ private function fillAddress (AddressInterface $ address , array $ addressInput ) : AddressInterface
212
194
{
213
- if (isset ($ addressInput [AddressInterface::REGION ])) {
214
- /** @var \Magento\Customer\Api\Data\RegionInterface $newRegion */
215
- $ newRegion = $ this ->regionInterfaceFactory ->create ($ addressInput [AddressInterface::REGION ]);
216
- $ address ->setRegion ($ newRegion );
217
- }
218
- if (isset ($ addressInput [AddressInterface::REGION_ID ])) {
219
- $ address ->setRegionId ($ addressInput [AddressInterface::REGION_ID ]);
220
- }
221
- if (isset ($ addressInput [AddressInterface::COUNTRY_ID ])) {
222
- $ address ->setCountryId ($ addressInput [AddressInterface::COUNTRY_ID ]);
223
- }
224
- if (isset ($ addressInput [AddressInterface::STREET ])) {
225
- $ address ->setStreet ($ addressInput [AddressInterface::STREET ]);
226
- }
227
- if (isset ($ addressInput [AddressInterface::COMPANY ])) {
228
- $ address ->setCompany ($ addressInput [AddressInterface::COMPANY ]);
229
- }
230
- if (isset ($ addressInput [AddressInterface::TELEPHONE ])) {
231
- $ address ->setTelephone ($ addressInput [AddressInterface::TELEPHONE ]);
232
- }
233
- if (isset ($ addressInput [AddressInterface::FAX ])) {
234
- $ address ->setFax ($ addressInput [AddressInterface::FAX ]);
235
- }
236
- if (isset ($ addressInput [AddressInterface::POSTCODE ])) {
237
- $ address ->setPostcode ($ addressInput [AddressInterface::POSTCODE ]);
238
- }
239
- if (isset ($ addressInput [AddressInterface::CITY ])) {
240
- $ address ->setCity ($ addressInput [AddressInterface::CITY ]);
241
- }
242
- if (isset ($ addressInput [AddressInterface::FIRSTNAME ])) {
243
- $ address ->setFirstname ($ addressInput [AddressInterface::FIRSTNAME ]);
244
- }
245
- if (isset ($ addressInput [AddressInterface::LASTNAME ])) {
246
- $ address ->setLastname ($ addressInput [AddressInterface::LASTNAME ]);
247
- }
248
- if (isset ($ addressInput [AddressInterface::MIDDLENAME ])) {
249
- $ address ->setMiddlename ($ addressInput [AddressInterface::MIDDLENAME ]);
250
- }
251
- if (isset ($ addressInput [AddressInterface::PREFIX ])) {
252
- $ address ->setPrefix ($ addressInput [AddressInterface::PREFIX ]);
253
- }
254
- if (isset ($ addressInput [AddressInterface::SUFFIX ])) {
255
- $ address ->setSuffix ($ addressInput [AddressInterface::SUFFIX ]);
256
- }
257
- if (isset ($ addressInput [AddressInterface::VAT_ID ])) {
258
- $ address ->setVatId ($ addressInput [AddressInterface::VAT_ID ]);
259
- }
260
- if (isset ($ addressInput [AddressInterface::DEFAULT_BILLING ])) {
261
- $ address ->setIsDefaultBilling ((bool )$ addressInput [AddressInterface::DEFAULT_BILLING ]);
262
- }
263
- if (isset ($ addressInput [AddressInterface::DEFAULT_SHIPPING ])) {
264
- $ address ->setIsDefaultShipping ((bool )$ addressInput [AddressInterface::DEFAULT_SHIPPING ]);
265
- }
266
- if (isset ($ addressInput [self ::CUSTOM_ATTRIBUTE_KEY ])) {
267
- foreach ($ addressInput [self ::CUSTOM_ATTRIBUTE_KEY ] as $ attribute ) {
268
- $ address ->setCustomAttribute ($ attribute ['attribute_code ' ], $ attribute ['value ' ]);
269
- }
270
- }
271
- if (isset ($ addressInput [self ::EXTENSION_ATTRIBUTE_KEY ])) {
272
- $ extensionAttributes = $ address ->getExtensionAttributes ();
273
- if (!$ extensionAttributes ) {
274
- /** @var \Magento\Customer\Api\Data\AddressExtensionInterface $newExtensionAttribute */
275
- $ extensionAttributes = $ this ->addressExtensionInterfaceFactory ->create ();
276
- }
277
- foreach ($ addressInput [self ::EXTENSION_ATTRIBUTE_KEY ] as $ attribute ) {
278
- $ extensionAttributes ->setData ($ attribute ['attribute_code ' ], $ attribute ['value ' ]);
279
- }
280
- $ address ->setExtensionAttributes ($ extensionAttributes );
281
- }
195
+ $ this ->dataObjectHelper ->populateWithArray (
196
+ $ address ,
197
+ $ addressInput ,
198
+ \Magento \Customer \Api \Data \AddressInterface::class
199
+ );
282
200
return $ address ;
283
201
}
284
202
@@ -289,7 +207,7 @@ private function fillAddress($address, $addressInput)
289
207
* @return AddressInterface
290
208
* @throws GraphQlInputException
291
209
*/
292
- private function processCustomerAddressCreate ($ customer , $ addressInput )
210
+ private function processCustomerAddressCreate (CustomerInterface $ customer , array $ addressInput ) : AddressInterface
293
211
{
294
212
$ errorInput = $ this ->getAddressInputError ($ addressInput );
295
213
if ($ errorInput ) {
@@ -313,7 +231,7 @@ private function processCustomerAddressCreate($customer, $addressInput)
313
231
* @throws GraphQlAuthorizationException
314
232
* @throws GraphQlNoSuchEntityException
315
233
*/
316
- private function processCustomerAddressUpdate ($ customer , $ addressId , $ addressInput )
234
+ private function processCustomerAddressUpdate (CustomerInterface $ customer , $ addressId , array $ addressInput )
317
235
{
318
236
try {
319
237
/** @var AddressInterface $address */
@@ -341,7 +259,7 @@ private function processCustomerAddressUpdate($customer, $addressId, $addressInp
341
259
* @throws GraphQlAuthorizationException
342
260
* @throws GraphQlNoSuchEntityException
343
261
*/
344
- private function processCustomerAddressDelete ($ customer , $ addressId )
262
+ private function processCustomerAddressDelete (CustomerInterface $ customer , $ addressId )
345
263
{
346
264
try {
347
265
/** @var AddressInterface $address */
@@ -368,4 +286,4 @@ private function processCustomerAddressDelete($customer, $addressId)
368
286
}
369
287
return $ this ->addressRepositoryInterface ->delete ($ address );
370
288
}
371
- }
289
+ }
0 commit comments