From a71fe033e7de75171d140506ff4d51a362c185f4 Mon Sep 17 00:00:00 2001 From: Shankar Singh C <83439957+ShankarSinghC@users.noreply.github.com> Date: Fri, 21 Jun 2024 22:39:22 +0530 Subject: [PATCH] fix(router): avoid considering pre-routing results during `perform_session_token_routing` (#5076) Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> --- crates/router/src/core/payments.rs | 106 +++++++++++++++-------------- 1 file changed, 55 insertions(+), 51 deletions(-) diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs index a8fe21796b5c..fd052163c4bb 100644 --- a/crates/router/src/core/payments.rs +++ b/crates/router/src/core/payments.rs @@ -3653,57 +3653,61 @@ pub async fn perform_session_token_routing( where F: Clone, { - let routing_info: Option = payment_data - .payment_attempt - .straight_through_algorithm - .clone() - .map(|val| val.parse_value("PaymentRoutingInfo")) - .transpose() - .change_context(errors::ApiErrorResponse::InternalServerError) - .attach_printable("invalid payment routing info format found in payment attempt")?; - - if let Some(storage::PaymentRoutingInfo { - pre_routing_results: Some(pre_routing_results), - .. - }) = routing_info - { - let mut payment_methods: rustc_hash::FxHashMap< - (String, enums::PaymentMethodType), - api::SessionConnectorData, - > = rustc_hash::FxHashMap::from_iter(connectors.iter().map(|c| { - ( - ( - c.connector.connector_name.to_string(), - c.payment_method_type, - ), - c.clone(), - ) - })); - - let mut final_list: Vec = Vec::new(); - for (routed_pm_type, pre_routing_choice) in pre_routing_results.into_iter() { - let routable_connector_list = match pre_routing_choice { - storage::PreRoutingConnectorChoice::Single(routable_connector) => { - vec![routable_connector.clone()] - } - storage::PreRoutingConnectorChoice::Multiple(routable_connector_list) => { - routable_connector_list.clone() - } - }; - for routable_connector in routable_connector_list { - if let Some(session_connector_data) = - payment_methods.remove(&(routable_connector.to_string(), routed_pm_type)) - { - final_list.push(session_connector_data); - break; - } - } - } - - if !final_list.is_empty() { - return Ok(final_list); - } - } + // Commenting out this code as `list_payment_method_api` and `perform_session_token_routing` + // will happen in parallel the behaviour of the session call differ based on filters in + // list_payment_method_api + + // let routing_info: Option = payment_data + // .payment_attempt + // .straight_through_algorithm + // .clone() + // .map(|val| val.parse_value("PaymentRoutingInfo")) + // .transpose() + // .change_context(errors::ApiErrorResponse::InternalServerError) + // .attach_printable("invalid payment routing info format found in payment attempt")?; + + // if let Some(storage::PaymentRoutingInfo { + // pre_routing_results: Some(pre_routing_results), + // .. + // }) = routing_info + // { + // let mut payment_methods: rustc_hash::FxHashMap< + // (String, enums::PaymentMethodType), + // api::SessionConnectorData, + // > = rustc_hash::FxHashMap::from_iter(connectors.iter().map(|c| { + // ( + // ( + // c.connector.connector_name.to_string(), + // c.payment_method_type, + // ), + // c.clone(), + // ) + // })); + + // let mut final_list: Vec = Vec::new(); + // for (routed_pm_type, pre_routing_choice) in pre_routing_results.into_iter() { + // let routable_connector_list = match pre_routing_choice { + // storage::PreRoutingConnectorChoice::Single(routable_connector) => { + // vec![routable_connector.clone()] + // } + // storage::PreRoutingConnectorChoice::Multiple(routable_connector_list) => { + // routable_connector_list.clone() + // } + // }; + // for routable_connector in routable_connector_list { + // if let Some(session_connector_data) = + // payment_methods.remove(&(routable_connector.to_string(), routed_pm_type)) + // { + // final_list.push(session_connector_data); + // break; + // } + // } + // } + + // if !final_list.is_empty() { + // return Ok(final_list); + // } + // } let routing_enabled_pms = HashSet::from([ enums::PaymentMethodType::GooglePay,