Passed
Push — feature/eco-574/eco-2339-imple... ( 2e6b80 )
by Ruslan
08:26
created

AfterPayBusinessFactory   B

Complexity

Total Complexity 44

Size/Duplication

Total Lines 400
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 101
dl 0
loc 400
rs 8.8798
c 0
b 0
f 0
wmc 44

40 Methods

Rating   Name   Duplication   Size   Complexity  
A createRefundTransactionHandler() 0 8 1
A createPaymentReader() 0 3 1
A createCaptureTransaction() 0 5 1
A createTwoStepAuthorizePaymentMethodsFilter() 0 3 1
A getUtilEncodingService() 0 3 1
A createCaptureTransactionHandler() 0 7 1
A createTransactionLogger() 0 3 1
A createPostSaveHook() 0 5 1
A createPaymentMethodsProvider() 0 5 1
A createLookupCustomerHandler() 0 3 1
A createValidateCustomerHandler() 0 5 1
A createValidateBankAccountHandler() 0 3 1
A createQuoteToRequestMapper() 0 5 1
A createCancelTransactionHandler() 0 8 1
A createAuthorizeTransactionHandler() 0 7 1
A createPriceToPayProvider() 0 3 1
A getAfterPayToCustomerBridge() 0 3 1
A createAuthorizeTransaction() 0 6 1
A createApiAdapter() 0 3 1
A createTransactionLogReader() 0 3 1
A createOrderToRequestMapper() 0 6 1
A createRefundTransaction() 0 5 1
A getStoreFacade() 0 3 1
A createCancelTransaction() 0 5 1
A createRefundRequestBuilder() 0 5 1
A createCaptureRequestBuilder() 0 5 1
A createAuthorizeValidator() 0 5 1
A createLookupInstallmentPlansHandler() 0 3 1
A createPaymentAuthorizeWriter() 0 3 1
A createAdapterFactory() 0 3 1
A createPaymentMethodsFilter() 0 11 3
A getAuthorizeRequestBuilder() 0 11 3
A getPaymentFacade() 0 3 1
A createOrderSaver() 0 3 1
A createOneStepAuthorizeRequestBuilder() 0 3 1
A createPaymentWriter() 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\Hook\PostSaveHook;
26
use SprykerEco\Zed\AfterPay\Business\Hook\PostSaveHookInterface;
27
use SprykerEco\Zed\AfterPay\Business\Order\Saver;
28
use SprykerEco\Zed\AfterPay\Business\Order\SaverInterface;
29
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface;
30
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\OneStepAuthorizePaymentMethodsFilter;
31
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\Provider\AfterPayPaymentMethodsProvider;
32
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\Provider\AfterPayPaymentMethodsProviderInterface;
33
use SprykerEco\Zed\AfterPay\Business\Payment\Filter\TwoStepAuthorizePaymentMethodsFilter;
34
use SprykerEco\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransfer;
35
use SprykerEco\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransferInterface;
36
use SprykerEco\Zed\AfterPay\Business\Payment\Mapper\QuoteToRequestTransfer;
37
use SprykerEco\Zed\AfterPay\Business\Payment\Mapper\QuoteToRequestTransferInterface;
38
use SprykerEco\Zed\AfterPay\Business\Payment\PaymentReader;
39
use SprykerEco\Zed\AfterPay\Business\Payment\PaymentReaderInterface;
40
use SprykerEco\Zed\AfterPay\Business\Payment\PaymentWriter;
41
use SprykerEco\Zed\AfterPay\Business\Payment\PaymentWriterInterface;
42
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\PaymentAuthorizeWriter;
43
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\PaymentAuthorizeWriterInterface;
44
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface;
45
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\OneStepAuthorizeRequestBuilder;
46
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\TwoStepsAuthorizeRequestBuilder;
47
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\AuthorizeTransaction;
48
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\AuthorizeTransactionInterface;
49
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Cancel\CancelRequestBuilder;
50
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Cancel\CancelRequestBuilderInterface;
51
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CancelTransaction;
52
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CancelTransactionInterface;
53
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Capture\CaptureRequestBuilder;
54
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Capture\CaptureRequestBuilderInterface;
55
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CaptureTransaction;
56
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\CaptureTransactionInterface;
57
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\AuthorizeTransactionHandler;
58
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\AuthorizeTransactionHandlerInterface;
59
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CancelTransactionHandler;
60
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CancelTransactionHandlerInterface;
61
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CaptureTransactionHandler;
62
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\CaptureTransactionHandlerInterface;
63
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\RefundTransactionHandler;
64
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Handler\RefundTransactionHandlerInterface;
65
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Logger\TransactionLogger;
66
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Logger\TransactionLoggerInterface;
67
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProvider;
68
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface;
69
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Refund\RefundRequestBuilder;
70
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Refund\RefundRequestBuilderInterface;
71
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\RefundTransaction;
72
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\RefundTransactionInterface;
73
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\TransactionLogReader;
74
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\TransactionLogReaderInterface;
75
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Validator\AuthorizeValidator;
0 ignored issues
show
Bug introduced by
The type SprykerEco\Zed\AfterPay\...ator\AuthorizeValidator 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...
76
use SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Validator\AuthorizeValidatorInterface;
0 ignored issues
show
Bug introduced by
The type SprykerEco\Zed\AfterPay\...orizeValidatorInterface 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...
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
        $authorizeWorkflow = $this->getConfig()->getAfterPayAuthorizeWorkflow();
307
308
        switch ($authorizeWorkflow) {
309
            case AfterPayConfig::AFTERPAY_AUTHORIZE_WORKFLOW_ONE_STEP:
310
                return $this->createOneStepAuthorizeRequestBuilder();
311
            case AfterPayConfig::AFTERPAY_AUTHORIZE_WORKFLOW_TWO_STEPS:
312
                return $this->createTwoStepsAuthorizeRequestBuilder();
313
            default:
314
                return $this->createOneStepAuthorizeRequestBuilder();
315
        }
316
    }
317
318
    /**
319
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Cancel\CancelRequestBuilderInterface
320
     */
321
    public function createCancelRequestBuilder(): CancelRequestBuilderInterface
322
    {
323
        return new CancelRequestBuilder(
324
            $this->createOrderToRequestMapper(),
325
            $this->getMoneyFacade()
326
        );
327
    }
328
329
    /**
330
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Refund\RefundRequestBuilderInterface
331
     */
332
    public function createRefundRequestBuilder(): RefundRequestBuilderInterface
333
    {
334
        return new RefundRequestBuilder(
335
            $this->createOrderToRequestMapper(),
336
            $this->getMoneyFacade()
337
        );
338
    }
339
340
    /**
341
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface
342
     */
343
    public function createOneStepAuthorizeRequestBuilder(): AuthorizeRequestBuilderInterface
344
    {
345
        return new OneStepAuthorizeRequestBuilder($this->createOrderToRequestMapper());
346
    }
347
348
    /**
349
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Mapper\OrderToRequestTransferInterface
350
     */
351
    public function createOrderToRequestMapper(): OrderToRequestTransferInterface
352
    {
353
        return new OrderToRequestTransfer(
354
            $this->getMoneyFacade(),
355
            $this->getStoreFacade(),
356
            $this->createPriceToPayProvider()
357
        );
358
    }
359
360
    /**
361
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Authorize\RequestBuilder\AuthorizeRequestBuilderInterface
362
     */
363
    public function createTwoStepsAuthorizeRequestBuilder(): AuthorizeRequestBuilderInterface
364
    {
365
        return new TwoStepsAuthorizeRequestBuilder($this->createOrderToRequestMapper());
366
    }
367
368
    /**
369
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\TransactionLogReaderInterface
370
     */
371
    public function createTransactionLogReader(): TransactionLogReaderInterface
372
    {
373
        return new TransactionLogReader($this->getQueryContainer());
374
    }
375
376
    /**
377
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\PriceToPayProviderInterface
378
     */
379
    public function createPriceToPayProvider(): PriceToPayProviderInterface
380
    {
381
        return new PriceToPayProvider($this->getPaymentFacade());
382
    }
383
384
    /**
385
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Mapper\QuoteToRequestTransferInterface
386
     */
387
    public function createQuoteToRequestMapper(): QuoteToRequestTransferInterface
388
    {
389
        return new QuoteToRequestTransfer(
390
            $this->getMoneyFacade(),
391
            $this->getStoreFacade()
392
        );
393
    }
394
395
    /**
396
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface
397
     */
398
    public function createPaymentMethodsFilter(): AfterPayPaymentMethodsFilterInterface
399
    {
400
        $authorizeWorkflow = $this->getConfig()->getAfterPayAuthorizeWorkflow();
401
402
        switch ($authorizeWorkflow) {
403
            case AfterPayConfig::AFTERPAY_AUTHORIZE_WORKFLOW_ONE_STEP:
404
                return $this->createOneStepAuthorizePaymentMethodsFilter();
405
            case AfterPayConfig::AFTERPAY_AUTHORIZE_WORKFLOW_TWO_STEPS:
406
                return $this->createTwoStepAuthorizePaymentMethodsFilter();
407
            default:
408
                return $this->createOneStepAuthorizePaymentMethodsFilter();
409
        }
410
    }
411
412
    /**
413
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface
414
     */
415
    public function createOneStepAuthorizePaymentMethodsFilter(): AfterPayPaymentMethodsFilterInterface
416
    {
417
        return new OneStepAuthorizePaymentMethodsFilter();
418
    }
419
420
    /**
421
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\AfterPayPaymentMethodsFilterInterface
422
     */
423
    public function createTwoStepAuthorizePaymentMethodsFilter(): AfterPayPaymentMethodsFilterInterface
424
    {
425
        return new TwoStepAuthorizePaymentMethodsFilter();
426
    }
427
428
    /**
429
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Filter\Provider\AfterPayPaymentMethodsProviderInterface
430
     */
431
    public function createPaymentMethodsProvider(): AfterPayPaymentMethodsProviderInterface
432
    {
433
        return new AfterPayPaymentMethodsProvider(
434
            $this->createApiAdapter(),
435
            $this->createQuoteToRequestMapper()
436
        );
437
    }
438
439
    /**
440
     * @return \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToMoneyFacadeInterface
441
     */
442
    public function getMoneyFacade(): AfterPayToMoneyFacadeInterface
443
    {
444
        return $this->getProvidedDependency(AfterPayDependencyProvider::FACADE_MONEY);
445
    }
446
447
    /**
448
     * @return \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToCustomerFacadeInterface
449
     */
450
    public function getAfterPayToCustomerBridge(): AfterPayToCustomerFacadeInterface
451
    {
452
        return $this->getProvidedDependency(AfterPayDependencyProvider::FACADE_CUSTOMER);
453
    }
454
455
    /**
456
     * @return \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToStoreFacadeInterface
457
     */
458
    public function getStoreFacade(): AfterPayToStoreFacadeInterface
459
    {
460
        return $this->getProvidedDependency(AfterPayDependencyProvider::FACADE_STORE);
461
    }
462
463
    /**
464
     * @return \SprykerEco\Zed\AfterPay\Dependency\Facade\AfterPayToPaymentFacadeInterface
465
     */
466
    public function getPaymentFacade(): AfterPayToPaymentFacadeInterface
467
    {
468
        return $this->getProvidedDependency(AfterPayDependencyProvider::FACADE_PAYMENT);
469
    }
470
471
    /**
472
     * @return \SprykerEco\Zed\AfterPay\Dependency\Service\AfterPayToUtilEncodingServiceInterface
473
     */
474
    public function getUtilEncodingService(): AfterPayToUtilEncodingServiceInterface
475
    {
476
        return $this->getProvidedDependency(AfterPayDependencyProvider::SERVICE_UTIL_ENCODING);
477
    }
478
479
    /**
480
     * @return \SprykerEco\Zed\AfterPay\Business\Payment\Transaction\Validator\AuthorizeValidatorInterface
481
     */
482
    public function createAuthorizeValidator(): AuthorizeValidatorInterface
483
    {
484
        return new AuthorizeValidator(
485
            $this->createPaymentMethodsProvider(),
486
            $this->getConfig()
487
        );
488
    }
489
}
490