Passed
Pull Request — dev (#9)
by Andrey
08:25 queued 04:31
created

IpnRequestFactory::getRefundHandlerMap()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 0
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Apache OSL-2
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn;
9
10
use Generated\Shared\Transfer\AmazonpayIpnPaymentRequestTransfer;
1 ignored issue
show
Bug introduced by
The type Generated\Shared\Transfe...nPaymentRequestTransfer 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 SprykerEco\Shared\AmazonPay\AmazonPayConfig;
12
use SprykerEco\Zed\AmazonPay\Business\Order\RefundOrderInterface;
13
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Authorize\IpnPaymentAuthorizeClosedHandler;
14
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Authorize\IpnPaymentAuthorizeDeclineHandler;
15
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Authorize\IpnPaymentAuthorizeOpenHandler;
16
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Authorize\IpnPaymentAuthorizeSuspendedHandler;
17
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Capture\IpnPaymentCaptureCompletedHandler;
18
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Capture\IpnPaymentCaptureDeclineHandler;
19
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Logger\IpnRequestLoggerInterface;
20
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\OrderReference\IpnOrderReferenceCancelledHandler;
21
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\OrderReference\IpnOrderReferenceClosedHandler;
22
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\OrderReference\IpnOrderReferenceOpenHandler;
23
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\OrderReference\IpnOrderReferenceSuspendedHandler;
24
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Refund\IpnPaymentRefundCompletedHandler;
25
use SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Refund\IpnPaymentRefundDeclineHandler;
26
use SprykerEco\Zed\AmazonPay\Dependency\Facade\AmazonPayToOmsInterface;
27
use SprykerEco\Zed\AmazonPay\Persistence\AmazonPayQueryContainerInterface;
28
29
class IpnRequestFactory implements IpnRequestFactoryInterface
30
{
31
    /**
32
     * @var \SprykerEco\Zed\AmazonPay\Dependency\Facade\AmazonPayToOmsInterface
33
     */
34
    protected $omsFacade;
35
36
    /**
37
     * @var \SprykerEco\Zed\AmazonPay\Persistence\AmazonPayQueryContainerInterface
38
     */
39
    protected $amazonpayQueryContainer;
40
41
    /**
42
     * @var \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Logger\IpnRequestLoggerInterface
43
     */
44
    protected $ipnRequestLogger;
45
46
    /**
47
     * @var \SprykerEco\Zed\AmazonPay\Business\Order\RefundOrderInterface
48
     */
49
    protected $refundOrderModel;
50
51
    /**
52
     * @param \SprykerEco\Zed\AmazonPay\Dependency\Facade\AmazonPayToOmsInterface $omsFacade
53
     * @param \SprykerEco\Zed\AmazonPay\Persistence\AmazonPayQueryContainerInterface $amazonpayQueryContainer
54
     * @param \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\Logger\IpnRequestLoggerInterface $ipnRequestLogger
55
     * @param \SprykerEco\Zed\AmazonPay\Business\Order\RefundOrderInterface $refundOrderModel
56
     */
57
    public function __construct(
58
        AmazonPayToOmsInterface $omsFacade,
59
        AmazonPayQueryContainerInterface $amazonpayQueryContainer,
60
        IpnRequestLoggerInterface $ipnRequestLogger,
61
        RefundOrderInterface $refundOrderModel
62
    ) {
63
        $this->omsFacade = $omsFacade;
64
        $this->amazonpayQueryContainer = $amazonpayQueryContainer;
65
        $this->ipnRequestLogger = $ipnRequestLogger;
66
        $this->refundOrderModel = $refundOrderModel;
67
    }
68
69
    /**
70
     * @param \Generated\Shared\Transfer\AmazonpayIpnPaymentRequestTransfer $paymentRequestTransfer
71
     *
72
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
73
     */
74
    public function getConcreteIpnRequestHandler(AmazonpayIpnPaymentRequestTransfer $paymentRequestTransfer)
75
    {
76
        $handlerMap = $this->getNotificationTypeToHandlerMap();
77
        $notificationType = $paymentRequestTransfer->getMessage()->getNotificationType();
78
79
        return $handlerMap[$notificationType]($paymentRequestTransfer);
80
    }
81
82
    /**
83
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface[]
84
     */
85
    protected function getNotificationTypeToHandlerMap()
86
    {
87
        return [
88
            AmazonPayConfig::IPN_REQUEST_TYPE_PAYMENT_AUTHORIZE => function (AmazonpayIpnPaymentRequestTransfer $ipnRequest) {
89
                return $this->getIpnPaymentAuthorizeHandler($ipnRequest);
90
            },
91
            AmazonPayConfig::IPN_REQUEST_TYPE_PAYMENT_CAPTURE => function (AmazonpayIpnPaymentRequestTransfer $ipnRequest) {
92
                return $this->getIpnPaymentCaptureHandler($ipnRequest);
93
            },
94
            AmazonPayConfig::IPN_REQUEST_TYPE_PAYMENT_REFUND => function (AmazonpayIpnPaymentRequestTransfer $ipnRequest) {
95
                return $this->getIpnPaymentRefundHandler($ipnRequest);
96
            },
97
            AmazonPayConfig::IPN_REQUEST_TYPE_ORDER_REFERENCE_NOTIFICATION => function (AmazonpayIpnPaymentRequestTransfer $ipnRequest) {
98
                return $this->getIpnOrderReferenceHandler($ipnRequest);
99
            },
100
        ];
101
    }
102
103
    /**
104
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface[]
105
     */
106
    protected function getAuthorizeHandlerMap()
107
    {
108
        return [
109
            AmazonPayConfig::STATUS_TRANSACTION_TIMED_OUT => function () {
110
                return $this->createIpnPaymentAuthorizeSuspendedHandler();
111
            },
112
            AmazonPayConfig::STATUS_SUSPENDED => function () {
113
                return $this->createIpnPaymentAuthorizeSuspendedHandler();
114
            },
115
            AmazonPayConfig::STATUS_PAYMENT_METHOD_INVALID => function () {
116
                return $this->createIpnPaymentAuthorizeSuspendedHandler();
117
            },
118
            AmazonPayConfig::STATUS_DECLINED => function () {
119
                return $this->createIpnPaymentAuthorizeDeclineHandler();
120
            },
121
            AmazonPayConfig::STATUS_OPEN => function () {
122
                return $this->createIpnPaymentAuthorizeOpenHandler();
123
            },
124
            AmazonPayConfig::STATUS_CLOSED => function () {
125
                return $this->createIpnPaymentAuthorizeClosedHandler();
126
            },
127
            AmazonPayConfig::STATUS_EXPIRED => function () {
128
                return $this->createIpnPaymentAuthorizeClosedHandler();
129
            },
130
        ];
131
    }
132
133
    /**
134
     * @param \Generated\Shared\Transfer\AmazonpayIpnPaymentRequestTransfer $ipnRequest
135
     *
136
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
137
     */
138
    protected function getIpnPaymentAuthorizeHandler(AmazonpayIpnPaymentRequestTransfer $ipnRequest)
139
    {
140
        $authStatus = $ipnRequest->getAuthorizationDetails()->getAuthorizationStatus()->getState();
141
142
        return $this->getAuthorizeHandlerMap()[$authStatus]();
143
    }
144
145
    /**
146
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
147
     */
148
    protected function createIpnPaymentAuthorizeSuspendedHandler()
149
    {
150
        return new IpnPaymentAuthorizeSuspendedHandler(
151
            $this->omsFacade,
152
            $this->amazonpayQueryContainer,
153
            $this->ipnRequestLogger
154
        );
155
    }
156
157
    /**
158
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
159
     */
160
    protected function createIpnPaymentAuthorizeDeclineHandler()
161
    {
162
            return new IpnPaymentAuthorizeDeclineHandler(
163
                $this->omsFacade,
164
                $this->amazonpayQueryContainer,
165
                $this->ipnRequestLogger
166
            );
167
    }
168
169
    /**
170
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
171
     */
172
    protected function createIpnPaymentAuthorizeOpenHandler()
173
    {
174
        return new IpnPaymentAuthorizeOpenHandler(
175
            $this->omsFacade,
176
            $this->amazonpayQueryContainer,
177
            $this->ipnRequestLogger
178
        );
179
    }
180
181
    /**
182
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
183
     */
184
    protected function createIpnPaymentAuthorizeClosedHandler()
185
    {
186
        return new IpnPaymentAuthorizeClosedHandler(
187
            $this->omsFacade,
188
            $this->amazonpayQueryContainer,
189
            $this->ipnRequestLogger
190
        );
191
    }
192
193
    /**
194
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface[]
195
     */
196
    protected function getCaptureHandlerMap()
197
    {
198
        return [
199
            AmazonPayConfig::STATUS_DECLINED => function () {
200
                return $this->createIpnPaymentCaptureDeclineHandler();
201
            },
202
            AmazonPayConfig::STATUS_COMPLETED => function () {
203
                return $this->createIpnPaymentCaptureCompletedHandler();
204
            },
205
            AmazonPayConfig::STATUS_CLOSED => function () {
206
                return $this->createIpnEmptyHandler();
207
            },
208
        ];
209
    }
210
211
    /**
212
     * @param \Generated\Shared\Transfer\AmazonpayIpnPaymentRequestTransfer $ipnRequest
213
     *
214
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
215
     */
216
    protected function getIpnPaymentCaptureHandler(AmazonpayIpnPaymentRequestTransfer $ipnRequest)
217
    {
218
        $captureStatus = $ipnRequest->getCaptureDetails()->getCaptureStatus()->getState();
219
220
        return $this->getCaptureHandlerMap()[$captureStatus]();
221
    }
222
223
    /**
224
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
225
     */
226
    protected function createIpnPaymentCaptureDeclineHandler()
227
    {
228
        return new IpnPaymentCaptureDeclineHandler(
229
            $this->omsFacade,
230
            $this->amazonpayQueryContainer,
231
            $this->ipnRequestLogger
232
        );
233
    }
234
235
    /**
236
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
237
     */
238
    protected function createIpnPaymentCaptureCompletedHandler()
239
    {
240
        return new IpnPaymentCaptureCompletedHandler(
241
            $this->omsFacade,
242
            $this->amazonpayQueryContainer,
243
            $this->ipnRequestLogger
244
        );
245
    }
246
247
    /**
248
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
249
     */
250
    protected function createIpnEmptyHandler()
251
    {
252
        return new IpnEmptyHandler();
253
    }
254
255
    /**
256
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface[]
257
     */
258
    protected function getRefundHandlerMap()
259
    {
260
        return [
261
            AmazonPayConfig::STATUS_DECLINED => function () {
262
                return $this->createIpnPaymentRefundDeclineHandler();
263
            },
264
            AmazonPayConfig::STATUS_COMPLETED => function () {
265
                return $this->createIpnPaymentRefundCompletedHandler();
266
            },
267
        ];
268
    }
269
270
    /**
271
     * @param \Generated\Shared\Transfer\AmazonpayIpnPaymentRequestTransfer $ipnRequest
272
     *
273
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
274
     */
275
    protected function getIpnPaymentRefundHandler(AmazonpayIpnPaymentRequestTransfer $ipnRequest)
276
    {
277
        $refundStatus = $ipnRequest->getRefundDetails()->getRefundStatus()->getState();
278
279
        return $this->getRefundHandlerMap()[$refundStatus]();
280
    }
281
282
    /**
283
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
284
     */
285
    protected function createIpnPaymentRefundDeclineHandler()
286
    {
287
        return new IpnPaymentRefundDeclineHandler(
288
            $this->omsFacade,
289
            $this->amazonpayQueryContainer,
290
            $this->ipnRequestLogger
291
        );
292
    }
293
294
    /**
295
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
296
     */
297
    protected function createIpnPaymentRefundCompletedHandler()
298
    {
299
        return new IpnPaymentRefundCompletedHandler(
300
            $this->omsFacade,
301
            $this->amazonpayQueryContainer,
302
            $this->ipnRequestLogger,
303
            $this->refundOrderModel
304
        );
305
    }
306
307
    /**
308
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface[]
309
     */
310
    protected function getOrderReferenceHandlerMap()
311
    {
312
        return [
313
            AmazonPayConfig::STATUS_OPEN => function () {
314
                return $this->createIpnOrderReferenceOpenHandler();
315
            },
316
            AmazonPayConfig::STATUS_AMAZON_CLOSED => function () {
317
                return $this->createIpnOrderReferenceClosedHandler();
318
            },
319
            AmazonPayConfig::STATUS_EXPIRED => function () {
320
                return $this->createIpnPaymentAuthorizeClosedHandler();
321
            },
322
            AmazonPayConfig::STATUS_CLOSED => function () {
323
                return $this->createIpnEmptyHandler();
324
            },
325
            AmazonPayConfig::STATUS_PAYMENT_METHOD_INVALID => function () {
326
                return $this->createIpnOrderReferenceSuspendedHandler();
327
            },
328
            AmazonPayConfig::STATUS_SUSPENDED => function () {
329
                return $this->createIpnOrderReferenceSuspendedHandler();
330
            },
331
            AmazonPayConfig::STATUS_CANCELLED => function () {
332
                return $this->createIpnOrderReferenceCancelledHandler();
333
            },
334
        ];
335
    }
336
337
    /**
338
     * @param \Generated\Shared\Transfer\AmazonpayIpnPaymentRequestTransfer $ipnRequest
339
     *
340
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
341
     */
342
    protected function getIpnOrderReferenceHandler(AmazonpayIpnPaymentRequestTransfer $ipnRequest)
343
    {
344
        $orderReferenceStatus = $ipnRequest->getOrderReferenceStatus()->getState();
345
346
        return $this->getOrderReferenceHandlerMap()[$orderReferenceStatus]();
347
    }
348
349
    /**
350
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
351
     */
352
    protected function createIpnOrderReferenceOpenHandler()
353
    {
354
        return new IpnOrderReferenceOpenHandler(
355
            $this->omsFacade,
356
            $this->amazonpayQueryContainer,
357
            $this->ipnRequestLogger
358
        );
359
    }
360
361
    /**
362
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
363
     */
364
    protected function createIpnOrderReferenceClosedHandler()
365
    {
366
        return new IpnOrderReferenceClosedHandler(
367
            $this->omsFacade,
368
            $this->amazonpayQueryContainer,
369
            $this->ipnRequestLogger
370
        );
371
    }
372
373
    /**
374
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
375
     */
376
    protected function createIpnOrderReferenceSuspendedHandler()
377
    {
378
        return new IpnOrderReferenceSuspendedHandler(
379
            $this->omsFacade,
380
            $this->amazonpayQueryContainer,
381
            $this->ipnRequestLogger
382
        );
383
    }
384
385
    /**
386
     * @return \SprykerEco\Zed\AmazonPay\Business\Payment\Handler\Ipn\IpnRequestHandlerInterface
387
     */
388
    protected function createIpnOrderReferenceCancelledHandler()
389
    {
390
        return new IpnOrderReferenceCancelledHandler(
391
            $this->omsFacade,
392
            $this->amazonpayQueryContainer,
393
            $this->ipnRequestLogger
394
        );
395
    }
396
}
397