AfterPayBusinessFactory   B
last analyzed

Complexity

Total Complexity 45

Size/Duplication

Total Lines 436
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 106
c 0
b 0
f 0
dl 0
loc 436
rs 8.8
wmc 45

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