+ quotation provider
This commit is contained in:
24
frontend/pshared/lib/data/dto/payment/asset.dart
Normal file
24
frontend/pshared/lib/data/dto/payment/asset.dart
Normal file
@@ -0,0 +1,24 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'asset.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class AssetDTO {
|
||||
final String chain;
|
||||
|
||||
@JsonKey(name: 'token_symbol')
|
||||
final String tokenSymbol;
|
||||
|
||||
@JsonKey(name: 'contract_address')
|
||||
final String? contractAddress;
|
||||
|
||||
const AssetDTO({
|
||||
required this.chain,
|
||||
required this.tokenSymbol,
|
||||
this.contractAddress,
|
||||
});
|
||||
|
||||
factory AssetDTO.fromJson(Map<String, dynamic> json) => _$AssetDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$AssetDTOToJson(this);
|
||||
}
|
||||
@@ -4,17 +4,28 @@ part 'card.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class CardPaymentDataDTO {
|
||||
class CardEndpointDTO {
|
||||
final String pan;
|
||||
final String firstName;
|
||||
final String lastName;
|
||||
|
||||
const CardPaymentDataDTO({
|
||||
@JsonKey(name: 'exp_month')
|
||||
final int? expMonth;
|
||||
|
||||
@JsonKey(name: 'exp_year')
|
||||
final int? expYear;
|
||||
|
||||
final String? country;
|
||||
|
||||
const CardEndpointDTO({
|
||||
required this.pan,
|
||||
required this.firstName,
|
||||
required this.lastName,
|
||||
required this.expMonth,
|
||||
required this.expYear,
|
||||
this.country,
|
||||
});
|
||||
|
||||
factory CardPaymentDataDTO.fromJson(Map<String, dynamic> json) => _$CardPaymentDataDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$CardPaymentDataDTOToJson(this);
|
||||
factory CardEndpointDTO.fromJson(Map<String, dynamic> json) => _$CardEndpointDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$CardEndpointDTOToJson(this);
|
||||
}
|
||||
|
||||
20
frontend/pshared/lib/data/dto/payment/card_token.dart
Normal file
20
frontend/pshared/lib/data/dto/payment/card_token.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'card_token.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class CardTokenEndpointDTO {
|
||||
final String token;
|
||||
|
||||
@JsonKey(name: 'masked_pan')
|
||||
final String maskedPan;
|
||||
|
||||
const CardTokenEndpointDTO({
|
||||
required this.maskedPan,
|
||||
required this.token,
|
||||
});
|
||||
|
||||
factory CardTokenEndpointDTO.fromJson(Map<String, dynamic> json) => _$CardTokenEndpointDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$CardTokenEndpointDTOToJson(this);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'crypto_address.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class CryptoAddressPaymentDataDTO {
|
||||
final String address;
|
||||
final String network;
|
||||
final String? destinationTag;
|
||||
|
||||
const CryptoAddressPaymentDataDTO({
|
||||
required this.address,
|
||||
required this.network,
|
||||
this.destinationTag,
|
||||
});
|
||||
|
||||
factory CryptoAddressPaymentDataDTO.fromJson(Map<String, dynamic> json) => _$CryptoAddressPaymentDataDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$CryptoAddressPaymentDataDTOToJson(this);
|
||||
}
|
||||
18
frontend/pshared/lib/data/dto/payment/currency_pair.dart
Normal file
18
frontend/pshared/lib/data/dto/payment/currency_pair.dart
Normal file
@@ -0,0 +1,18 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'currency_pair.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class CurrencyPairDTO {
|
||||
final String base;
|
||||
final String quote;
|
||||
|
||||
const CurrencyPairDTO({
|
||||
required this.base,
|
||||
required this.quote,
|
||||
});
|
||||
|
||||
factory CurrencyPairDTO.fromJson(Map<String, dynamic> json) => _$CurrencyPairDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$CurrencyPairDTOToJson(this);
|
||||
}
|
||||
20
frontend/pshared/lib/data/dto/payment/endpoint.dart
Normal file
20
frontend/pshared/lib/data/dto/payment/endpoint.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'endpoint.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class PaymentEndpointDTO {
|
||||
final String type;
|
||||
final Map<String, dynamic> data;
|
||||
final Map<String, String>? metadata;
|
||||
|
||||
const PaymentEndpointDTO({
|
||||
required this.type,
|
||||
required this.data,
|
||||
this.metadata,
|
||||
});
|
||||
|
||||
factory PaymentEndpointDTO.fromJson(Map<String, dynamic> json) => _$PaymentEndpointDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$PaymentEndpointDTOToJson(this);
|
||||
}
|
||||
22
frontend/pshared/lib/data/dto/payment/external_chain.dart
Normal file
22
frontend/pshared/lib/data/dto/payment/external_chain.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/asset.dart';
|
||||
|
||||
part 'external_chain.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class ExternalChainEndpointDTO {
|
||||
final AssetDTO? asset;
|
||||
final String address;
|
||||
final String? memo;
|
||||
|
||||
const ExternalChainEndpointDTO({
|
||||
this.asset,
|
||||
required this.address,
|
||||
this.memo,
|
||||
});
|
||||
|
||||
factory ExternalChainEndpointDTO.fromJson(Map<String, dynamic> json) => _$ExternalChainEndpointDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$ExternalChainEndpointDTOToJson(this);
|
||||
}
|
||||
26
frontend/pshared/lib/data/dto/payment/fee_line.dart
Normal file
26
frontend/pshared/lib/data/dto/payment/fee_line.dart
Normal file
@@ -0,0 +1,26 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/money.dart';
|
||||
|
||||
part 'fee_line.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class FeeLineDTO {
|
||||
final String? ledgerAccountRef;
|
||||
final MoneyDTO? amount;
|
||||
final String? lineType;
|
||||
final String? side;
|
||||
final Map<String, String>? meta;
|
||||
|
||||
const FeeLineDTO({
|
||||
this.ledgerAccountRef,
|
||||
this.amount,
|
||||
this.lineType,
|
||||
this.side,
|
||||
this.meta,
|
||||
});
|
||||
|
||||
factory FeeLineDTO.fromJson(Map<String, dynamic> json) => _$FeeLineDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$FeeLineDTOToJson(this);
|
||||
}
|
||||
40
frontend/pshared/lib/data/dto/payment/fx_quote.dart
Normal file
40
frontend/pshared/lib/data/dto/payment/fx_quote.dart
Normal file
@@ -0,0 +1,40 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/money.dart';
|
||||
|
||||
part 'fx_quote.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class FxQuoteDTO {
|
||||
final String? quoteRef;
|
||||
final String? baseCurrency;
|
||||
final String? quoteCurrency;
|
||||
final String? side;
|
||||
final String? price;
|
||||
final MoneyDTO? baseAmount;
|
||||
final MoneyDTO? quoteAmount;
|
||||
final int? expiresAtUnixMs;
|
||||
final String? provider;
|
||||
final String? rateRef;
|
||||
|
||||
@JsonKey(defaultValue: false)
|
||||
final bool? firm;
|
||||
|
||||
const FxQuoteDTO({
|
||||
this.quoteRef,
|
||||
this.baseCurrency,
|
||||
this.quoteCurrency,
|
||||
this.side,
|
||||
this.price,
|
||||
this.baseAmount,
|
||||
this.quoteAmount,
|
||||
this.expiresAtUnixMs,
|
||||
this.provider,
|
||||
this.rateRef,
|
||||
this.firm = false,
|
||||
});
|
||||
|
||||
factory FxQuoteDTO.fromJson(Map<String, dynamic> json) => _$FxQuoteDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$FxQuoteDTOToJson(this);
|
||||
}
|
||||
34
frontend/pshared/lib/data/dto/payment/intent/fx.dart
Normal file
34
frontend/pshared/lib/data/dto/payment/intent/fx.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/currency_pair.dart';
|
||||
|
||||
part 'fx.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class FxIntentDTO {
|
||||
final CurrencyPairDTO? pair;
|
||||
final String? side;
|
||||
final bool firm;
|
||||
|
||||
@JsonKey(name: 'ttl_ms')
|
||||
final int? ttlMs;
|
||||
|
||||
@JsonKey(name: 'preferred_provider')
|
||||
final String? preferredProvider;
|
||||
|
||||
@JsonKey(name: 'max_age_ms')
|
||||
final int? maxAgeMs;
|
||||
|
||||
const FxIntentDTO({
|
||||
this.pair,
|
||||
this.side,
|
||||
this.firm = false,
|
||||
this.ttlMs,
|
||||
this.preferredProvider,
|
||||
this.maxAgeMs,
|
||||
});
|
||||
|
||||
factory FxIntentDTO.fromJson(Map<String, dynamic> json) => _$FxIntentDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$FxIntentDTOToJson(this);
|
||||
}
|
||||
36
frontend/pshared/lib/data/dto/payment/intent/payment.dart
Normal file
36
frontend/pshared/lib/data/dto/payment/intent/payment.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/endpoint.dart';
|
||||
import 'package:pshared/data/dto/payment/intent/fx.dart';
|
||||
import 'package:pshared/data/dto/payment/money.dart';
|
||||
|
||||
part 'payment.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class PaymentIntentDTO {
|
||||
final String? kind;
|
||||
final PaymentEndpointDTO? source;
|
||||
final PaymentEndpointDTO? destination;
|
||||
final MoneyDTO? amount;
|
||||
|
||||
final FxIntentDTO? fx;
|
||||
|
||||
@JsonKey(name: 'settlement_mode')
|
||||
final String? settlementMode;
|
||||
|
||||
final Map<String, String>? attributes;
|
||||
|
||||
const PaymentIntentDTO({
|
||||
this.kind,
|
||||
this.source,
|
||||
this.destination,
|
||||
this.amount,
|
||||
this.fx,
|
||||
this.settlementMode,
|
||||
this.attributes,
|
||||
});
|
||||
|
||||
factory PaymentIntentDTO.fromJson(Map<String, dynamic> json) => _$PaymentIntentDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$PaymentIntentDTOToJson(this);
|
||||
}
|
||||
21
frontend/pshared/lib/data/dto/payment/ledger.dart
Normal file
21
frontend/pshared/lib/data/dto/payment/ledger.dart
Normal file
@@ -0,0 +1,21 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'ledger.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class LedgerEndpointDTO {
|
||||
@JsonKey(name: 'ledger_account_ref')
|
||||
final String ledgerAccountRef;
|
||||
|
||||
@JsonKey(name: 'contra_ledger_account_ref')
|
||||
final String? contraLedgerAccountRef;
|
||||
|
||||
const LedgerEndpointDTO({
|
||||
required this.ledgerAccountRef,
|
||||
this.contraLedgerAccountRef,
|
||||
});
|
||||
|
||||
factory LedgerEndpointDTO.fromJson(Map<String, dynamic> json) => _$LedgerEndpointDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$LedgerEndpointDTOToJson(this);
|
||||
}
|
||||
22
frontend/pshared/lib/data/dto/payment/managed_wallet.dart
Normal file
22
frontend/pshared/lib/data/dto/payment/managed_wallet.dart
Normal file
@@ -0,0 +1,22 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/asset.dart';
|
||||
|
||||
part 'managed_wallet.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class ManagedWalletEndpointDTO {
|
||||
@JsonKey(name: 'managed_wallet_ref')
|
||||
final String managedWalletRef;
|
||||
|
||||
final AssetDTO? asset;
|
||||
|
||||
const ManagedWalletEndpointDTO({
|
||||
required this.managedWalletRef,
|
||||
this.asset,
|
||||
});
|
||||
|
||||
factory ManagedWalletEndpointDTO.fromJson(Map<String, dynamic> json) => _$ManagedWalletEndpointDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$ManagedWalletEndpointDTOToJson(this);
|
||||
}
|
||||
18
frontend/pshared/lib/data/dto/payment/money.dart
Normal file
18
frontend/pshared/lib/data/dto/payment/money.dart
Normal file
@@ -0,0 +1,18 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'money.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class MoneyDTO {
|
||||
final String amount;
|
||||
final String currency;
|
||||
|
||||
const MoneyDTO({
|
||||
required this.amount,
|
||||
required this.currency,
|
||||
});
|
||||
|
||||
factory MoneyDTO.fromJson(Map<String, dynamic> json) => _$MoneyDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$MoneyDTOToJson(this);
|
||||
}
|
||||
20
frontend/pshared/lib/data/dto/payment/network_fee.dart
Normal file
20
frontend/pshared/lib/data/dto/payment/network_fee.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/money.dart';
|
||||
|
||||
part 'network_fee.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class NetworkFeeDTO {
|
||||
final MoneyDTO? networkFee;
|
||||
final String? estimationContext;
|
||||
|
||||
const NetworkFeeDTO({
|
||||
this.networkFee,
|
||||
this.estimationContext,
|
||||
});
|
||||
|
||||
factory NetworkFeeDTO.fromJson(Map<String, dynamic> json) => _$NetworkFeeDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$NetworkFeeDTOToJson(this);
|
||||
}
|
||||
28
frontend/pshared/lib/data/dto/payment/payment.dart
Normal file
28
frontend/pshared/lib/data/dto/payment/payment.dart
Normal file
@@ -0,0 +1,28 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/payment_quote.dart';
|
||||
|
||||
part 'payment.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class PaymentDTO {
|
||||
final String? paymentRef;
|
||||
final String? idempotencyKey;
|
||||
final String? state;
|
||||
final String? failureCode;
|
||||
final String? failureReason;
|
||||
final PaymentQuoteDTO? lastQuote;
|
||||
|
||||
const PaymentDTO({
|
||||
this.paymentRef,
|
||||
this.idempotencyKey,
|
||||
this.state,
|
||||
this.failureCode,
|
||||
this.failureReason,
|
||||
this.lastQuote,
|
||||
});
|
||||
|
||||
factory PaymentDTO.fromJson(Map<String, dynamic> json) => _$PaymentDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$PaymentDTOToJson(this);
|
||||
}
|
||||
35
frontend/pshared/lib/data/dto/payment/payment_quote.dart
Normal file
35
frontend/pshared/lib/data/dto/payment/payment_quote.dart
Normal file
@@ -0,0 +1,35 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
import 'package:pshared/data/dto/payment/fee_line.dart';
|
||||
import 'package:pshared/data/dto/payment/fx_quote.dart';
|
||||
import 'package:pshared/data/dto/payment/money.dart';
|
||||
import 'package:pshared/data/dto/payment/network_fee.dart';
|
||||
|
||||
part 'payment_quote.g.dart';
|
||||
|
||||
|
||||
@JsonSerializable()
|
||||
class PaymentQuoteDTO {
|
||||
final String? quoteRef;
|
||||
final MoneyDTO? debitAmount;
|
||||
final MoneyDTO? expectedSettlementAmount;
|
||||
final MoneyDTO? expectedFeeTotal;
|
||||
final String? feeQuoteToken;
|
||||
final List<FeeLineDTO>? feeLines;
|
||||
final NetworkFeeDTO? networkFee;
|
||||
final FxQuoteDTO? fxQuote;
|
||||
|
||||
const PaymentQuoteDTO({
|
||||
this.quoteRef,
|
||||
this.debitAmount,
|
||||
this.expectedSettlementAmount,
|
||||
this.expectedFeeTotal,
|
||||
this.feeQuoteToken,
|
||||
this.feeLines,
|
||||
this.networkFee,
|
||||
this.fxQuote,
|
||||
});
|
||||
|
||||
factory PaymentQuoteDTO.fromJson(Map<String, dynamic> json) => _$PaymentQuoteDTOFromJson(json);
|
||||
Map<String, dynamic> toJson() => _$PaymentQuoteDTOToJson(this);
|
||||
}
|
||||
20
frontend/pshared/lib/data/mapper/payment/asset.dart
Normal file
20
frontend/pshared/lib/data/mapper/payment/asset.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
17
frontend/pshared/lib/data/mapper/payment/card_token.dart
Normal file
17
frontend/pshared/lib/data/mapper/payment/card_token.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
16
frontend/pshared/lib/data/mapper/payment/currency_pair.dart
Normal file
16
frontend/pshared/lib/data/mapper/payment/currency_pair.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
183
frontend/pshared/lib/data/mapper/payment/enums.dart
Normal file
183
frontend/pshared/lib/data/mapper/payment/enums.dart
Normal 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';
|
||||
}
|
||||
}
|
||||
24
frontend/pshared/lib/data/mapper/payment/fee_line.dart
Normal file
24
frontend/pshared/lib/data/mapper/payment/fee_line.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
36
frontend/pshared/lib/data/mapper/payment/fx_quote.dart
Normal file
36
frontend/pshared/lib/data/mapper/payment/fx_quote.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
27
frontend/pshared/lib/data/mapper/payment/intent/fx.dart
Normal file
27
frontend/pshared/lib/data/mapper/payment/intent/fx.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
30
frontend/pshared/lib/data/mapper/payment/intent/payment.dart
Normal file
30
frontend/pshared/lib/data/mapper/payment/intent/payment.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
17
frontend/pshared/lib/data/mapper/payment/ledger.dart
Normal file
17
frontend/pshared/lib/data/mapper/payment/ledger.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
18
frontend/pshared/lib/data/mapper/payment/managed_wallet.dart
Normal file
18
frontend/pshared/lib/data/mapper/payment/managed_wallet.dart
Normal 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(),
|
||||
);
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
16
frontend/pshared/lib/data/mapper/payment/money.dart
Normal file
16
frontend/pshared/lib/data/mapper/payment/money.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
18
frontend/pshared/lib/data/mapper/payment/network_fee.dart
Normal file
18
frontend/pshared/lib/data/mapper/payment/network_fee.dart
Normal 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,
|
||||
);
|
||||
}
|
||||
133
frontend/pshared/lib/data/mapper/payment/payment.dart
Normal file
133
frontend/pshared/lib/data/mapper/payment/payment.dart
Normal 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)}');
|
||||
}
|
||||
}
|
||||
}
|
||||
33
frontend/pshared/lib/data/mapper/payment/payment_quote.dart
Normal file
33
frontend/pshared/lib/data/mapper/payment/payment_quote.dart
Normal 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(),
|
||||
);
|
||||
}
|
||||
@@ -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(),
|
||||
);
|
||||
}
|
||||
@@ -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';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user