IpnRequestFactory::getRefundHandlerMap()   A
last analyzed

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