Files
magento2/app/code/Magento/InstantPurchase/Model/InstantPurchaseOptionLoadingFactory.php

114 lines
3.5 KiB
PHP

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\InstantPurchase\Model;
use Magento\Customer\Api\AddressRepositoryInterface;
use Magento\Customer\Model\Address;
use Magento\Customer\Model\AddressFactory;
use Magento\Quote\Api\Data\ShippingMethodInterfaceFactory;
use Magento\Vault\Api\PaymentTokenManagementInterface;
/**
* Create instances of instant purchase option based on raw data with loading of all required objects.
*/
class InstantPurchaseOptionLoadingFactory
{
/**
* @var InstantPurchaseOptionFactory
*/
private $instantPurchaseOptionFactory;
/**
* @var PaymentTokenManagementInterface
*/
private $paymentTokenManagement;
/**
* @var AddressRepositoryInterface
*/
private $addressRepository;
/**
* @var AddressFactory
*/
private $addressFactory;
/**
* @var ShippingMethodInterfaceFactory
*/
private $shippingMethodFactory;
/**
* InstantPurchaseOptionLoadingFactory constructor.
* @param InstantPurchaseOptionFactory $instantPurchaseOptionFactory
* @param PaymentTokenManagementInterface $paymentTokenManagement
* @param AddressRepositoryInterface $addressRepository
* @param AddressFactory $addressFactory
* @param ShippingMethodInterfaceFactory $shippingMethodFactory
*/
public function __construct(
InstantPurchaseOptionFactory $instantPurchaseOptionFactory,
PaymentTokenManagementInterface $paymentTokenManagement,
AddressRepositoryInterface $addressRepository,
AddressFactory $addressFactory,
ShippingMethodInterfaceFactory $shippingMethodFactory
) {
$this->instantPurchaseOptionFactory = $instantPurchaseOptionFactory;
$this->paymentTokenManagement = $paymentTokenManagement;
$this->addressRepository = $addressRepository;
$this->addressFactory = $addressFactory;
$this->shippingMethodFactory = $shippingMethodFactory;
}
/**
* Loads entities and use them for instant purchase option creation.
*
* @param int $customerId
* @param string $paymentTokenPublicHash
* @param int $shippingAddressId
* @param int $billingAddressId
* @param string $carrierCode
* @param string $shippingMethodCode
* @return InstantPurchaseOption
*/
public function create(
int $customerId,
string $paymentTokenPublicHash,
int $shippingAddressId,
int $billingAddressId,
string $carrierCode,
string $shippingMethodCode
): InstantPurchaseOption {
$paymentToken = $this->paymentTokenManagement->getByPublicHash($paymentTokenPublicHash, $customerId);
$shippingAddress = $this->getAddress($shippingAddressId);
$billingAddress = $this->getAddress($billingAddressId);
$shippingMethod = $this->shippingMethodFactory->create()
->setCarrierCode($carrierCode)
->setMethodCode($shippingMethodCode);
return $this->instantPurchaseOptionFactory->create(
$paymentToken,
$shippingAddress,
$billingAddress,
$shippingMethod
);
}
/**
* Loads customer address model by identifier.
*
* @param int $addressId
* @return Address
*/
private function getAddress($addressId): Address
{
$addressDataModel = $this->addressRepository->getById($addressId);
$address = $this->addressFactory->create();
$address->updateData($addressDataModel);
return $address;
}
}