From 7933e98c8cadfa27154b5a7ba5d7d12b33272ec6 Mon Sep 17 00:00:00 2001 From: ItsMeShashank Date: Thu, 8 Jun 2023 20:32:13 +0530 Subject: [PATCH] feat(router): add mandate connector to payment data (#1392) --- crates/router/src/core/payments.rs | 1 + crates/router/src/core/payments/helpers.rs | 25 +++++++++++++++---- .../payments/operations/payment_cancel.rs | 1 + .../payments/operations/payment_capture.rs | 1 + .../operations/payment_complete_authorize.rs | 16 ++++++------ .../payments/operations/payment_confirm.rs | 16 ++++++------ .../payments/operations/payment_create.rs | 3 ++- .../operations/payment_method_validate.rs | 1 + .../payments/operations/payment_session.rs | 1 + .../core/payments/operations/payment_start.rs | 1 + .../payments/operations/payment_status.rs | 1 + .../payments/operations/payment_update.rs | 3 ++- 12 files changed, 49 insertions(+), 21 deletions(-) diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs index a9c6399b34..fd7d951fb4 100644 --- a/crates/router/src/core/payments.rs +++ b/crates/router/src/core/payments.rs @@ -998,6 +998,7 @@ where pub connector_response: storage::ConnectorResponse, pub amount: api::Amount, pub mandate_id: Option, + pub mandate_connector: Option, pub currency: storage_enums::Currency, pub setup_mandate: Option, pub address: PaymentAddress, diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index 88c71df481..3147ef8026 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -245,6 +245,7 @@ pub async fn get_token_pm_type_mandate_details( Option, Option, Option, + Option, )> { match mandate_type { Some(api::MandateTxnType::NewMandateTxn) => { @@ -256,17 +257,19 @@ pub async fn get_token_pm_type_mandate_details( request.payment_token.to_owned(), request.payment_method.map(ForeignInto::foreign_into), Some(setup_mandate), + None, )) } Some(api::MandateTxnType::RecurringMandateTxn) => { - let (token_, payment_method_type_) = + let (token_, payment_method_type_, mandate_connector) = get_token_for_recurring_mandate(state, request, merchant_account).await?; - Ok((token_, payment_method_type_, None)) + Ok((token_, payment_method_type_, None, mandate_connector)) } None => Ok(( request.payment_token.to_owned(), request.payment_method.map(ForeignInto::foreign_into), request.mandate_data.clone(), + None, )), } } @@ -275,7 +278,11 @@ pub async fn get_token_for_recurring_mandate( state: &AppState, req: &api::PaymentsRequest, merchant_account: &domain::MerchantAccount, -) -> RouterResult<(Option, Option)> { +) -> RouterResult<( + Option, + Option, + Option, +)> { let db = &*state.store; let mandate_id = req.mandate_id.clone().get_required_value("mandate_id")?; @@ -330,9 +337,17 @@ pub async fn get_token_for_recurring_mandate( } }; - Ok((Some(token), Some(payment_method.payment_method))) + Ok(( + Some(token), + Some(payment_method.payment_method), + Some(mandate.connector), + )) } else { - Ok((None, Some(payment_method.payment_method))) + Ok(( + None, + Some(payment_method.payment_method), + Some(mandate.connector), + )) } } diff --git a/crates/router/src/core/payments/operations/payment_cancel.rs b/crates/router/src/core/payments/operations/payment_cancel.rs index 36bb9b3812..c0188818c6 100644 --- a/crates/router/src/core/payments/operations/payment_cancel.rs +++ b/crates/router/src/core/payments/operations/payment_cancel.rs @@ -134,6 +134,7 @@ impl GetTracker, api::PaymentsCancelRequest> amount, email: None, mandate_id: None, + mandate_connector: None, setup_mandate: None, token: None, address: PaymentAddress { diff --git a/crates/router/src/core/payments/operations/payment_capture.rs b/crates/router/src/core/payments/operations/payment_capture.rs index f541db8fa8..9336627f70 100644 --- a/crates/router/src/core/payments/operations/payment_capture.rs +++ b/crates/router/src/core/payments/operations/payment_capture.rs @@ -141,6 +141,7 @@ impl GetTracker, api::PaymentsCaptu amount, email: None, mandate_id: None, + mandate_connector: None, setup_mandate: None, token: None, address: payments::PaymentAddress { diff --git a/crates/router/src/core/payments/operations/payment_complete_authorize.rs b/crates/router/src/core/payments/operations/payment_complete_authorize.rs index 768b5e09d8..fe5fcbda30 100644 --- a/crates/router/src/core/payments/operations/payment_complete_authorize.rs +++ b/crates/router/src/core/payments/operations/payment_complete_authorize.rs @@ -70,13 +70,14 @@ impl GetTracker, api::PaymentsRequest> for Co "confirm", )?; - let (token, payment_method, setup_mandate) = helpers::get_token_pm_type_mandate_details( - state, - request, - mandate_type.clone(), - merchant_account, - ) - .await?; + let (token, payment_method, setup_mandate, mandate_connector) = + helpers::get_token_pm_type_mandate_details( + state, + request, + mandate_type.clone(), + merchant_account, + ) + .await?; let browser_info = request .browser_info @@ -186,6 +187,7 @@ impl GetTracker, api::PaymentsRequest> for Co amount, email: request.email.clone(), mandate_id: None, + mandate_connector, setup_mandate, token, address: PaymentAddress { diff --git a/crates/router/src/core/payments/operations/payment_confirm.rs b/crates/router/src/core/payments/operations/payment_confirm.rs index 7bd3d44be0..89b48b3633 100644 --- a/crates/router/src/core/payments/operations/payment_confirm.rs +++ b/crates/router/src/core/payments/operations/payment_confirm.rs @@ -98,13 +98,14 @@ impl GetTracker, api::PaymentsRequest> for Pa .map(ForeignInto::foreign_into) .or(payment_intent.setup_future_usage); - let (token, payment_method, setup_mandate) = helpers::get_token_pm_type_mandate_details( - state, - request, - mandate_type.clone(), - merchant_account, - ) - .await?; + let (token, payment_method, setup_mandate, mandate_connector) = + helpers::get_token_pm_type_mandate_details( + state, + request, + mandate_type.clone(), + merchant_account, + ) + .await?; let browser_info = request .browser_info @@ -229,6 +230,7 @@ impl GetTracker, api::PaymentsRequest> for Pa amount, email: request.email.clone(), mandate_id: None, + mandate_connector, setup_mandate, token, address: PaymentAddress { diff --git a/crates/router/src/core/payments/operations/payment_create.rs b/crates/router/src/core/payments/operations/payment_create.rs index 8becaae126..2364294f92 100644 --- a/crates/router/src/core/payments/operations/payment_create.rs +++ b/crates/router/src/core/payments/operations/payment_create.rs @@ -63,7 +63,7 @@ impl GetTracker, api::PaymentsRequest> for Pa .get_payment_intent_id() .change_context(errors::ApiErrorResponse::PaymentNotFound)?; - let (token, payment_method_type, setup_mandate) = + let (token, payment_method_type, setup_mandate, mandate_connector) = helpers::get_token_pm_type_mandate_details( state, request, @@ -233,6 +233,7 @@ impl GetTracker, api::PaymentsRequest> for Pa amount, email: request.email.clone(), mandate_id, + mandate_connector, setup_mandate, token, address: PaymentAddress { diff --git a/crates/router/src/core/payments/operations/payment_method_validate.rs b/crates/router/src/core/payments/operations/payment_method_validate.rs index 81fb8002cd..a77ad54ff5 100644 --- a/crates/router/src/core/payments/operations/payment_method_validate.rs +++ b/crates/router/src/core/payments/operations/payment_method_validate.rs @@ -166,6 +166,7 @@ impl GetTracker, api::VerifyRequest> for Paym amount: api::Amount::Zero, email: None, mandate_id: None, + mandate_connector: None, setup_mandate: request.mandate_data.clone(), token: request.payment_token.clone(), connector_response, diff --git a/crates/router/src/core/payments/operations/payment_session.rs b/crates/router/src/core/payments/operations/payment_session.rs index 2d8aadafb3..61d6bc2447 100644 --- a/crates/router/src/core/payments/operations/payment_session.rs +++ b/crates/router/src/core/payments/operations/payment_session.rs @@ -153,6 +153,7 @@ impl GetTracker, api::PaymentsSessionRequest> amount, email: None, mandate_id: None, + mandate_connector: None, token: None, setup_mandate: None, address: payments::PaymentAddress { diff --git a/crates/router/src/core/payments/operations/payment_start.rs b/crates/router/src/core/payments/operations/payment_start.rs index 89b78525e9..013af7260b 100644 --- a/crates/router/src/core/payments/operations/payment_start.rs +++ b/crates/router/src/core/payments/operations/payment_start.rs @@ -124,6 +124,7 @@ impl GetTracker, api::PaymentsStartRequest> f amount, email: None, mandate_id: None, + mandate_connector: None, connector_response, setup_mandate: None, token: payment_attempt.payment_token.clone(), diff --git a/crates/router/src/core/payments/operations/payment_status.rs b/crates/router/src/core/payments/operations/payment_status.rs index 32aadcd91d..c2ee5efd4d 100644 --- a/crates/router/src/core/payments/operations/payment_status.rs +++ b/crates/router/src/core/payments/operations/payment_status.rs @@ -266,6 +266,7 @@ async fn get_tracker_for_sync< mandate_reference_id: None, } }), + mandate_connector: None, setup_mandate: None, token: None, address: PaymentAddress { diff --git a/crates/router/src/core/payments/operations/payment_update.rs b/crates/router/src/core/payments/operations/payment_update.rs index 472978c197..0d809fd3e5 100644 --- a/crates/router/src/core/payments/operations/payment_update.rs +++ b/crates/router/src/core/payments/operations/payment_update.rs @@ -72,7 +72,7 @@ impl GetTracker, api::PaymentsRequest> for Pa "update", )?; - let (token, payment_method_type, setup_mandate) = + let (token, payment_method_type, setup_mandate, mandate_connector) = helpers::get_token_pm_type_mandate_details( state, request, @@ -287,6 +287,7 @@ impl GetTracker, api::PaymentsRequest> for Pa amount, email: request.email.clone(), mandate_id, + mandate_connector, token, setup_mandate, address: PaymentAddress {