mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +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
	 Sarthak Soni
					Sarthak Soni