__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 8
rs 10
cc 1
nc 1
nop 3
1
<?php
2
3
/**
4
 * MIT License
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
namespace SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Handler;
9
10
use Generated\Shared\Transfer\HeidelpayResponseTransfer;
11
use Generated\Shared\Transfer\OrderTransfer;
12
use SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface;
13
use SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\AuthorizeOnRegistrationTransactionInterface;
14
use SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Exception\AuthorizeOnRegistrationNotSupportedException;
15
16
class AuthorizeOnRegistrationTransactionHandler implements AuthorizeOnRegistrationTransactionHandlerInterface
17
{
18
    public const ERROR_MESSAGE_AUTHORIZE_ON_REGISTRATION_TRANSACTION_NOT_SUPPORTED =
19
        'Attempt to call authorize on registration transaction on payment method \'%s\' ' .
20
        'that does not support it';
21
    /**
22
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\AuthorizeOnRegistrationTransactionInterface
23
     */
24
    protected $transaction;
25
26
    /**
27
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithAuthorizeOnRegistrationInterface[]
28
     */
29
    protected $paymentMethodAdapterCollection;
30
31
    /**
32
     * @var \SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface
33
     */
34
    protected $heidelpayRequestBuilder;
35
36
    /**
37
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\AuthorizeOnRegistrationTransactionInterface $transaction
38
     * @param array $paymentMethodAdapterCollection
39
     * @param \SprykerEco\Zed\Heidelpay\Business\Payment\Request\AdapterRequestFromOrderBuilderInterface $heidelpayRequestBuilder
40
     */
41
    public function __construct(
42
        AuthorizeOnRegistrationTransactionInterface $transaction,
43
        array $paymentMethodAdapterCollection,
44
        AdapterRequestFromOrderBuilderInterface $heidelpayRequestBuilder
45
    ) {
46
        $this->transaction = $transaction;
47
        $this->paymentMethodAdapterCollection = $paymentMethodAdapterCollection;
48
        $this->heidelpayRequestBuilder = $heidelpayRequestBuilder;
49
    }
50
51
    /**
52
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
53
     *
54
     * @return \Generated\Shared\Transfer\HeidelpayResponseTransfer
55
     */
56
    public function authorizeOnRegistration(OrderTransfer $orderTransfer): HeidelpayResponseTransfer
57
    {
58
        $authorizeOnRegistrationRequestTransfer = $this->buildAuthorizeOnRegistrationRequest($orderTransfer);
59
        $paymentAdapter = $this->getPaymentMethodAdapter($orderTransfer);
60
61
        return $this->transaction->executeTransaction($authorizeOnRegistrationRequestTransfer, $paymentAdapter);
62
    }
63
64
    /**
65
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
66
     *
67
     * @return \Generated\Shared\Transfer\HeidelpayRequestTransfer
68
     */
69
    protected function buildAuthorizeOnRegistrationRequest(OrderTransfer $orderTransfer)
70
    {
71
        $authorizeRequestTransfer = $this->heidelpayRequestBuilder->buildAuthorizeOnRegistrationRequestFromOrder($orderTransfer);
72
73
        return $authorizeRequestTransfer;
74
    }
75
76
    /**
77
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
78
     *
79
     * @throws \SprykerEco\Zed\Heidelpay\Business\Payment\Transaction\Exception\AuthorizeOnRegistrationNotSupportedException
80
     *
81
     * @return \SprykerEco\Zed\Heidelpay\Business\Payment\Type\PaymentWithAuthorizeOnRegistrationInterface
82
     */
83
    protected function getPaymentMethodAdapter(OrderTransfer $orderTransfer)
84
    {
85
        $paymentMethodCode = $this->getPaymentMethodCode($orderTransfer);
86
87
        if (!isset($this->paymentMethodAdapterCollection[$paymentMethodCode])) {
88
            throw new AuthorizeOnRegistrationNotSupportedException(
89
                sprintf(static::ERROR_MESSAGE_AUTHORIZE_ON_REGISTRATION_TRANSACTION_NOT_SUPPORTED, $paymentMethodCode)
90
            );
91
        }
92
93
        return $this->paymentMethodAdapterCollection[$paymentMethodCode];
94
    }
95
96
    /**
97
     * @param \Generated\Shared\Transfer\OrderTransfer $orderTransfer
98
     *
99
     * @return string
100
     */
101
    protected function getPaymentMethodCode(OrderTransfer $orderTransfer)
102
    {
103
        return $orderTransfer->getHeidelpayPayment()->getPaymentMethod();
104
    }
105
}
106