Skip to content

Commit af50831

Browse files
author
Valeriy Nayda
committed
GraphQL-57: Manage Address Book
-- Refactoring
1 parent c6de6a1 commit af50831

File tree

6 files changed

+118
-160
lines changed

6 files changed

+118
-160
lines changed

app/code/Magento/CustomerGraphQl/Model/Resolver/Address/AddressDataProvider.php renamed to app/code/Magento/CustomerGraphQl/Model/Customer/AddressDataProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66
declare(strict_types=1);
77

8-
namespace Magento\CustomerGraphQl\Model\Resolver\Address;
8+
namespace Magento\CustomerGraphQl\Model\Customer;
99

1010
use Magento\Customer\Api\Data\AddressInterface;
1111
use Magento\Customer\Api\Data\CustomerInterface;

app/code/Magento/CustomerGraphQl/Model/Resolver/Address/AddressConfigProvider.php

Lines changed: 0 additions & 76 deletions
This file was deleted.

app/code/Magento/CustomerGraphQl/Model/Resolver/AddressCreate.php renamed to app/code/Magento/CustomerGraphQl/Model/Resolver/CreateCustomerAddress.php

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,33 @@
77

88
namespace Magento\CustomerGraphQl\Model\Resolver;
99

10-
use Magento\Authorization\Model\UserContextInterface;
1110
use Magento\Customer\Api\AddressRepositoryInterface;
1211
use Magento\Customer\Api\AddressMetadataManagementInterface;
1312
use Magento\Customer\Api\Data\AddressInterfaceFactory;
1413
use Magento\Customer\Api\Data\AddressInterface;
14+
use Magento\CustomerGraphQl\Model\Customer\AddressDataProvider;
15+
use Magento\CustomerGraphQl\Model\Customer\CheckCustomerAccount;
16+
use Magento\Eav\Model\Config;
17+
use Magento\Framework\Api\DataObjectHelper;
1518
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1619
use Magento\Framework\GraphQl\Config\Element\Field;
1720
use Magento\Framework\GraphQl\Query\ResolverInterface;
18-
use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException;
1921
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
20-
use Magento\CustomerGraphQl\Model\Resolver\Address\AddressDataProvider;
21-
use Magento\CustomerGraphQl\Model\Resolver\Address\AddressConfigProvider;
2222

2323
/**
2424
* Customers address create, used for GraphQL request processing.
2525
*/
26-
class AddressCreate implements ResolverInterface
26+
class CreateCustomerAddress implements ResolverInterface
2727
{
28+
/**
29+
* @var CheckCustomerAccount
30+
*/
31+
private $checkCustomerAccount;
32+
2833
/**
2934
* @var AddressRepositoryInterface
3035
*/
31-
private $addressRepositoryInterface;
36+
private $addressRepository;
3237

3338
/**
3439
* @var AddressInterfaceFactory
@@ -41,26 +46,37 @@ class AddressCreate implements ResolverInterface
4146
private $addressDataProvider;
4247

4348
/**
44-
* @var AddressConfigProvider
49+
* @var Config
50+
*/
51+
private $eavConfig;
52+
53+
/**
54+
* @var DataObjectHelper
4555
*/
46-
public $addressConfigProvider;
56+
private $dataObjectHelper;
4757

4858
/**
49-
* @param AddressRepositoryInterface $addressRepositoryInterface
59+
* @param CheckCustomerAccount $checkCustomerAccount
60+
* @param AddressRepositoryInterface $addressRepository
5061
* @param AddressInterfaceFactory $addressInterfaceFactory
5162
* @param AddressDataProvider $addressDataProvider
52-
* @param AddressConfigProvider $addressConfigProvider
63+
* @param Config $eavConfig
64+
* @param DataObjectHelper $dataObjectHelper
5365
*/
5466
public function __construct(
55-
AddressRepositoryInterface $addressRepositoryInterface,
67+
CheckCustomerAccount $checkCustomerAccount,
68+
AddressRepositoryInterface $addressRepository,
5669
AddressInterfaceFactory $addressInterfaceFactory,
5770
AddressDataProvider $addressDataProvider,
58-
AddressConfigProvider $addressConfigProvider
71+
Config $eavConfig,
72+
DataObjectHelper $dataObjectHelper
5973
) {
60-
$this->addressRepositoryInterface = $addressRepositoryInterface;
74+
$this->checkCustomerAccount = $checkCustomerAccount;
75+
$this->addressRepository = $addressRepository;
6176
$this->addressInterfaceFactory = $addressInterfaceFactory;
6277
$this->addressDataProvider = $addressDataProvider;
63-
$this->addressConfigProvider = $addressConfigProvider;
78+
$this->eavConfig = $eavConfig;
79+
$this->dataObjectHelper = $dataObjectHelper;
6480
}
6581

6682
/**
@@ -73,18 +89,13 @@ public function resolve(
7389
array $value = null,
7490
array $args = null
7591
) {
76-
/** @var \Magento\Framework\GraphQl\Query\Resolver\ContextInterface $context */
77-
if ((!$context->getUserId()) || $context->getUserType() == UserContextInterface::USER_TYPE_GUEST) {
78-
throw new GraphQlAuthorizationException(
79-
__(
80-
'Current customer does not have access to the resource "%1"',
81-
[AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS]
82-
)
83-
);
84-
}
85-
$customerId = $context->getUserId();
92+
$currentUserId = $context->getUserId();
93+
$currentUserType = $context->getUserType();
94+
95+
$this->checkCustomerAccount->execute($currentUserId, $currentUserType);
96+
8697
return $this->addressDataProvider->processCustomerAddress(
87-
$this->processCustomerAddressCreate($customerId, $args['input'])
98+
$this->processCustomerAddressCreate($currentUserId, $args['input'])
8899
);
89100
}
90101

@@ -94,9 +105,11 @@ public function resolve(
94105
* @param array $addressInput
95106
* @return bool|string
96107
*/
97-
public function getInputError(array $addressInput)
108+
private function getInputError(array $addressInput)
98109
{
99-
$attributes = $this->addressConfigProvider->getAddressAttributes();
110+
$attributes = $this->eavConfig->getEntityAttributes(
111+
AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS
112+
);
100113
foreach ($attributes as $attributeName => $attributeInfo) {
101114
if ($attributeInfo->getIsRequired()
102115
&& (!isset($addressInput[$attributeName]) || empty($addressInput[$attributeName]))) {
@@ -123,11 +136,13 @@ private function processCustomerAddressCreate($customerId, array $addressInput)
123136
);
124137
}
125138
/** @var AddressInterface $newAddress */
126-
$newAddress = $this->addressConfigProvider->fillAddress(
127-
$this->addressInterfaceFactory->create(),
128-
$addressInput
139+
$newAddress = $this->addressInterfaceFactory->create();
140+
$this->dataObjectHelper->populateWithArray(
141+
$newAddress,
142+
$addressInput,
143+
AddressInterface::class
129144
);
130145
$newAddress->setCustomerId($customerId);
131-
return $this->addressRepositoryInterface->save($newAddress);
146+
return $this->addressRepository->save($newAddress);
132147
}
133148
}

app/code/Magento/CustomerGraphQl/Model/Resolver/AddressDelete.php renamed to app/code/Magento/CustomerGraphQl/Model/Resolver/DeleteCustomerAddress.php

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@
77

88
namespace Magento\CustomerGraphQl\Model\Resolver;
99

10-
use Magento\Authorization\Model\UserContextInterface;
11-
use Magento\Customer\Api\CustomerRepositoryInterface;
1210
use Magento\Customer\Api\AddressRepositoryInterface;
13-
use Magento\Customer\Api\AddressMetadataManagementInterface;
1411
use Magento\Customer\Api\Data\AddressInterface;
12+
use Magento\CustomerGraphQl\Model\Customer\CheckCustomerAccount;
1513
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1614
use Magento\Framework\GraphQl\Config\Element\Field;
1715
use Magento\Framework\GraphQl\Query\ResolverInterface;
@@ -22,20 +20,28 @@
2220
/**
2321
* Customers address delete, used for GraphQL request processing.
2422
*/
25-
class AddressDelete implements ResolverInterface
23+
class DeleteCustomerAddress implements ResolverInterface
2624
{
25+
/**
26+
* @var CheckCustomerAccount
27+
*/
28+
private $checkCustomerAccount;
29+
2730
/**
2831
* @var AddressRepositoryInterface
2932
*/
30-
private $addressRepositoryInterface;
33+
private $addressRepository;
3134

3235
/**
33-
* @param AddressRepositoryInterface $addressRepositoryInterface
36+
* @param CheckCustomerAccount $checkCustomerAccount
37+
* @param AddressRepositoryInterface $addressRepository
3438
*/
3539
public function __construct(
36-
AddressRepositoryInterface $addressRepositoryInterface
40+
CheckCustomerAccount $checkCustomerAccount,
41+
AddressRepositoryInterface $addressRepository
3742
) {
38-
$this->addressRepositoryInterface = $addressRepositoryInterface;
43+
$this->checkCustomerAccount = $checkCustomerAccount;
44+
$this->addressRepository = $addressRepository;
3945
}
4046

4147
/**
@@ -48,17 +54,12 @@ public function resolve(
4854
array $value = null,
4955
array $args = null
5056
) {
51-
/** @var \Magento\Framework\GraphQl\Query\Resolver\ContextInterface $context */
52-
if ((!$context->getUserId()) || $context->getUserType() == UserContextInterface::USER_TYPE_GUEST) {
53-
throw new GraphQlAuthorizationException(
54-
__(
55-
'Current customer does not have access to the resource "%1"',
56-
[AddressMetadataManagementInterface::ENTITY_TYPE_ADDRESS]
57-
)
58-
);
59-
}
60-
$customerId = $context->getUserId();
61-
return $this->processCustomerAddressDelete($customerId, $args['id']);
57+
$currentUserId = $context->getUserId();
58+
$currentUserType = $context->getUserType();
59+
60+
$this->checkCustomerAccount->execute($currentUserId, $currentUserType);
61+
62+
return $this->processCustomerAddressDelete($currentUserId, $args['id']);
6263
}
6364

6465
/**
@@ -74,7 +75,7 @@ private function processCustomerAddressDelete($customerId, $addressId)
7475
{
7576
try {
7677
/** @var AddressInterface $address */
77-
$address = $this->addressRepositoryInterface->getById($addressId);
78+
$address = $this->addressRepository->getById($addressId);
7879
} catch (NoSuchEntityException $exception) {
7980
throw new GraphQlNoSuchEntityException(
8081
__('Address id %1 does not exist.', [$addressId])
@@ -95,6 +96,6 @@ private function processCustomerAddressDelete($customerId, $addressId)
9596
__('Customer Address %1 is set as default shipping address and can not be deleted', [$addressId])
9697
);
9798
}
98-
return $this->addressRepositoryInterface->delete($address);
99+
return $this->addressRepository->delete($address);
99100
}
100101
}

0 commit comments

Comments
 (0)