From bfca26d9fd7a45ba9e52ceb79eb399b9ad382a72 Mon Sep 17 00:00:00 2001 From: Narayan Bhat <48803246+Narayanbhat166@users.noreply.github.com> Date: Tue, 28 Feb 2023 18:30:03 +0530 Subject: [PATCH] feat: store card network for cards (#687) --- crates/api_models/src/payment_methods.rs | 8 ++++++++ crates/router/src/core/payment_methods/cards.rs | 5 +++++ crates/router/src/core/payments/helpers.rs | 7 ++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/crates/api_models/src/payment_methods.rs b/crates/api_models/src/payment_methods.rs index ed0a5c875d..1d2daccbcf 100644 --- a/crates/api_models/src/payment_methods.rs +++ b/crates/api_models/src/payment_methods.rs @@ -41,6 +41,10 @@ pub struct CreatePaymentMethod { /// The unique identifier of the customer. #[schema(example = "cus_meowerunwiuwiwqw")] pub customer_id: Option, + + /// The card network + #[schema(example = "Visa")] + pub card_network: Option, } #[derive(Debug, serde::Deserialize, serde::Serialize, Clone, ToSchema)] @@ -54,6 +58,10 @@ pub struct UpdatePaymentMethod { "card_holder_name": "John Doe"}))] pub card: Option, + /// You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object. + #[schema(value_type = Option,example = "Visa")] + pub card_network: Option, + /// You can specify up to 50 keys, with key names up to 40 characters long and values up to 500 characters long. Metadata is useful for storing additional, structured information on an object. #[schema(value_type = Option,example = json!({ "city": "NY", "unit": "245" }))] pub metadata: Option, diff --git a/crates/router/src/core/payment_methods/cards.rs b/crates/router/src/core/payment_methods/cards.rs index 7359375414..66173a3ab8 100644 --- a/crates/router/src/core/payment_methods/cards.rs +++ b/crates/router/src/core/payment_methods/cards.rs @@ -48,6 +48,7 @@ pub async fn create_payment_method( payment_method: req.payment_method.foreign_into(), payment_method_type: req.payment_method_type.map(ForeignInto::foreign_into), payment_method_issuer: req.payment_method_issuer.clone(), + scheme: req.card_network.clone(), metadata: req.metadata.clone(), ..storage::PaymentMethodNew::default() }) @@ -129,6 +130,10 @@ pub async fn update_customer_payment_method( card: req.card, metadata: req.metadata, customer_id: Some(pm.customer_id), + card_network: req + .card_network + .as_ref() + .map(|card_network| card_network.to_string()), }; add_payment_method(state, new_pm, &merchant_account).await } diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index cdb1fc961a..1325a5dea9 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -517,11 +517,15 @@ pub(crate) async fn call_payment_method( let payment_method_request = api::CreatePaymentMethod { payment_method: payment_method_type.foreign_into(), payment_method_type: None, - payment_method_issuer: None, + payment_method_issuer: card.card_issuer.clone(), payment_method_issuer_code: None, card: Some(card_detail), metadata: None, customer_id: Some(customer_id), + card_network: card + .card_network + .as_ref() + .map(|card_network| card_network.to_string()), }; let resp = cards::add_payment_method( state, @@ -553,6 +557,7 @@ pub(crate) async fn call_payment_method( card: None, metadata: None, customer_id: None, + card_network: None, }; let resp = cards::add_payment_method(state, payment_method_request, merchant_account)