mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 09:38:33 +08:00
feat(payment_methods): bank details support for payment method data in pmt (#2385)
This commit is contained in:
@ -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>,
|
||||||
|
|||||||
@ -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,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user