SetShippingAddressesOnCart.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\QuoteGraphQl\Model\Resolver;
  8. use Magento\Framework\GraphQl\Config\Element\Field;
  9. use Magento\Framework\GraphQl\Exception\GraphQlInputException;
  10. use Magento\Framework\GraphQl\Query\ResolverInterface;
  11. use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
  12. use Magento\Framework\Stdlib\ArrayManager;
  13. use Magento\Quote\Model\ShippingAddressManagementInterface;
  14. use Magento\QuoteGraphQl\Model\Cart\GetCartForUser;
  15. use Magento\QuoteGraphQl\Model\Cart\SetShippingAddressesOnCartInterface;
  16. /**
  17. * Class SetShippingAddressesOnCart
  18. *
  19. * Mutation resolver for setting shipping addresses for shopping cart
  20. */
  21. class SetShippingAddressesOnCart implements ResolverInterface
  22. {
  23. /**
  24. * @var ShippingAddressManagementInterface
  25. */
  26. private $shippingAddressManagement;
  27. /**
  28. * @var GetCartForUser
  29. */
  30. private $getCartForUser;
  31. /**
  32. * @var ArrayManager
  33. */
  34. private $arrayManager;
  35. /**
  36. * @var SetShippingAddressesOnCartInterface
  37. */
  38. private $setShippingAddressesOnCart;
  39. /**
  40. * @param ShippingAddressManagementInterface $shippingAddressManagement
  41. * @param GetCartForUser $getCartForUser
  42. * @param ArrayManager $arrayManager
  43. * @param SetShippingAddressesOnCartInterface $setShippingAddressesOnCart
  44. */
  45. public function __construct(
  46. ShippingAddressManagementInterface $shippingAddressManagement,
  47. GetCartForUser $getCartForUser,
  48. ArrayManager $arrayManager,
  49. SetShippingAddressesOnCartInterface $setShippingAddressesOnCart
  50. ) {
  51. $this->shippingAddressManagement = $shippingAddressManagement;
  52. $this->getCartForUser = $getCartForUser;
  53. $this->arrayManager = $arrayManager;
  54. $this->setShippingAddressesOnCart = $setShippingAddressesOnCart;
  55. }
  56. /**
  57. * @inheritdoc
  58. */
  59. public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
  60. {
  61. $shippingAddresses = $this->arrayManager->get('input/shipping_addresses', $args);
  62. $maskedCartId = (string) $this->arrayManager->get('input/cart_id', $args);
  63. if (!$maskedCartId) {
  64. throw new GraphQlInputException(__('Required parameter "cart_id" is missing'));
  65. }
  66. if (!$shippingAddresses) {
  67. throw new GraphQlInputException(__('Required parameter "shipping_addresses" is missing'));
  68. }
  69. $cart = $this->getCartForUser->execute($maskedCartId, $context->getUserId());
  70. $this->setShippingAddressesOnCart->execute($context, $cart, $shippingAddresses);
  71. return [
  72. 'cart' => [
  73. 'cart_id' => $maskedCartId,
  74. 'model' => $cart,
  75. ]
  76. ];
  77. }
  78. }