InstantPurchaseOptionLoadingFactory.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\InstantPurchase\Model;
  7. use Magento\Customer\Api\AddressRepositoryInterface;
  8. use Magento\Customer\Model\Address;
  9. use Magento\Customer\Model\AddressFactory;
  10. use Magento\Quote\Api\Data\ShippingMethodInterfaceFactory;
  11. use Magento\Vault\Api\PaymentTokenManagementInterface;
  12. /**
  13. * Create instances of instant purchase option based on raw data with loading of all required objects.
  14. */
  15. class InstantPurchaseOptionLoadingFactory
  16. {
  17. /**
  18. * @var InstantPurchaseOptionFactory
  19. */
  20. private $instantPurchaseOptionFactory;
  21. /**
  22. * @var PaymentTokenManagementInterface
  23. */
  24. private $paymentTokenManagement;
  25. /**
  26. * @var AddressRepositoryInterface
  27. */
  28. private $addressRepository;
  29. /**
  30. * @var AddressFactory
  31. */
  32. private $addressFactory;
  33. /**
  34. * @var ShippingMethodInterfaceFactory
  35. */
  36. private $shippingMethodFactory;
  37. /**
  38. * InstantPurchaseOptionLoadingFactory constructor.
  39. * @param InstantPurchaseOptionFactory $instantPurchaseOptionFactory
  40. * @param PaymentTokenManagementInterface $paymentTokenManagement
  41. * @param AddressRepositoryInterface $addressRepository
  42. * @param AddressFactory $addressFactory
  43. * @param ShippingMethodInterfaceFactory $shippingMethodFactory
  44. */
  45. public function __construct(
  46. InstantPurchaseOptionFactory $instantPurchaseOptionFactory,
  47. PaymentTokenManagementInterface $paymentTokenManagement,
  48. AddressRepositoryInterface $addressRepository,
  49. AddressFactory $addressFactory,
  50. ShippingMethodInterfaceFactory $shippingMethodFactory
  51. ) {
  52. $this->instantPurchaseOptionFactory = $instantPurchaseOptionFactory;
  53. $this->paymentTokenManagement = $paymentTokenManagement;
  54. $this->addressRepository = $addressRepository;
  55. $this->addressFactory = $addressFactory;
  56. $this->shippingMethodFactory = $shippingMethodFactory;
  57. }
  58. /**
  59. * Loads entities and use them for instant purchase option creation.
  60. *
  61. * @param int $customerId
  62. * @param string $paymentTokenPublicHash
  63. * @param int $shippingAddressId
  64. * @param int $billingAddressId
  65. * @param string $carrierCode
  66. * @param string $shippingMethodCode
  67. * @return InstantPurchaseOption
  68. */
  69. public function create(
  70. int $customerId,
  71. string $paymentTokenPublicHash,
  72. int $shippingAddressId,
  73. int $billingAddressId,
  74. string $carrierCode,
  75. string $shippingMethodCode
  76. ): InstantPurchaseOption {
  77. $paymentToken = $this->paymentTokenManagement->getByPublicHash($paymentTokenPublicHash, $customerId);
  78. $shippingAddress = $this->getAddress($shippingAddressId);
  79. $billingAddress = $this->getAddress($billingAddressId);
  80. $shippingMethod = $this->shippingMethodFactory->create()
  81. ->setCarrierCode($carrierCode)
  82. ->setMethodCode($shippingMethodCode);
  83. return $this->instantPurchaseOptionFactory->create(
  84. $paymentToken,
  85. $shippingAddress,
  86. $billingAddress,
  87. $shippingMethod
  88. );
  89. }
  90. /**
  91. * Loads customer address model by identifier.
  92. *
  93. * @param int $addressId
  94. * @return Address
  95. */
  96. private function getAddress($addressId): Address
  97. {
  98. $addressDataModel = $this->addressRepository->getById($addressId);
  99. $address = $this->addressFactory->create();
  100. $address->updateData($addressDataModel);
  101. return $address;
  102. }
  103. }