-
Notifications
You must be signed in to change notification settings - Fork 1
/
GetPaymentUseCase.php
111 lines (97 loc) · 3.36 KB
/
GetPaymentUseCase.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
declare( strict_types = 1 );
namespace WMDE\Fundraising\PaymentContext\UseCases\GetPayment;
use WMDE\Fundraising\PaymentContext\DataAccess\PaymentNotFoundException;
use WMDE\Fundraising\PaymentContext\Domain\BankDataGenerator;
use WMDE\Fundraising\PaymentContext\Domain\Model\DirectDebitPayment;
use WMDE\Fundraising\PaymentContext\Domain\Model\ExtendedBankData;
use WMDE\Fundraising\PaymentContext\Domain\Model\Iban;
use WMDE\Fundraising\PaymentContext\Domain\Model\LegacyPaymentData;
use WMDE\Fundraising\PaymentContext\Domain\Model\Payment;
use WMDE\Fundraising\PaymentContext\Domain\PaymentRepository;
class GetPaymentUseCase {
public function __construct(
private PaymentRepository $repository,
private BankDataGenerator $bankDataGenerator
) {
}
/**
* @param int $paymentId (not a donation ID!)
*
* @return array<string, mixed>
*
*/
public function getPaymentDataArray( int $paymentId ): array {
try {
$payment = $this->repository->getPaymentById( $paymentId );
} catch ( PaymentNotFoundException ) {
throw new \DomainException( sprintf(
'Payment was not found. This is a domain error, where did you get the payment ID "%d" from?',
$paymentId
) );
}
$resultArray = $payment->getDisplayValues();
if ( $payment instanceof DirectDebitPayment && $payment->getIban() !== null ) {
$resultArray = $this->createExtendedPaymentFieldArray( $payment, $payment->getIban() );
}
return $resultArray;
}
/**
* @param int $paymentId (not a donation ID!)
*
* @return LegacyPaymentData
*/
public function getLegacyPaymentDataObject( int $paymentId ): LegacyPaymentData {
try {
$payment = $this->repository->getPaymentById( $paymentId );
} catch ( PaymentNotFoundException ) {
throw new \DomainException( sprintf(
'Payment was not found. This is a domain error, where did you get the payment ID "%d" from?',
$paymentId
) );
}
$legacyData = $payment->getLegacyData();
if ( $payment instanceof DirectDebitPayment && $payment->getIban() !== null ) {
$legacyData = $this->createExtendedLegacyData( $legacyData, $payment->getIban() );
}
return $legacyData;
}
private function createExtendedLegacyData( LegacyPaymentData $legacyData, Iban $iban ): LegacyPaymentData {
$extendedBankData = $this->bankDataGenerator->getBankDataFromIban( $iban );
return new LegacyPaymentData(
$legacyData->amountInEuroCents,
$legacyData->intervalInMonths,
$legacyData->paymentName,
$this->getLegacyBankdataFieldsArray( $extendedBankData ),
$legacyData->paymentStatus
);
}
/**
* @param Payment $payment
* @param Iban $iban
*
* @return array<string,mixed>
*/
private function createExtendedPaymentFieldArray( Payment $payment, Iban $iban ): array {
$extendedBankData = $this->bankDataGenerator->getBankDataFromIban( $iban );
return array_merge(
$payment->getDisplayValues(),
$this->getLegacyBankdataFieldsArray( $extendedBankData )
);
}
/**
* @param ExtendedBankData $extendedBankData
*
* @return array<string,string>
*/
private function getLegacyBankdataFieldsArray( ExtendedBankData $extendedBankData ): array {
return [
'iban' => $extendedBankData->iban->toString(),
'bic' => $extendedBankData->bic,
// "Legacy" also means German field names in this case
'konto' => $extendedBankData->account,
'blz' => $extendedBankData->bankCode,
'bankname' => $extendedBankData->bankName
];
}
}