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)] #[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub enum PaymentMethodsData { pub enum PaymentMethodsData {
Card(CardDetailsPaymentMethod), Card(CardDetailsPaymentMethod),
BankDetails(PaymentMethodDataBankCreds),
} }
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)] #[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct CardDetailsPaymentMethod { pub struct CardDetailsPaymentMethod {
@ -158,6 +159,25 @@ pub struct CardDetailsPaymentMethod {
pub card_holder_name: Option<masking::Secret<String>>, 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)] #[derive(Debug, serde::Deserialize, serde::Serialize, Clone, ToSchema)]
pub struct CardDetailFromLocker { pub struct CardDetailFromLocker {
pub scheme: Option<String>, pub scheme: Option<String>,

View File

@ -99,13 +99,19 @@ pub struct TokenizeCoreWorkflow {
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub enum PaymentMethodUpdate { 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)] #[derive(Clone, Debug, Default, AsChangeset, router_derive::DebugAsDisplay)]
#[diesel(table_name = payment_methods)] #[diesel(table_name = payment_methods)]
pub struct PaymentMethodUpdateInternal { pub struct PaymentMethodUpdateInternal {
metadata: Option<serde_json::Value>, metadata: Option<serde_json::Value>,
payment_method_data: Option<Encryption>,
} }
impl PaymentMethodUpdateInternal { impl PaymentMethodUpdateInternal {
@ -119,7 +125,16 @@ impl PaymentMethodUpdateInternal {
impl From<PaymentMethodUpdate> for PaymentMethodUpdateInternal { impl From<PaymentMethodUpdate> for PaymentMethodUpdateInternal {
fn from(payment_method_update: PaymentMethodUpdate) -> Self { fn from(payment_method_update: PaymentMethodUpdate) -> Self {
match payment_method_update { 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() .flatten()
.map(|x| x.into_inner().expose()) .map(|x| x.into_inner().expose())
.and_then(|v| serde_json::from_value::<PaymentMethodsData>(v).ok()) .and_then(|v| serde_json::from_value::<PaymentMethodsData>(v).ok())
.map(|pmd| match pmd { .and_then(|pmd| match pmd {
PaymentMethodsData::Card(crd) => api::CardDetailFromLocker::from(crd), PaymentMethodsData::Card(crd) => Some(api::CardDetailFromLocker::from(crd)),
_ => None,
}); });
Ok(Some( Ok(Some(