Completed
Push — feature/eco-574/eco-2266-check... ( b72c03...e5ed68 )
by Ruslan
11s queued 10s
created

AfterPayBusinessFactory   B

Complexity

Total Complexity 44

Size/Duplication

Total Lines 420
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 99
dl 0
loc 420
rs 8.8798
c 0
b 0
f 0
wmc 44

42 Methods

Rating   Name   Duplication   Size   Complexity  
A createRefundTransactionHandler() 0 8 1
A createPaymentReader() 0 3 1
A createCaptureTransaction() 0 5 1
A createCaptureTransactionHandler() 0 7 1
A createTransactionLogger() 0 3 1
A createPostSaveHook() 0 5 1
A createLookupCustomerHandler() 0 3 1
A createValidateCustomerHandler() 0 5 1
A createValidateBankAccountHandler() 0 3 1
A createCancelTransactionHandler() 0 8 1
A createAuthorizeTransactionHandler() 0 7 1
A createAuthorizeTransaction() 0 6 1
A createApiAdapter() 0 3 1
A createRefundTransaction() 0 5 1
A createCancelTransaction() 0 5 1
A createCaptureRequestBuilder() 0 5 1
A createLookupInstallmentPlansHandler() 0 3 1
A createPaymentAuthorizeWriter() 0 3 1
A createAdapterFactory() 0 3 1
A createOrderSaver() 0 3 1
A createPaymentWriter() 0 3 1
A getPaymentMethodsFilterStack() 0 5 1
A createTwoStepAuthorizePaymentMethodsFilter() 0 3 1
A getUtilEncodingService() 0 3 1
A createPaymentMethodsProvider() 0 5 1
A createQuoteToRequestMapper() 0 5 1
A createPriceToPayProvider() 0 3 1
A getAfterPayToCustomerBridge() 0 3 1
A createTransactionLogReader() 0 3 1
A createOrderToRequestMapper() 0 6 1
A getAuthorizeRequestBuilderStack() 0 5 1
A getStoreFacade() 0 3 1
A createRefundRequestBuilder() 0 5 1
A createPaymentMethodsFilter() 0 10 2
A getAuthorizeRequestBuilder() 0 3 1
A createAuthorizeRequestBuilder() 0 10 2
A getPaymentFacade() 0 3 1
A createOneStepAuthorizeRequestBuilder() 0 3 1
A createCancelRequestBuilder() 0 5 1
A createTwoStepsAuthorizeRequestBuilder() 0 3 1
A createOneStepAuthorizePaymentMethodsFilter() 0 3 1
A getMoneyFacade() 0 3 1

How to fix   Complexity   

Complex Class

Complex classes like AfterPayBusinessFactory often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use AfterPayBusinessFactory, and based on these observations, apply Extract Interface, too.

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;
9
10
use Spryker\Zed\Kernel\Business\AbstractBusinessFactory;
11
use SprykerEco\Shared\AfterPay\AfterPayConfig;
12
use SprykerEco\Zed\AfterPay\AfterPayDependencyProvider;
13
use SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\LookupCustomerHandler;
14
use SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\LookupCustomerHandlerInterface;
15
use SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\LookupInstallmentPlansHandler;
16
use SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\LookupInstallmentPlansHandlerInterface;
17
use SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\ValidateBankAccountHandler;
18
use SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\ValidateBankAccountHandlerInterface;
19
use SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\ValidateCustomerHandler;
20
use SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\ValidateCustomerHandlerInterface;
21
use SprykerEco\Zed\AfterPay\Business\Api\Adapter\AdapterFactory;
22
use SprykerEco\Zed\AfterPay\Business\Api\Adapter\AdapterFactoryInterface;
23
use SprykerEco\Zed\AfterPay\Business\Api\Adapter\AdapterInterface;
24
use SprykerEco\Zed\AfterPay\Business\Api\Adapter\AfterPayApiAdapter;
25
use SprykerEco\Zed\AfterPay\Business\Exception\InvalidAfterPayAuthorizeRequestBuilderException;
26
use SprykerEco\Zed\AfterPay\Business\Exception\InvalidAfterPayPaymentMethodsFilterException;
27
use SprykerEco\Zed\AfterPay\Business\Hook\PostSaveHook;
28
use SprykerEco\Zed\AfterPay\Business\Hook\PostSaveHookInterface;
29
use SprykerEco\Zed\AfterPay\Business\Order\Saver;
30
use SprykerEco\Zed\AfterPay\Business\Order\SaverInterface;
31
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface;
32
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\OneStepAuthorizePaymentMethodsFilter;
33
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\Provider\AfterPayPaymentMethodsProvider;
34
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\Provider\AfterPayPaymentMethodsProviderInterface;
35
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\TwoStepAuthorizePaymentMethodsFilter;
36
use SprykerEco\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransfer;
37
use SprykerEco\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransferInterface;
38
use SprykerEco\Zed\AfterPay\Business\Payment\Mapper\QuoteToRequestTransfer;
39
use SprykerEco\Zed\AfterPay\Business\Payment\Mapper\QuoteToRequestTransferInterface;
40
use SprykerEco\Zed\AfterPay\Business\Payment\PaymentReader;
41
use SprykerEco\Zed\AfterPay\Business\Payment\PaymentReaderInterface;
42
use SprykerEco\Zed\AfterPay\Business\Payment\PaymentWriter;
43
use SprykerEco\Zed\AfterPay\Business\Payment\PaymentWriterInterface;
44
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\PaymentAuthorizeWriter;
45
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\PaymentAuthorizeWriterInterface;
46
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface;
47
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\OneStepAuthorizeRequestBuilder;
48
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\TwoStepsAuthorizeRequestBuilder;
49
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\AuthorizeTransaction;
50
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\AuthorizeTransactionInterface;
51
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Cancel\CancelRequestBuilder;
52
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Cancel\CancelRequestBuilderInterface;
53
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CancelTransaction;
54
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CancelTransactionInterface;
55
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Capture\CaptureRequestBuilder;
56
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Capture\CaptureRequestBuilderInterface;
57
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CaptureTransaction;
58
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CaptureTransactionInterface;
59
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\AuthorizeTransactionHandler;
60
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\AuthorizeTransactionHandlerInterface;
61
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CancelTransactionHandler;
62
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CancelTransactionHandlerInterface;
63
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CaptureTransactionHandler;
64
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CaptureTransactionHandlerInterface;
65
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\RefundTransactionHandler;
66
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\RefundTransactionHandlerInterface;
67
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Logger\TransactionLogger;
68
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Logger\TransactionLoggerInterface;
69
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProvider;
70
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface;
71
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Refund\RefundRequestBuilder;
72
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Refund\RefundRequestBuilderInterface;
73
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\RefundTransaction;
74
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\RefundTransactionInterface;
75
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\TransactionLogReader;
76
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\TransactionLogReaderInterface;
77
use SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToCustomerFacadeInterface;
78
use SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface;
79
use SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToPaymentFacadeInterface;
80
use SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToStoreFacadeInterface;
81
use SprykerEco\Zed\AfterPay\Dependency\Service\AfterPayToUtilEncodingServiceInterface;
82
83
/**
84
 * @method \SprykerEco\Zed\AfterPay\Persistence\AfterPayQueryContainerInterface getQueryContainer()
85
 * @method \SprykerEco\Zed\AfterPay\AfterPayConfig getConfig()
86
 */
87
class AfterPayBusinessFactory extends AbstractBusinessFactory
88
{
89
    /**
90
     * @return \SprykerEco\Zed\AfterPay\Business\Order\SaverInterface
91
     */
92
    public function createOrderSaver(): SaverInterface
93
    {
94
        return new Saver($this->getConfig());
95
    }
96
97
    /**
98
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\AuthorizeTransactionHandlerInterface
99
     */
100
    public function createAuthorizeTransactionHandler(): AuthorizeTransactionHandlerInterface
101
    {
102
        return new AuthorizeTransactionHandler(
103
            $this->createAuthorizeTransaction(),
104
            $this->getAuthorizeRequestBuilder(),
105
            $this->createPaymentWriter(),
106
            $this->createPriceToPayProvider()
107
        );
108
    }
109
110
    /**
111
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CaptureTransactionHandlerInterface
112
     */
113
    public function createCaptureTransactionHandler(): CaptureTransactionHandlerInterface
114
    {
115
        return new CaptureTransactionHandler(
116
            $this->createCaptureTransaction(),
117
            $this->createPaymentReader(),
118
            $this->createPaymentWriter(),
119
            $this->createCaptureRequestBuilder()
120
        );
121
    }
122
123
    /**
124
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\RefundTransactionHandlerInterface
125
     */
126
    public function createRefundTransactionHandler(): RefundTransactionHandlerInterface
127
    {
128
        return new RefundTransactionHandler(
129
            $this->createRefundTransaction(),
130
            $this->createPaymentReader(),
131
            $this->createPaymentWriter(),
132
            $this->getMoneyFacade(),
133
            $this->createRefundRequestBuilder()
134
        );
135
    }
136
137
    /**
138
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CancelTransactionHandlerInterface
139
     */
140
    public function createCancelTransactionHandler(): CancelTransactionHandlerInterface
141
    {
142
        return new CancelTransactionHandler(
143
            $this->createCancelTransaction(),
144
            $this->createPaymentReader(),
145
            $this->createPaymentWriter(),
146
            $this->getMoneyFacade(),
147
            $this->createCancelRequestBuilder()
148
        );
149
    }
150
151
    /**
152
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\PaymentReaderInterface
153
     */
154
    public function createPaymentReader(): PaymentReaderInterface
155
    {
156
        return new PaymentReader($this->getQueryContainer());
157
    }
158
159
    /**
160
     * @return \SprykerEco\Zed\AfterPay\Business\Hook\PostSaveHookInterface
161
     */
162
    public function createPostSaveHook(): PostSaveHookInterface
163
    {
164
        return new PostSaveHook(
165
            $this->createTransactionLogReader(),
166
            $this->getConfig()
167
        );
168
    }
169
170
    /**
171
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Capture\CaptureRequestBuilderInterface
172
     */
173
    public function createCaptureRequestBuilder(): CaptureRequestBuilderInterface
174
    {
175
        return new CaptureRequestBuilder(
176
            $this->createOrderToRequestMapper(),
177
            $this->getMoneyFacade()
178
        );
179
    }
180
181
    /**
182
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CaptureTransactionInterface
183
     */
184
    public function createCaptureTransaction(): CaptureTransactionInterface
185
    {
186
        return new CaptureTransaction(
187
            $this->createTransactionLogger(),
188
            $this->createApiAdapter()
189
        );
190
    }
191
192
    /**
193
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\RefundTransactionInterface
194
     */
195
    public function createRefundTransaction(): RefundTransactionInterface
196
    {
197
        return new RefundTransaction(
198
            $this->createTransactionLogger(),
199
            $this->createApiAdapter()
200
        );
201
    }
202
203
    /**
204
     * @return \SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\ValidateCustomerHandlerInterface
205
     */
206
    public function createValidateCustomerHandler(): ValidateCustomerHandlerInterface
207
    {
208
        return new ValidateCustomerHandler(
209
            $this->createApiAdapter(),
210
            $this->getAfterPayToCustomerBridge()
211
        );
212
    }
213
214
    /**
215
     * @return \SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\ValidateBankAccountHandlerInterface
216
     */
217
    public function createValidateBankAccountHandler(): ValidateBankAccountHandlerInterface
218
    {
219
        return new ValidateBankAccountHandler($this->createApiAdapter());
220
    }
221
222
    /**
223
     * @return \SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\LookupCustomerHandlerInterface
224
     */
225
    public function createLookupCustomerHandler(): LookupCustomerHandlerInterface
226
    {
227
        return new LookupCustomerHandler($this->createApiAdapter());
228
    }
229
230
    /**
231
     * @return \SprykerEco\Zed\AfterPay\Business\AdditionalServices\Handler\LookupInstallmentPlansHandlerInterface
232
     */
233
    public function createLookupInstallmentPlansHandler(): LookupInstallmentPlansHandlerInterface
234
    {
235
        return new LookupInstallmentPlansHandler($this->createApiAdapter());
236
    }
237
238
    /**
239
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\PaymentWriterInterface
240
     */
241
    public function createPaymentWriter(): PaymentWriterInterface
242
    {
243
        return new PaymentWriter($this->getQueryContainer());
244
    }
245
246
    /**
247
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\AuthorizeTransactionInterface
248
     */
249
    public function createAuthorizeTransaction(): AuthorizeTransactionInterface
250
    {
251
        return new AuthorizeTransaction(
252
            $this->createTransactionLogger(),
253
            $this->createApiAdapter(),
254
            $this->createPaymentAuthorizeWriter()
255
        );
256
    }
257
258
    /**
259
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CancelTransactionInterface
260
     */
261
    public function createCancelTransaction(): CancelTransactionInterface
262
    {
263
        return new CancelTransaction(
264
            $this->createTransactionLogger(),
265
            $this->createApiAdapter()
266
        );
267
    }
268
269
    /**
270
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Logger\TransactionLoggerInterface
271
     */
272
    public function createTransactionLogger(): TransactionLoggerInterface
273
    {
274
        return new TransactionLogger($this->getUtilEncodingService());
275
    }
276
277
    /**
278
     * @return \SprykerEco\Zed\AfterPay\Business\Api\Adapter\AdapterInterface
279
     */
280
    public function createApiAdapter(): AdapterInterface
281
    {
282
        return new AfterPayApiAdapter($this->createAdapterFactory());
283
    }
284
285
    /**
286
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\PaymentAuthorizeWriterInterface
287
     */
288
    public function createPaymentAuthorizeWriter(): PaymentAuthorizeWriterInterface
289
    {
290
        return new PaymentAuthorizeWriter($this->getQueryContainer());
291
    }
292
293
    /**
294
     * @return \SprykerEco\Zed\AfterPay\Business\Api\Adapter\AdapterFactoryInterface
295
     */
296
    public function createAdapterFactory(): AdapterFactoryInterface
297
    {
298
        return new AdapterFactory();
299
    }
300
301
    /**
302
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface
303
     */
304
    public function getAuthorizeRequestBuilder(): AuthorizeRequestBuilderInterface
305
    {
306
        return $this->createAuthorizeRequestBuilder();
307
    }
308
309
    /**
310
     * @throws \SprykerEco\Zed\AfterPay\Business\Exception\InvalidAfterPayAuthorizeRequestBuilderException
311
     *
312
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface
313
     */
314
    public function createAuthorizeRequestBuilder(): AuthorizeRequestBuilderInterface
315
    {
316
        $authorizeWorkflow = $this->getConfig()->getAfterPayAuthorizeWorkflow();
317
        $authorizeRequestBuilderStack = $this->getAuthorizeRequestBuilderStack();
318
319
        if (!isset($authorizeRequestBuilderStack[$authorizeWorkflow])) {
320
            throw new InvalidAfterPayAuthorizeRequestBuilderException($authorizeWorkflow . " is not a valid AfterPay authorize request builder.");
321
        }
322
323
        return $authorizeRequestBuilderStack[$authorizeWorkflow];
324
    }
325
326
    /**
327
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface[]
328
     */
329
    public function getAuthorizeRequestBuilderStack(): array
330
    {
331
        return [
332
            AfterPayConfig::AFTERPAY_AUTHORIZE_WORKFLOW_ONE_STEP => $this->createOneStepAuthorizeRequestBuilder(),
333
            AfterPayConfig::AFTERPAY_AUTHORIZE_WORKFLOW_TWO_STEPS => $this->createTwoStepsAuthorizeRequestBuilder(),
334
        ];
335
    }
336
337
    /**
338
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Cancel\CancelRequestBuilderInterface
339
     */
340
    public function createCancelRequestBuilder(): CancelRequestBuilderInterface
341
    {
342
        return new CancelRequestBuilder(
343
            $this->createOrderToRequestMapper(),
344
            $this->getMoneyFacade()
345
        );
346
    }
347
348
    /**
349
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Refund\RefundRequestBuilderInterface
350
     */
351
    public function createRefundRequestBuilder(): RefundRequestBuilderInterface
352
    {
353
        return new RefundRequestBuilder(
354
            $this->createOrderToRequestMapper(),
355
            $this->getMoneyFacade()
356
        );
357
    }
358
359
    /**
360
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface
361
     */
362
    public function createOneStepAuthorizeRequestBuilder(): AuthorizeRequestBuilderInterface
363
    {
364
        return new OneStepAuthorizeRequestBuilder($this->createOrderToRequestMapper());
365
    }
366
367
    /**
368
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransferInterface
369
     */
370
    public function createOrderToRequestMapper(): OrderToRequestTransferInterface
371
    {
372
        return new OrderToRequestTransfer(
373
            $this->getMoneyFacade(),
374
            $this->getStoreFacade(),
375
            $this->createPriceToPayProvider()
376
        );
377
    }
378
379
    /**
380
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface
381
     */
382
    public function createTwoStepsAuthorizeRequestBuilder(): AuthorizeRequestBuilderInterface
383
    {
384
        return new TwoStepsAuthorizeRequestBuilder($this->createOrderToRequestMapper());
385
    }
386
387
    /**
388
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\TransactionLogReaderInterface
389
     */
390
    public function createTransactionLogReader(): TransactionLogReaderInterface
391
    {
392
        return new TransactionLogReader($this->getQueryContainer());
393
    }
394
395
    /**
396
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface
397
     */
398
    public function createPriceToPayProvider(): PriceToPayProviderInterface
399
    {
400
        return new PriceToPayProvider($this->getPaymentFacade());
401
    }
402
403
    /**
404
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Mapper\QuoteToRequestTransferInterface
405
     */
406
    public function createQuoteToRequestMapper(): QuoteToRequestTransferInterface
407
    {
408
        return new QuoteToRequestTransfer(
409
            $this->getMoneyFacade(),
410
            $this->getStoreFacade()
411
        );
412
    }
413
414
    /**
415
     * @throws \SprykerEco\Zed\AfterPay\Business\Exception\InvalidAfterPayPaymentMethodsFilterException
416
     *
417
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface
418
     */
419
    public function createPaymentMethodsFilter(): AfterPayPaymentMethodsFilterInterface
420
    {
421
        $authorizeWorkflow = $this->getConfig()->getAfterPayAuthorizeWorkflow();
422
        $paymentMethodsFilterStack = $this->getPaymentMethodsFilterStack();
423
424
        if (!isset($paymentMethodsFilterStack[$authorizeWorkflow])) {
425
            throw new InvalidAfterPayPaymentMethodsFilterException($authorizeWorkflow . " is not a valid AfterPay payment methods filter.");
426
        }
427
428
        return $paymentMethodsFilterStack[$authorizeWorkflow];
429
    }
430
431
    /**
432
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface[]
433
     */
434
    public function getPaymentMethodsFilterStack(): array
435
    {
436
        return [
437
            AfterPayConfig::AFTERPAY_AUTHORIZE_WORKFLOW_ONE_STEP => $this->createOneStepAuthorizePaymentMethodsFilter(),
438
            AfterPayConfig::AFTERPAY_AUTHORIZE_WORKFLOW_TWO_STEPS => $this->createTwoStepAuthorizePaymentMethodsFilter(),
439
        ];
440
    }
441
442
    /**
443
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface
444
     */
445
    public function createOneStepAuthorizePaymentMethodsFilter(): AfterPayPaymentMethodsFilterInterface
446
    {
447
        return new OneStepAuthorizePaymentMethodsFilter();
448
    }
449
450
    /**
451
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface
452
     */
453
    public function createTwoStepAuthorizePaymentMethodsFilter(): AfterPayPaymentMethodsFilterInterface
454
    {
455
        return new TwoStepAuthorizePaymentMethodsFilter();
456
    }
457
458
    /**
459
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\Provider\AfterPayPaymentMethodsProviderInterface
460
     */
461
    public function createPaymentMethodsProvider(): AfterPayPaymentMethodsProviderInterface
462
    {
463
        return new AfterPayPaymentMethodsProvider(
464
            $this->createApiAdapter(),
465
            $this->createQuoteToRequestMapper()
466
        );
467
    }
468
469
    /**
470
     * @return \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface
471
     */
472
    public function getMoneyFacade(): AfterPayToMoneyFacadeInterface
473
    {
474
        return $this->getProvidedDependency(AfterPayDependencyProvider::FACADE_MONEY);
475
    }
476
477
    /**
478
     * @return \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToCustomerFacadeInterface
479
     */
480
    public function getAfterPayToCustomerBridge(): AfterPayToCustomerFacadeInterface
481
    {
482
        return $this->getProvidedDependency(AfterPayDependencyProvider::FACADE_CUSTOMER);
483
    }
484
485
    /**
486
     * @return \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToStoreFacadeInterface
487
     */
488
    public function getStoreFacade(): AfterPayToStoreFacadeInterface
489
    {
490
        return $this->getProvidedDependency(AfterPayDependencyProvider::FACADE_STORE);
491
    }
492
493
    /**
494
     * @return \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToPaymentFacadeInterface
495
     */
496
    public function getPaymentFacade(): AfterPayToPaymentFacadeInterface
497
    {
498
        return $this->getProvidedDependency(AfterPayDependencyProvider::FACADE_PAYMENT);
499
    }
500
501
    /**
502
     * @return \SprykerEco\Zed\AfterPay\Dependency\Service\AfterPayToUtilEncodingServiceInterface
503
     */
504
    public function getUtilEncodingService(): AfterPayToUtilEncodingServiceInterface
505
    {
506
        return $this->getProvidedDependency(AfterPayDependencyProvider::SERVICE_UTIL_ENCODING);
507
    }
508
}
509