123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\CustomerGraphQl\Model\Resolver;
- use Magento\Customer\Api\AddressRepositoryInterface;
- use Magento\Customer\Api\Data\AddressInterfaceFactory;
- use Magento\Customer\Api\Data\AddressInterface;
- use Magento\CustomerGraphQl\Model\Customer\Address\CustomerAddressCreateDataValidator;
- use Magento\CustomerGraphQl\Model\Customer\Address\CustomerAddressDataProvider;
- use Magento\CustomerGraphQl\Model\Customer\CheckCustomerAccount;
- use Magento\Framework\Api\DataObjectHelper;
- use Magento\Framework\Exception\InputException;
- use Magento\Framework\GraphQl\Exception\GraphQlInputException;
- use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
- use Magento\Framework\GraphQl\Config\Element\Field;
- use Magento\Framework\GraphQl\Query\ResolverInterface;
- /**
- * Customers address create, used for GraphQL request processing
- */
- class CreateCustomerAddress implements ResolverInterface
- {
- /**
- * @var CheckCustomerAccount
- */
- private $checkCustomerAccount;
- /**
- * @var AddressRepositoryInterface
- */
- private $addressRepository;
- /**
- * @var AddressInterfaceFactory
- */
- private $addressInterfaceFactory;
- /**
- * @var CustomerAddressDataProvider
- */
- private $customerAddressDataProvider;
- /**
- * @var DataObjectHelper
- */
- private $dataObjectHelper;
- /**
- * @var CustomerAddressCreateDataValidator
- */
- private $customerAddressCreateDataValidator;
- /**
- * @param CheckCustomerAccount $checkCustomerAccount
- * @param AddressRepositoryInterface $addressRepository
- * @param AddressInterfaceFactory $addressInterfaceFactory
- * @param CustomerAddressDataProvider $customerAddressDataProvider
- * @param DataObjectHelper $dataObjectHelper
- * @param CustomerAddressCreateDataValidator $customerAddressCreateDataValidator
- */
- public function __construct(
- CheckCustomerAccount $checkCustomerAccount,
- AddressRepositoryInterface $addressRepository,
- AddressInterfaceFactory $addressInterfaceFactory,
- CustomerAddressDataProvider $customerAddressDataProvider,
- DataObjectHelper $dataObjectHelper,
- CustomerAddressCreateDataValidator $customerAddressCreateDataValidator
- ) {
- $this->checkCustomerAccount = $checkCustomerAccount;
- $this->addressRepository = $addressRepository;
- $this->addressInterfaceFactory = $addressInterfaceFactory;
- $this->customerAddressDataProvider = $customerAddressDataProvider;
- $this->dataObjectHelper = $dataObjectHelper;
- $this->customerAddressCreateDataValidator = $customerAddressCreateDataValidator;
- }
- /**
- * @inheritdoc
- */
- public function resolve(
- Field $field,
- $context,
- ResolveInfo $info,
- array $value = null,
- array $args = null
- ) {
- $currentUserId = $context->getUserId();
- $currentUserType = $context->getUserType();
- $this->checkCustomerAccount->execute($currentUserId, $currentUserType);
- $this->customerAddressCreateDataValidator->validate($args['input']);
- $address = $this->createCustomerAddress((int)$currentUserId, $args['input']);
- return $this->customerAddressDataProvider->getAddressData($address);
- }
- /**
- * Create customer address
- *
- * @param int $customerId
- * @param array $addressData
- * @return AddressInterface
- * @throws GraphQlInputException
- */
- private function createCustomerAddress(int $customerId, array $addressData) : AddressInterface
- {
- /** @var AddressInterface $address */
- $address = $this->addressInterfaceFactory->create();
- $this->dataObjectHelper->populateWithArray($address, $addressData, AddressInterface::class);
- $address->setCustomerId($customerId);
- try {
- $address = $this->addressRepository->save($address);
- } catch (InputException $e) {
- throw new GraphQlInputException(__($e->getMessage()), $e);
- }
- return $address;
- }
- }
|