Passed
Push — feature/eco-574/eco-2266-check... ( 7e1004...8cf5ab )
by Aleksey
04:15
created

createPaymentMethodsProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

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