mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 09:07:09 +08:00
fix(router): Add additional card info in payment response (#1745)
Co-authored-by: Sahkal Poddar <sahkal.poddar@juspay.in>
This commit is contained in:
@ -6,7 +6,7 @@ use common_utils::{
|
||||
ext_traits::Encode,
|
||||
pii::{self, Email},
|
||||
};
|
||||
use masking::{PeekInterface, Secret};
|
||||
use masking::Secret;
|
||||
use router_derive::Setter;
|
||||
use time::PrimitiveDateTime;
|
||||
use url::Url;
|
||||
@ -723,16 +723,25 @@ pub enum PaymentMethodData {
|
||||
Upi(UpiData),
|
||||
}
|
||||
|
||||
#[derive(Default, Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub struct AdditionalCardInfo {
|
||||
pub card_issuer: Option<String>,
|
||||
pub card_network: Option<api_enums::CardNetwork>,
|
||||
pub card_type: Option<String>,
|
||||
pub card_issuing_country: Option<String>,
|
||||
pub bank_code: Option<String>,
|
||||
pub last4: String,
|
||||
pub card_isin: String,
|
||||
pub card_exp_month: Secret<String>,
|
||||
pub card_exp_year: Secret<String>,
|
||||
pub card_holder_name: Secret<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum AdditionalPaymentData {
|
||||
Card {
|
||||
card_issuer: Option<String>,
|
||||
card_network: Option<api_enums::CardNetwork>,
|
||||
card_type: Option<String>,
|
||||
card_issuing_country: Option<String>,
|
||||
bank_code: Option<String>,
|
||||
},
|
||||
Card(Box<AdditionalCardInfo>),
|
||||
BankRedirect {
|
||||
bank_name: Option<api_enums::BankNames>,
|
||||
},
|
||||
@ -1136,11 +1145,17 @@ pub struct ApplepayPaymentMethod {
|
||||
pub pm_type: String,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Serialize)]
|
||||
#[derive(Eq, PartialEq, Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct CardResponse {
|
||||
last4: String,
|
||||
exp_month: String,
|
||||
exp_year: String,
|
||||
pub last4: String,
|
||||
pub card_type: Option<String>,
|
||||
pub card_network: Option<api_enums::CardNetwork>,
|
||||
pub card_issuer: Option<String>,
|
||||
pub card_issuing_country: Option<String>,
|
||||
pub card_isin: String,
|
||||
pub card_exp_month: Secret<String>,
|
||||
pub card_exp_year: Secret<String>,
|
||||
pub card_holder_name: Secret<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize, ToSchema)]
|
||||
@ -1150,21 +1165,21 @@ pub struct RewardData {
|
||||
pub merchant_id: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize)]
|
||||
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum PaymentMethodDataResponse {
|
||||
#[serde(rename = "card")]
|
||||
Card(CardResponse),
|
||||
BankTransfer(BankTransferData),
|
||||
Wallet(WalletData),
|
||||
PayLater(PayLaterData),
|
||||
BankTransfer,
|
||||
Wallet,
|
||||
PayLater,
|
||||
Paypal,
|
||||
BankRedirect(BankRedirectData),
|
||||
Crypto(CryptoData),
|
||||
BankDebit(BankDebitData),
|
||||
BankRedirect,
|
||||
Crypto,
|
||||
BankDebit,
|
||||
MandatePayment,
|
||||
Reward(RewardData),
|
||||
Upi(UpiData),
|
||||
Reward,
|
||||
Upi,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize, ToSchema)]
|
||||
@ -1802,35 +1817,35 @@ impl From<PaymentsStartRequest> for PaymentsRequest {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Card> for CardResponse {
|
||||
fn from(card: Card) -> Self {
|
||||
let card_number_length = card.card_number.peek().clone().len();
|
||||
impl From<AdditionalCardInfo> for CardResponse {
|
||||
fn from(card: AdditionalCardInfo) -> Self {
|
||||
Self {
|
||||
last4: card.card_number.peek().clone()[card_number_length - 4..card_number_length]
|
||||
.to_string(),
|
||||
exp_month: card.card_exp_month.peek().clone(),
|
||||
exp_year: card.card_exp_year.peek().clone(),
|
||||
last4: card.last4,
|
||||
card_type: card.card_type,
|
||||
card_network: card.card_network,
|
||||
card_issuer: card.card_issuer,
|
||||
card_issuing_country: card.card_issuing_country,
|
||||
card_isin: card.card_isin,
|
||||
card_exp_month: card.card_exp_month,
|
||||
card_exp_year: card.card_exp_year,
|
||||
card_holder_name: card.card_holder_name,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<PaymentMethodData> for PaymentMethodDataResponse {
|
||||
fn from(payment_method_data: PaymentMethodData) -> Self {
|
||||
impl From<AdditionalPaymentData> for PaymentMethodDataResponse {
|
||||
fn from(payment_method_data: AdditionalPaymentData) -> Self {
|
||||
match payment_method_data {
|
||||
PaymentMethodData::Card(card) => Self::Card(CardResponse::from(card)),
|
||||
PaymentMethodData::PayLater(pay_later_data) => Self::PayLater(pay_later_data),
|
||||
PaymentMethodData::Wallet(wallet_data) => Self::Wallet(wallet_data),
|
||||
PaymentMethodData::BankRedirect(bank_redirect_data) => {
|
||||
Self::BankRedirect(bank_redirect_data)
|
||||
}
|
||||
PaymentMethodData::BankTransfer(bank_transfer_data) => {
|
||||
Self::BankTransfer(*bank_transfer_data)
|
||||
}
|
||||
PaymentMethodData::Crypto(crpto_data) => Self::Crypto(crpto_data),
|
||||
PaymentMethodData::BankDebit(bank_debit_data) => Self::BankDebit(bank_debit_data),
|
||||
PaymentMethodData::MandatePayment => Self::MandatePayment,
|
||||
PaymentMethodData::Reward(reward_data) => Self::Reward(reward_data),
|
||||
PaymentMethodData::Upi(upi_data) => Self::Upi(upi_data),
|
||||
AdditionalPaymentData::Card(card) => Self::Card(CardResponse::from(*card)),
|
||||
AdditionalPaymentData::PayLater {} => Self::PayLater,
|
||||
AdditionalPaymentData::Wallet {} => Self::Wallet,
|
||||
AdditionalPaymentData::BankRedirect { .. } => Self::BankRedirect,
|
||||
AdditionalPaymentData::Crypto {} => Self::Crypto,
|
||||
AdditionalPaymentData::BankDebit {} => Self::BankDebit,
|
||||
AdditionalPaymentData::MandatePayment {} => Self::MandatePayment,
|
||||
AdditionalPaymentData::Reward {} => Self::Reward,
|
||||
AdditionalPaymentData::Upi {} => Self::Upi,
|
||||
AdditionalPaymentData::BankTransfer {} => Self::BankTransfer,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user