+ quotation provider
This commit is contained in:
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)}');
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user