UpdateCustomer.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\CustomerGraphQl\Model\Resolver;
  8. use Magento\CustomerGraphQl\Model\Customer\ChangeSubscriptionStatus;
  9. use Magento\CustomerGraphQl\Model\Customer\CheckCustomerAccount;
  10. use Magento\CustomerGraphQl\Model\Customer\UpdateCustomerData;
  11. use Magento\Framework\GraphQl\Exception\GraphQlInputException;
  12. use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
  13. use Magento\CustomerGraphQl\Model\Customer\CustomerDataProvider;
  14. use Magento\Framework\GraphQl\Config\Element\Field;
  15. use Magento\Framework\GraphQl\Query\ResolverInterface;
  16. /**
  17. * Update customer data resolver
  18. */
  19. class UpdateCustomer implements ResolverInterface
  20. {
  21. /**
  22. * @var CheckCustomerAccount
  23. */
  24. private $checkCustomerAccount;
  25. /**
  26. * @var UpdateCustomerData
  27. */
  28. private $updateCustomerData;
  29. /**
  30. * @var ChangeSubscriptionStatus
  31. */
  32. private $changeSubscriptionStatus;
  33. /**
  34. * @var CustomerDataProvider
  35. */
  36. private $customerDataProvider;
  37. /**
  38. * @param CheckCustomerAccount $checkCustomerAccount
  39. * @param UpdateCustomerData $updateCustomerData
  40. * @param ChangeSubscriptionStatus $changeSubscriptionStatus
  41. * @param CustomerDataProvider $customerDataProvider
  42. */
  43. public function __construct(
  44. CheckCustomerAccount $checkCustomerAccount,
  45. UpdateCustomerData $updateCustomerData,
  46. ChangeSubscriptionStatus $changeSubscriptionStatus,
  47. CustomerDataProvider $customerDataProvider
  48. ) {
  49. $this->checkCustomerAccount = $checkCustomerAccount;
  50. $this->updateCustomerData = $updateCustomerData;
  51. $this->changeSubscriptionStatus = $changeSubscriptionStatus;
  52. $this->customerDataProvider = $customerDataProvider;
  53. }
  54. /**
  55. * @inheritdoc
  56. */
  57. public function resolve(
  58. Field $field,
  59. $context,
  60. ResolveInfo $info,
  61. array $value = null,
  62. array $args = null
  63. ) {
  64. if (!isset($args['input']) || !is_array($args['input']) || empty($args['input'])) {
  65. throw new GraphQlInputException(__('"input" value should be specified'));
  66. }
  67. $currentUserId = $context->getUserId();
  68. $currentUserType = $context->getUserType();
  69. $this->checkCustomerAccount->execute($currentUserId, $currentUserType);
  70. $currentUserId = (int)$currentUserId;
  71. $this->updateCustomerData->execute($currentUserId, $args['input']);
  72. if (isset($args['input']['is_subscribed'])) {
  73. $this->changeSubscriptionStatus->execute($currentUserId, (bool)$args['input']['is_subscribed']);
  74. }
  75. $data = $this->customerDataProvider->getCustomerById($currentUserId);
  76. return ['customer' => $data];
  77. }
  78. }