+ quotation provider

This commit is contained in:
Stephan D
2025-12-11 01:13:13 +01:00
parent bdf766075e
commit a4481fb63d
102 changed files with 2242 additions and 246 deletions

View File

@@ -0,0 +1,20 @@
import 'package:pshared/data/dto/payment/asset.dart';
import 'package:pshared/data/mapper/payment/enums.dart';
import 'package:pshared/models/payment/asset.dart';
extension PaymentAssetMapper on PaymentAsset {
AssetDTO toDTO() => AssetDTO(
chain: chainNetworkToValue(chain),
tokenSymbol: tokenSymbol,
contractAddress: contractAddress,
);
}
extension AssetDTOMapper on AssetDTO {
PaymentAsset toDomain() => PaymentAsset(
chain: chainNetworkFromValue(chain),
tokenSymbol: tokenSymbol,
contractAddress: contractAddress,
);
}

View File

@@ -3,17 +3,23 @@ import 'package:pshared/models/payment/methods/card.dart';
extension CardPaymentMethodMapper on CardPaymentMethod {
CardPaymentDataDTO toDTO() => CardPaymentDataDTO(
CardEndpointDTO toDTO() => CardEndpointDTO(
pan: pan,
firstName: firstName,
lastName: lastName,
expMonth: expMonth,
expYear: expYear,
country: country,
);
}
extension CardPaymentDataDTOMapper on CardPaymentDataDTO {
extension CardPaymentDataDTOMapper on CardEndpointDTO {
CardPaymentMethod toDomain() => CardPaymentMethod(
pan: pan,
firstName: firstName,
lastName: lastName,
expMonth: expMonth,
expYear: expYear,
country: country,
);
}

View File

@@ -0,0 +1,17 @@
import 'package:pshared/data/dto/payment/card_token.dart';
import 'package:pshared/models/payment/methods/card_token.dart';
extension CardTokenPaymentMethodMapper on CardTokenPaymentMethod {
CardTokenEndpointDTO toDTO() => CardTokenEndpointDTO(
token: token,
maskedPan: maskedPan,
);
}
extension CardTokenPaymentDataDTOMapper on CardTokenEndpointDTO {
CardTokenPaymentMethod toDomain() => CardTokenPaymentMethod(
token: token,
maskedPan: maskedPan,
);
}

View File

@@ -1,19 +1,20 @@
import 'package:pshared/data/dto/payment/crypto_address.dart';
import 'package:pshared/data/dto/payment/external_chain.dart';
import 'package:pshared/data/mapper/payment/asset.dart';
import 'package:pshared/models/payment/methods/crypto_address.dart';
extension CryptoAddressPaymentMethodMapper on CryptoAddressPaymentMethod {
CryptoAddressPaymentDataDTO toDTO() => CryptoAddressPaymentDataDTO(
ExternalChainEndpointDTO toDTO() => ExternalChainEndpointDTO(
address: address,
network: network,
destinationTag: destinationTag,
asset: asset?.toDTO(),
memo: memo,
);
}
extension CryptoAddressPaymentDataDTOMapper on CryptoAddressPaymentDataDTO {
extension CryptoAddressPaymentDataDTOMapper on ExternalChainEndpointDTO {
CryptoAddressPaymentMethod toDomain() => CryptoAddressPaymentMethod(
address: address,
network: network,
destinationTag: destinationTag,
asset: asset?.toDomain(),
memo: memo,
);
}

View File

@@ -0,0 +1,16 @@
import 'package:pshared/data/dto/payment/currency_pair.dart';
import 'package:pshared/models/payment/currency_pair.dart';
extension CurrencyPairMapper on CurrencyPair {
CurrencyPairDTO toDTO() => CurrencyPairDTO(
base: base,
quote: quote,
);
}
extension CurrencyPairDTOMapper on CurrencyPairDTO {
CurrencyPair toDomain() => CurrencyPair(
base: base,
quote: quote,
);
}

View File

@@ -0,0 +1,183 @@
import 'package:pshared/models/payment/chain_network.dart';
import 'package:pshared/models/payment/fx/side.dart';
import 'package:pshared/models/payment/insufficient_net_policy.dart';
import 'package:pshared/models/payment/kind.dart';
import 'package:pshared/models/payment/type.dart';
import 'package:pshared/models/payment/settlement_mode.dart';
PaymentKind paymentKindFromValue(String? value) {
switch (value) {
case 'payout':
return PaymentKind.payout;
case 'internal_transfer':
return PaymentKind.internalTransfer;
case 'fx_conversion':
return PaymentKind.fxConversion;
case 'unspecified':
return PaymentKind.unspecified;
default:
throw ArgumentError('Unknown PaymentKind value: $value');
}
}
String paymentKindToValue(PaymentKind kind) {
switch (kind) {
case PaymentKind.payout:
return 'payout';
case PaymentKind.internalTransfer:
return 'internal_transfer';
case PaymentKind.fxConversion:
return 'fx_conversion';
case PaymentKind.unspecified:
return 'unspecified';
}
}
SettlementMode settlementModeFromValue(String? value) {
switch (value) {
case 'fix_source':
return SettlementMode.fixSource;
case 'fix_received':
return SettlementMode.fixReceived;
case 'unspecified':
return SettlementMode.unspecified;
default:
throw ArgumentError('Unknown SettlementMode value: $value');
}
}
String settlementModeToValue(SettlementMode mode) {
switch (mode) {
case SettlementMode.fixSource:
return 'fix_source';
case SettlementMode.fixReceived:
return 'fix_received';
case SettlementMode.unspecified:
return 'unspecified';
}
}
FxSide fxSideFromValue(String? value) {
switch (value) {
case 'buy_base_sell_quote':
return FxSide.buyBaseSellQuote;
case 'sell_base_buy_quote':
return FxSide.sellBaseBuyQuote;
case 'unspecified':
return FxSide.unspecified;
default:
throw ArgumentError('Unknown FxSide value: $value');
}
}
String fxSideToValue(FxSide side) {
switch (side) {
case FxSide.buyBaseSellQuote:
return 'buy_base_sell_quote';
case FxSide.sellBaseBuyQuote:
return 'sell_base_buy_quote';
case FxSide.unspecified:
return 'unspecified';
}
}
ChainNetwork chainNetworkFromValue(String? value) {
switch (value) {
case 'ethereum_mainnet':
return ChainNetwork.ethereumMainnet;
case 'arbitrum_one':
return ChainNetwork.arbitrumOne;
case 'other_evm':
return ChainNetwork.otherEvm;
case 'unspecified':
return ChainNetwork.unspecified;
default:
throw ArgumentError('Unknown ChainNetwork value: $value');
}
}
String chainNetworkToValue(ChainNetwork chain) {
switch (chain) {
case ChainNetwork.ethereumMainnet:
return 'ethereum_mainnet';
case ChainNetwork.arbitrumOne:
return 'arbitrum_one';
case ChainNetwork.otherEvm:
return 'other_evm';
case ChainNetwork.unspecified:
return 'unspecified';
}
}
InsufficientNetPolicy insufficientNetPolicyFromValue(String? value) {
switch (value) {
case 'block_posting':
return InsufficientNetPolicy.blockPosting;
case 'sweep_org_cash':
return InsufficientNetPolicy.sweepOrgCash;
case 'invoice_later':
return InsufficientNetPolicy.invoiceLater;
case 'unspecified':
return InsufficientNetPolicy.unspecified;
default:
throw ArgumentError('Unknown InsufficientNetPolicy value: $value');
}
}
String insufficientNetPolicyToValue(InsufficientNetPolicy policy) {
switch (policy) {
case InsufficientNetPolicy.blockPosting:
return 'block_posting';
case InsufficientNetPolicy.sweepOrgCash:
return 'sweep_org_cash';
case InsufficientNetPolicy.invoiceLater:
return 'invoice_later';
case InsufficientNetPolicy.unspecified:
return 'unspecified';
}
}
PaymentType endpointTypeFromValue(String? value) {
switch (value) {
case 'managedWallet':
return PaymentType.managedWallet;
case 'externalChain':
return PaymentType.externalChain;
case 'card':
return PaymentType.card;
case 'cardToken':
return PaymentType.cardToken;
case 'ledger':
return PaymentType.ledger;
case 'bankAccount':
return PaymentType.bankAccount;
case 'iban':
return PaymentType.iban;
case 'wallet':
return PaymentType.wallet;
default:
throw ArgumentError('Unknown PaymentType value: $value');
}
}
String endpointTypeToValue(PaymentType type) {
switch (type) {
case PaymentType.ledger:
return 'ledger';
case PaymentType.managedWallet:
return 'managedWallet';
case PaymentType.externalChain:
return 'externalChain';
case PaymentType.card:
return 'card';
case PaymentType.cardToken:
return 'cardToken';
case PaymentType.bankAccount:
return 'bankAccount';
case PaymentType.iban:
return 'iban';
case PaymentType.wallet:
return 'wallet';
}
}

View File

@@ -0,0 +1,24 @@
import 'package:pshared/data/dto/payment/fee_line.dart';
import 'package:pshared/data/mapper/payment/money.dart';
import 'package:pshared/models/payment/fees/line.dart';
extension FeeLineDTOMapper on FeeLineDTO {
FeeLine toDomain() => FeeLine(
ledgerAccountRef: ledgerAccountRef,
amount: amount?.toDomain(),
lineType: lineType,
side: side,
meta: meta,
);
}
extension FeeLineMapper on FeeLine {
FeeLineDTO toDTO() => FeeLineDTO(
ledgerAccountRef: ledgerAccountRef,
amount: amount?.toDTO(),
lineType: lineType,
side: side,
meta: meta,
);
}

View File

@@ -0,0 +1,36 @@
import 'package:pshared/data/dto/payment/fx_quote.dart';
import 'package:pshared/data/mapper/payment/money.dart';
import 'package:pshared/models/payment/fx/quote.dart';
extension FxQuoteDTOMapper on FxQuoteDTO {
FxQuote toDomain() => FxQuote(
quoteRef: quoteRef,
baseCurrency: baseCurrency,
quoteCurrency: quoteCurrency,
side: side,
price: price,
baseAmount: baseAmount?.toDomain(),
quoteAmount: quoteAmount?.toDomain(),
expiresAtUnixMs: expiresAtUnixMs,
provider: provider,
rateRef: rateRef,
firm: firm ?? false,
);
}
extension FxQuoteMapper on FxQuote {
FxQuoteDTO toDTO() => FxQuoteDTO(
quoteRef: quoteRef,
baseCurrency: baseCurrency,
quoteCurrency: quoteCurrency,
side: side,
price: price,
baseAmount: baseAmount?.toDTO(),
quoteAmount: quoteAmount?.toDTO(),
expiresAtUnixMs: expiresAtUnixMs,
provider: provider,
rateRef: rateRef,
firm: firm,
);
}

View File

@@ -0,0 +1,27 @@
import 'package:pshared/data/dto/payment/intent/fx.dart';
import 'package:pshared/data/mapper/payment/currency_pair.dart';
import 'package:pshared/data/mapper/payment/enums.dart';
import 'package:pshared/models/payment/fx/intent.dart';
extension FxIntentMapper on FxIntent {
FxIntentDTO toDTO() => FxIntentDTO(
pair: pair?.toDTO(),
side: fxSideToValue(side),
firm: firm,
ttlMs: ttlMs,
preferredProvider: preferredProvider,
maxAgeMs: maxAgeMs,
);
}
extension FxIntentDTOMapper on FxIntentDTO {
FxIntent toDomain() => FxIntent(
pair: pair?.toDomain(),
side: fxSideFromValue(side),
firm: firm,
ttlMs: ttlMs,
preferredProvider: preferredProvider,
maxAgeMs: maxAgeMs,
);
}

View File

@@ -0,0 +1,30 @@
import 'package:pshared/data/dto/payment/intent/payment.dart';
import 'package:pshared/data/mapper/payment/payment.dart';
import 'package:pshared/data/mapper/payment/enums.dart';
import 'package:pshared/data/mapper/payment/intent/fx.dart';
import 'package:pshared/data/mapper/payment/money.dart';
import 'package:pshared/models/payment/intent.dart';
extension PaymentIntentMapper on PaymentIntent {
PaymentIntentDTO toDTO() => PaymentIntentDTO(
kind: paymentKindToValue(kind),
source: source?.toDTO(),
destination: destination?.toDTO(),
amount: amount?.toDTO(),
fx: fx?.toDTO(),
settlementMode: settlementModeToValue(settlementMode),
attributes: attributes,
);
}
extension PaymentIntentDTOMapper on PaymentIntentDTO {
PaymentIntent toDomain() => PaymentIntent(
kind: paymentKindFromValue(kind),
source: source?.toDomain(),
destination: destination?.toDomain(),
amount: amount?.toDomain(),
fx: fx?.toDomain(),
settlementMode: settlementModeFromValue(settlementMode),
attributes: attributes,
);
}

View File

@@ -0,0 +1,17 @@
import 'package:pshared/data/dto/payment/ledger.dart';
import 'package:pshared/models/payment/methods/ledger.dart';
extension LedgerPaymentMethodMapper on LedgerPaymentMethod {
LedgerEndpointDTO toDTO() => LedgerEndpointDTO(
ledgerAccountRef: ledgerAccountRef,
contraLedgerAccountRef: contraLedgerAccountRef,
);
}
extension LedgerPaymentDataDTOMapper on LedgerEndpointDTO {
LedgerPaymentMethod toDomain() => LedgerPaymentMethod(
ledgerAccountRef: ledgerAccountRef,
contraLedgerAccountRef: contraLedgerAccountRef,
);
}

View File

@@ -0,0 +1,18 @@
import 'package:pshared/data/dto/payment/managed_wallet.dart';
import 'package:pshared/data/mapper/payment/asset.dart';
import 'package:pshared/models/payment/methods/managed_wallet.dart';
extension ManagedWalletPaymentMethodMapper on ManagedWalletPaymentMethod {
ManagedWalletEndpointDTO toDTO() => ManagedWalletEndpointDTO(
managedWalletRef: managedWalletRef,
asset: asset?.toDTO(),
);
}
extension ManagedWalletDataDTOMapper on ManagedWalletEndpointDTO {
ManagedWalletPaymentMethod toDomain() => ManagedWalletPaymentMethod(
managedWalletRef: managedWalletRef,
asset: asset?.toDomain(),
);
}

View File

@@ -1,21 +1,30 @@
import 'package:pshared/data/dto/payment/card.dart';
import 'package:pshared/data/dto/payment/crypto_address.dart';
import 'package:pshared/data/dto/payment/card_token.dart';
import 'package:pshared/data/dto/payment/external_chain.dart';
import 'package:pshared/data/dto/payment/iban.dart';
import 'package:pshared/data/dto/payment/ledger.dart';
import 'package:pshared/data/dto/payment/managed_wallet.dart';
import 'package:pshared/data/dto/payment/method.dart';
import 'package:pshared/data/dto/payment/russian_bank.dart';
import 'package:pshared/data/dto/payment/wallet.dart';
import 'package:pshared/data/mapper/payment/card_token.dart';
import 'package:pshared/data/mapper/payment/crypto_address.dart';
import 'package:pshared/data/mapper/payment/card.dart';
import 'package:pshared/data/mapper/payment/iban.dart';
import 'package:pshared/data/mapper/payment/ledger.dart';
import 'package:pshared/data/mapper/payment/managed_wallet.dart';
import 'package:pshared/data/mapper/payment/russian_bank.dart';
import 'package:pshared/data/mapper/payment/type.dart';
import 'package:pshared/data/mapper/payment/wallet.dart';
import 'package:pshared/models/describable.dart';
import 'package:pshared/models/organization/bound.dart';
import 'package:pshared/models/payment/methods/card.dart';
import 'package:pshared/models/payment/methods/card_token.dart';
import 'package:pshared/models/payment/methods/crypto_address.dart';
import 'package:pshared/models/payment/methods/data.dart';
import 'package:pshared/models/payment/methods/iban.dart';
import 'package:pshared/models/payment/methods/ledger.dart';
import 'package:pshared/models/payment/methods/managed_wallet.dart';
import 'package:pshared/models/payment/methods/russian_bank.dart';
import 'package:pshared/models/payment/methods/type.dart';
import 'package:pshared/models/payment/methods/wallet.dart';
@@ -40,20 +49,17 @@ extension PaymentMethodMapper on PaymentMethod {
isMain: isMain,
);
Map<String, dynamic> _dataToJson(PaymentMethodData data) {
switch (data.type) {
case PaymentType.card:
return (data as CardPaymentMethod).toDTO().toJson();
case PaymentType.iban:
return (data as IbanPaymentMethod).toDTO().toJson();
case PaymentType.bankAccount:
return (data as RussianBankAccountPaymentMethod).toDTO().toJson();
case PaymentType.wallet:
return (data as WalletPaymentMethod).toDTO().toJson();
case PaymentType.cryptoAddress:
return (data as CryptoAddressPaymentMethod).toDTO().toJson();
}
}
Map<String, dynamic> _dataToJson(PaymentMethodData data) => switch (data) {
CardPaymentMethod card => card.toDTO().toJson(),
CardTokenPaymentMethod cardToken => cardToken.toDTO().toJson(),
IbanPaymentMethod iban => iban.toDTO().toJson(),
RussianBankAccountPaymentMethod bankAccount => bankAccount.toDTO().toJson(),
WalletPaymentMethod wallet => wallet.toDTO().toJson(),
CryptoAddressPaymentMethod crypto => crypto.toDTO().toJson(),
LedgerPaymentMethod ledger => ledger.toDTO().toJson(),
ManagedWalletPaymentMethod managedWallet => managedWallet.toDTO().toJson(),
_ => throw UnsupportedError('Unsupported payment method data: ${data.runtimeType}'),
};
}
extension PaymentMethodDTOMapper on PaymentMethodDTO {
@@ -73,15 +79,21 @@ extension PaymentMethodDTOMapper on PaymentMethodDTO {
PaymentMethodData _dataToDomain(PaymentType paymentType, Map<String, dynamic> payload) {
switch (paymentType) {
case PaymentType.card:
return CardPaymentDataDTO.fromJson(payload).toDomain();
return CardEndpointDTO.fromJson(payload).toDomain();
case PaymentType.cardToken:
return CardTokenEndpointDTO.fromJson(payload).toDomain();
case PaymentType.iban:
return IbanPaymentDataDTO.fromJson(payload).toDomain();
case PaymentType.bankAccount:
return RussianBankAccountPaymentDataDTO.fromJson(payload).toDomain();
case PaymentType.wallet:
return WalletPaymentDataDTO.fromJson(payload).toDomain();
case PaymentType.cryptoAddress:
return CryptoAddressPaymentDataDTO.fromJson(payload).toDomain();
case PaymentType.externalChain:
return ExternalChainEndpointDTO.fromJson(payload).toDomain();
case PaymentType.ledger:
return LedgerEndpointDTO.fromJson(payload).toDomain();
case PaymentType.managedWallet:
return ManagedWalletEndpointDTO.fromJson(payload).toDomain();
}
}
}

View File

@@ -0,0 +1,16 @@
import 'package:pshared/data/dto/payment/money.dart';
import 'package:pshared/models/payment/money.dart';
extension MoneyMapper on Money {
MoneyDTO toDTO() => MoneyDTO(
amount: amount,
currency: currency,
);
}
extension MoneyDTOMapper on MoneyDTO {
Money toDomain() => Money(
amount: amount,
currency: currency,
);
}

View File

@@ -0,0 +1,18 @@
import 'package:pshared/data/dto/payment/network_fee.dart';
import 'package:pshared/data/mapper/payment/money.dart';
import 'package:pshared/models/payment/fees/network.dart';
extension NetworkFeeDTOMapper on NetworkFeeDTO {
NetworkFee toDomain() => NetworkFee(
networkFee: networkFee?.toDomain(),
estimationContext: estimationContext,
);
}
extension NetworkFeeMapper on NetworkFee {
NetworkFeeDTO toDTO() => NetworkFeeDTO(
networkFee: networkFee?.toDTO(),
estimationContext: estimationContext,
);
}

View File

@@ -0,0 +1,133 @@
import 'package:pshared/data/dto/payment/card.dart';
import 'package:pshared/data/dto/payment/card_token.dart';
import 'package:pshared/data/dto/payment/endpoint.dart';
import 'package:pshared/data/dto/payment/external_chain.dart';
import 'package:pshared/data/dto/payment/ledger.dart';
import 'package:pshared/data/dto/payment/managed_wallet.dart';
import 'package:pshared/data/mapper/payment/asset.dart';
import 'package:pshared/data/mapper/payment/type.dart';
import 'package:pshared/models/payment/methods/card.dart';
import 'package:pshared/models/payment/methods/card_token.dart';
import 'package:pshared/models/payment/methods/crypto_address.dart';
import 'package:pshared/models/payment/methods/data.dart';
import 'package:pshared/models/payment/methods/ledger.dart';
import 'package:pshared/models/payment/methods/managed_wallet.dart';
import 'package:pshared/models/payment/type.dart';
extension PaymentMethodDataEndpointMapper on PaymentMethodData {
PaymentEndpointDTO toDTO() {
final metadata = this.metadata;
switch (type) {
case PaymentType.ledger:
final payload = this as LedgerPaymentMethod;
return PaymentEndpointDTO(
type: paymentTypeToValue(type),
data: LedgerEndpointDTO(
ledgerAccountRef: payload.ledgerAccountRef,
contraLedgerAccountRef: payload.contraLedgerAccountRef,
).toJson(),
metadata: metadata,
);
case PaymentType.managedWallet:
final payload = this as ManagedWalletPaymentMethod;
return PaymentEndpointDTO(
type: paymentTypeToValue(type),
data: ManagedWalletEndpointDTO(
managedWalletRef: payload.managedWalletRef,
asset: payload.asset?.toDTO(),
).toJson(),
metadata: metadata,
);
case PaymentType.externalChain:
final payload = this as CryptoAddressPaymentMethod;
return PaymentEndpointDTO(
type: paymentTypeToValue(type),
data: ExternalChainEndpointDTO(
asset: payload.asset?.toDTO(),
address: payload.address,
memo: payload.memo,
).toJson(),
metadata: metadata,
);
case PaymentType.card:
final payload = this as CardPaymentMethod;
return PaymentEndpointDTO(
type: paymentTypeToValue(type),
data: CardEndpointDTO(
pan: payload.pan,
expMonth: payload.expMonth,
expYear: payload.expYear,
country: payload.country,
firstName: payload.firstName,
lastName: payload.lastName,
).toJson(),
metadata: metadata,
);
case PaymentType.cardToken:
final payload = this as CardTokenPaymentMethod;
return PaymentEndpointDTO(
type: paymentTypeToValue(type),
data: CardTokenEndpointDTO(
token: payload.token,
maskedPan: payload.maskedPan,
).toJson(),
metadata: metadata,
);
default:
throw UnsupportedError('Unsupported payment endpoint type: $type');
}
}
}
extension PaymentEndpointDTOMapper on PaymentEndpointDTO {
PaymentMethodData toDomain() {
final metadata = this.metadata;
switch (paymentTypeFromValue(type)) {
case PaymentType.ledger:
final payload = LedgerEndpointDTO.fromJson(data);
return LedgerPaymentMethod(
ledgerAccountRef: payload.ledgerAccountRef,
contraLedgerAccountRef: payload.contraLedgerAccountRef,
metadata: metadata,
);
case PaymentType.managedWallet:
final payload = ManagedWalletEndpointDTO.fromJson(data);
return ManagedWalletPaymentMethod(
managedWalletRef: payload.managedWalletRef,
asset: payload.asset?.toDomain(),
metadata: metadata,
);
case PaymentType.externalChain:
final payload = ExternalChainEndpointDTO.fromJson(data);
return CryptoAddressPaymentMethod(
asset: payload.asset?.toDomain(),
address: payload.address,
memo: payload.memo,
metadata: metadata,
);
case PaymentType.card:
final payload = CardEndpointDTO.fromJson(data);
return CardPaymentMethod(
pan: payload.pan,
firstName: payload.firstName,
lastName: payload.lastName,
expMonth: payload.expMonth,
expYear: payload.expYear,
country: payload.country,
metadata: metadata,
);
case PaymentType.cardToken:
final payload = CardTokenEndpointDTO.fromJson(data);
return CardTokenPaymentMethod(
token: payload.token,
maskedPan: payload.maskedPan,
metadata: metadata,
);
default:
throw UnsupportedError('Unsupported payment endpoint type: ${paymentTypeFromValue(type)}');
}
}
}

View File

@@ -0,0 +1,33 @@
import 'package:pshared/data/dto/payment/payment_quote.dart';
import 'package:pshared/data/mapper/payment/fee_line.dart';
import 'package:pshared/data/mapper/payment/fx_quote.dart';
import 'package:pshared/data/mapper/payment/money.dart';
import 'package:pshared/data/mapper/payment/network_fee.dart';
import 'package:pshared/models/payment/quote.dart';
extension PaymentQuoteDTOMapper on PaymentQuoteDTO {
PaymentQuote toDomain() => PaymentQuote(
quoteRef: quoteRef,
debitAmount: debitAmount?.toDomain(),
expectedSettlementAmount: expectedSettlementAmount?.toDomain(),
expectedFeeTotal: expectedFeeTotal?.toDomain(),
feeQuoteToken: feeQuoteToken,
feeLines: feeLines?.map((line) => line.toDomain()).toList(),
networkFee: networkFee?.toDomain(),
fxQuote: fxQuote?.toDomain(),
);
}
extension PaymentQuoteMapper on PaymentQuote {
PaymentQuoteDTO toDTO() => PaymentQuoteDTO(
quoteRef: quoteRef,
debitAmount: debitAmount?.toDTO(),
expectedSettlementAmount: expectedSettlementAmount?.toDTO(),
expectedFeeTotal: expectedFeeTotal?.toDTO(),
feeQuoteToken: feeQuoteToken,
feeLines: feeLines?.map((line) => line.toDTO()).toList(),
networkFee: networkFee?.toDTO(),
fxQuote: fxQuote?.toDTO(),
);
}

View File

@@ -0,0 +1,26 @@
import 'package:pshared/data/dto/payment/payment.dart';
import 'package:pshared/data/mapper/payment/payment_quote.dart';
import 'package:pshared/models/payment/payment.dart';
extension PaymentDTOMapper on PaymentDTO {
Payment toDomain() => Payment(
paymentRef: paymentRef,
idempotencyKey: idempotencyKey,
state: state,
failureCode: failureCode,
failureReason: failureReason,
lastQuote: lastQuote?.toDomain(),
);
}
extension PaymentMapper on Payment {
PaymentDTO toDTO() => PaymentDTO(
paymentRef: paymentRef,
idempotencyKey: idempotencyKey,
state: state,
failureCode: failureCode,
failureReason: failureReason,
lastQuote: lastQuote?.toDTO(),
);
}

View File

@@ -7,12 +7,18 @@ PaymentType paymentTypeFromValue(String value) {
return PaymentType.iban;
case 'card':
return PaymentType.card;
case 'cardToken':
return PaymentType.cardToken;
case 'bankAccount':
return PaymentType.bankAccount;
case 'ledger':
return PaymentType.ledger;
case 'wallet':
return PaymentType.wallet;
case 'managedWallet':
return PaymentType.managedWallet;
case 'cryptoAddress':
return PaymentType.cryptoAddress;
return PaymentType.externalChain;
default:
return PaymentType.iban;
}
@@ -24,11 +30,17 @@ String paymentTypeToValue(PaymentType type) {
return 'iban';
case PaymentType.card:
return 'card';
case PaymentType.cardToken:
return 'cardToken';
case PaymentType.ledger:
return 'ledger';
case PaymentType.bankAccount:
return 'bankAccount';
case PaymentType.wallet:
return 'wallet';
case PaymentType.cryptoAddress:
case PaymentType.managedWallet:
return 'managedWallet';
case PaymentType.externalChain:
return 'cryptoAddress';
}
}