Passed
Push — feature/eco-574/eco-2266-check... ( efd21d )
by Aleksey
08:13
created

CaptureCall::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 5
dl 0
loc 12
rs 10
c 0
b 0
f 0
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\Afterpay\Business\Api\Adapter\ApiCall;
9
10
use Generated\Shared\Transfer\AfterpayApiResponseTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...rpayApiResponseTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
11
use Generated\Shared\Transfer\AfterpayCaptureRequestTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...yCaptureRequestTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
12
use Generated\Shared\Transfer\AfterpayCaptureResponseTransfer;
0 ignored issues
show
Bug introduced by
The type Generated\Shared\Transfe...CaptureResponseTransfer was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
13
use SprykerEco\Shared\Afterpay\AfterpayApiRequestConfig;
14
use SprykerEco\Shared\Afterpay\AfterpayConfig as AfterpayConfig1;
15
use SprykerEco\Shared\Afterpay\AfterpayConstants;
16
use SprykerEco\Zed\Afterpay\AfterpayConfig;
17
use SprykerEco\Zed\Afterpay\Business\Api\Adapter\Client\ClientInterface;
18
use SprykerEco\Zed\Afterpay\Business\Api\Adapter\Converter\TransferToCamelCaseArrayConverterInterface;
19
use SprykerEco\Zed\Afterpay\Business\Exception\ApiHttpRequestException;
20
use SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface;
21
use SprykerEco\Zed\Afterpay\Dependency\Service\AfterpayToUtilEncodingInterface;
22
23
class CaptureCall extends AbstractApiCall implements CaptureCallInterface
24
{
25
    /**
26
     * @var \SprykerEco\Zed\Afterpay\Business\Api\Adapter\Client\ClientInterface
27
     */
28
    protected $client;
29
30
    /**
31
     * @var \SprykerEco\Zed\Afterpay\AfterpayConfig
32
     */
33
    protected $config;
34
35
    /**
36
     * @var \SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface
37
     */
38
    private $money;
39
40
    /**
41
     * @param \SprykerEco\Zed\Afterpay\Business\Api\Adapter\Client\ClientInterface $client
42
     * @param \SprykerEco\Zed\Afterpay\Business\Api\Adapter\Converter\TransferToCamelCaseArrayConverterInterface $transferConverter
43
     * @param \SprykerEco\Zed\Afterpay\Dependency\Service\AfterpayToUtilEncodingInterface $utilEncoding
44
     * @param \SprykerEco\Zed\Afterpay\Dependency\Facade\AfterpayToMoneyInterface $money
45
     * @param \SprykerEco\Zed\Afterpay\AfterpayConfig $config
46
     */
47
    public function __construct(
48
        ClientInterface $client,
49
        TransferToCamelCaseArrayConverterInterface $transferConverter,
50
        AfterpayToUtilEncodingInterface $utilEncoding,
51
        AfterpayToMoneyInterface $money,
52
        AfterpayConfig $config
53
    ) {
54
        $this->client = $client;
55
        $this->transferConverter = $transferConverter;
56
        $this->utilEncoding = $utilEncoding;
57
        $this->config = $config;
58
        $this->money = $money;
59
    }
60
61
    /**
62
     * @param \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer $requestTransfer
63
     *
64
     * @throws \SprykerEco\Zed\Afterpay\Business\Exception\ApiHttpRequestException
65
     *
66
     * @return \Generated\Shared\Transfer\AfterpayCaptureResponseTransfer
67
     */
68
    public function execute(AfterpayCaptureRequestTransfer $requestTransfer): AfterpayCaptureResponseTransfer
69
    {
70
        $jsonRequest = $this->buildJsonRequestFromTransferObject($requestTransfer);
71
        try {
72
            $jsonResponse = $this->client->sendPost(
73
                $this->getCaptureEndpointUrl($requestTransfer),
74
                $jsonRequest
75
            );
76
        } catch (ApiHttpRequestException $apiHttpRequestException) {
77
            $this->logApiException($apiHttpRequestException);
78
            throw $apiHttpRequestException;
79
        }
80
81
        return $this->buildResponseTransfer($jsonResponse);
82
    }
83
84
    /**
85
     * @param \Generated\Shared\Transfer\AfterpayCaptureRequestTransfer $requestTransfer
86
     *
87
     * @return string
88
     */
89
    protected function getCaptureEndpointUrl(AfterpayCaptureRequestTransfer $requestTransfer): string
90
    {
91
        return $this->config->getCaptureApiEndpointUrl(
92
            $requestTransfer->getOrderDetails()->getNumber()
93
        );
94
    }
95
96
    /**
97
     * @param string $jsonResponse
98
     *
99
     * @return \Generated\Shared\Transfer\AfterpayCaptureResponseTransfer
100
     */
101
    protected function buildResponseTransfer(string $jsonResponse): AfterpayCaptureResponseTransfer
102
    {
103
        $apiResponseTransfer = $this->buildApiResponseTransfer($jsonResponse);
104
        $captureResponseTransfer = $this->buildCaptureResponseTransfer($jsonResponse);
105
106
        $captureResponseTransfer->setApiResponse($apiResponseTransfer);
107
108
        return $captureResponseTransfer;
109
    }
110
111
    /**
112
     * @param string $jsonResponse
113
     *
114
     * @return \Generated\Shared\Transfer\AfterpayCaptureResponseTransfer
115
     */
116
    protected function buildCaptureResponseTransfer(string $jsonResponse): AfterpayCaptureResponseTransfer
117
    {
118
        $jsonResponseArray = $this->utilEncoding->decodeJson($jsonResponse, true);
119
120
        $captureResponseTransfer = new AfterpayCaptureResponseTransfer();
121
122
        $captureResponseTransfer
123
            ->setCapturedAmount(
124
                $this->money->convertDecimalToInteger(
125
                    $jsonResponseArray[AfterpayApiRequestConfig::CAPTURE_CAPTURED_AMOUNT]
126
                )
127
            )
128
            ->setAuthorizedAmount(
129
                $this->money->convertDecimalToInteger(
130
                    $jsonResponseArray[AfterpayApiRequestConfig::CAPTURE_AUTHORIZED_AMOUNT]
131
                )
132
            )
133
            ->setRemainingAuthorizedAmount(
134
                $this->money->convertDecimalToInteger(
135
                    $jsonResponseArray[AfterpayApiRequestConfig::CAPTURE_REMAINING_AUTHORIZED_AMOUNT]
136
                )
137
            )
138
            ->setCaptureNumber(
139
                $jsonResponseArray[AfterpayApiRequestConfig::CAPTURE_CAPTURE_NUMBER]
140
            );
141
142
        return $captureResponseTransfer;
143
    }
144
145
    /**
146
     * @param string $jsonResponse
147
     *
148
     * @return \Generated\Shared\Transfer\AfterpayApiResponseTransfer
149
     */
150
    protected function buildApiResponseTransfer(string $jsonResponse): AfterpayApiResponseTransfer
151
    {
152
        $jsonResponseArray = $this->utilEncoding->decodeJson($jsonResponse, true);
153
154
        $apiResponseTransfer = new AfterpayApiResponseTransfer();
155
156
        $outcome = $jsonResponseArray[AfterpayApiRequestConfig::CAPTURE_CAPTURE_NUMBER]
157
            ? AfterpayConfig1::API_TRANSACTION_OUTCOME_ACCEPTED
158
            : AfterpayConfig1::API_TRANSACTION_OUTCOME_REJECTED;
159
160
        $apiResponseTransfer
161
            ->setOutcome($outcome)
162
            ->setResponsePayload($jsonResponse);
163
164
        return $apiResponseTransfer;
165
    }
166
}
167