feat(payment_methods): bank details support for payment method data in pmt (#2385)

This commit is contained in:
Sarthak Soni
2023-10-05 15:18:10 +05:30
committed by GitHub
parent 7fb5c044bc
commit e86c0325f5
3 changed files with 40 additions and 4 deletions

View File

@ -147,6 +147,7 @@ pub struct PaymentMethodResponse {
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub enum PaymentMethodsData {
Card(CardDetailsPaymentMethod),
BankDetails(PaymentMethodDataBankCreds),
}
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct CardDetailsPaymentMethod {
@ -158,6 +159,25 @@ pub struct CardDetailsPaymentMethod {
pub card_holder_name: Option<masking::Secret<String>>,
}
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct PaymentMethodDataBankCreds {
pub mask: String,
pub hash: String,
pub payment_method_type: api_enums::PaymentMethodType,
pub connector_details: Vec<BankAccountConnectorDetails>,
}
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct BankAccountConnectorDetails {
pub connector: String,
pub account_id: String,
pub access_token: BankAccountAccessCreds,
}
#[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum BankAccountAccessCreds {
AccessToken(String),
}
#[derive(Debug, serde::Deserialize, serde::Serialize, Clone, ToSchema)]
pub struct CardDetailFromLocker {
pub scheme: Option<String>,

View File

@ -99,13 +99,19 @@ pub struct TokenizeCoreWorkflow {
#[derive(Debug, Serialize, Deserialize)]
pub enum PaymentMethodUpdate {
MetadataUpdate { metadata: Option<serde_json::Value> },
MetadataUpdate {
metadata: Option<serde_json::Value>,
},
PaymentMethodDataUpdate {
payment_method_data: Option<Encryption>,
},
}
#[derive(Clone, Debug, Default, AsChangeset, router_derive::DebugAsDisplay)]
#[diesel(table_name = payment_methods)]
pub struct PaymentMethodUpdateInternal {
metadata: Option<serde_json::Value>,
payment_method_data: Option<Encryption>,
}
impl PaymentMethodUpdateInternal {
@ -119,7 +125,16 @@ impl PaymentMethodUpdateInternal {
impl From<PaymentMethodUpdate> for PaymentMethodUpdateInternal {
fn from(payment_method_update: PaymentMethodUpdate) -> Self {
match payment_method_update {
PaymentMethodUpdate::MetadataUpdate { metadata } => Self { metadata },
PaymentMethodUpdate::MetadataUpdate { metadata } => Self {
metadata,
payment_method_data: None,
},
PaymentMethodUpdate::PaymentMethodDataUpdate {
payment_method_data,
} => Self {
metadata: None,
payment_method_data,
},
}
}
}

View File

@ -1954,8 +1954,9 @@ async fn get_card_details(
.flatten()
.map(|x| x.into_inner().expose())
.and_then(|v| serde_json::from_value::<PaymentMethodsData>(v).ok())
.map(|pmd| match pmd {
PaymentMethodsData::Card(crd) => api::CardDetailFromLocker::from(crd),
.and_then(|pmd| match pmd {
PaymentMethodsData::Card(crd) => Some(api::CardDetailFromLocker::from(crd)),
_ => None,
});
Ok(Some(