-
Notifications
You must be signed in to change notification settings - Fork 1
/
LegacyDataProvider.php
54 lines (47 loc) · 1.8 KB
/
LegacyDataProvider.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
<?php
declare( strict_types=1 );
namespace WMDE\Fundraising\PaymentContext\Services;
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\Iban;
use WMDE\Fundraising\PaymentContext\Domain\Model\LegacyPaymentData;
use WMDE\Fundraising\PaymentContext\Domain\PaymentRepository;
class LegacyDataProvider {
public function __construct(
private PaymentRepository $repository,
private BankDataGenerator $bankDataGenerator
) {
}
public function getDataForPayment( 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,
[
'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
]
);
}
}