From 73b8988322e3d15f90b2c4ca776d135d23e97710 Mon Sep 17 00:00:00 2001 From: ItsMeShashank Date: Mon, 8 May 2023 14:45:28 +0530 Subject: [PATCH] refactor(router): include payment method type in connector choice for session flow (#1036) --- Cargo.lock | 10 +++++----- crates/router/src/core/payments.rs | 9 +++++++-- .../src/core/payments/operations/payment_session.rs | 10 ++++++++-- crates/router/src/types/api.rs | 8 +++++++- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82cc4015a5..46c98b30cc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2950,7 +2950,7 @@ dependencies = [ [[package]] name = "opentelemetry" version = "0.18.0" -source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" +source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" dependencies = [ "opentelemetry_api", "opentelemetry_sdk", @@ -2959,7 +2959,7 @@ dependencies = [ [[package]] name = "opentelemetry-otlp" version = "0.11.0" -source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" +source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" dependencies = [ "async-trait", "futures", @@ -2976,7 +2976,7 @@ dependencies = [ [[package]] name = "opentelemetry-proto" version = "0.1.0" -source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" +source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" dependencies = [ "futures", "futures-util", @@ -2988,7 +2988,7 @@ dependencies = [ [[package]] name = "opentelemetry_api" version = "0.18.0" -source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" +source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" dependencies = [ "fnv", "futures-channel", @@ -3003,7 +3003,7 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" version = "0.18.0" -source = "git+https://github.com/open-telemetry/opentelemetry-rust?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" +source = "git+https://github.com/open-telemetry/opentelemetry-rust/?rev=44b90202fd744598db8b0ace5b8f0bad7ec45658#44b90202fd744598db8b0ace5b8f0bad7ec45658" dependencies = [ "async-trait", "crossbeam-channel", diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs index 6c41f0ce10..11af64eec8 100644 --- a/crates/router/src/core/payments.rs +++ b/crates/router/src/core/payments.rs @@ -1032,8 +1032,13 @@ where let connector = if should_call_connector(operation, payment_data) { Some(match connector_choice { - api::ConnectorChoice::SessionMultiple(connectors) => { - api::ConnectorCallType::Multiple(connectors) + api::ConnectorChoice::SessionMultiple(session_connectors) => { + api::ConnectorCallType::Multiple( + session_connectors + .into_iter() + .map(|c| c.connector) + .collect(), + ) } api::ConnectorChoice::StraightThrough(straight_through) => connector_selection( diff --git a/crates/router/src/core/payments/operations/payment_session.rs b/crates/router/src/core/payments/operations/payment_session.rs index 37efb5d057..5ad3697aa7 100644 --- a/crates/router/src/core/payments/operations/payment_session.rs +++ b/crates/router/src/core/payments/operations/payment_session.rs @@ -350,7 +350,10 @@ where connector_and_payment_method_type.0.as_str(), api::GetToken::from(connector_and_payment_method_type.1), )?; - connectors_data.push(connector_details); + connectors_data.push(api::SessionConnectorData { + payment_method_type, + connector: connector_details, + }); } } } @@ -364,7 +367,10 @@ where connector_and_payment_method_type.0.as_str(), api::GetToken::from(connector_and_payment_method_type.1), )?; - connectors_data.push(connector_details); + connectors_data.push(api::SessionConnectorData { + payment_method_type: connector_and_payment_method_type.1, + connector: connector_details, + }); } connectors_data }; diff --git a/crates/router/src/types/api.rs b/crates/router/src/types/api.rs index cdb87d673c..790c600cd3 100644 --- a/crates/router/src/types/api.rs +++ b/crates/router/src/types/api.rs @@ -150,8 +150,14 @@ pub struct ConnectorData { pub get_token: GetToken, } +#[derive(Clone)] +pub struct SessionConnectorData { + pub payment_method_type: api_enums::PaymentMethodType, + pub connector: ConnectorData, +} + pub enum ConnectorChoice { - SessionMultiple(Vec), + SessionMultiple(Vec), StraightThrough(serde_json::Value), Decide, }