Skip to content

Commit

Permalink
fix(router): avoid considering pre-routing results during `perform_se…
Browse files Browse the repository at this point in the history
…ssion_token_routing` (#5076)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
  • Loading branch information
ShankarSinghC and hyperswitch-bot[bot] authored Jun 21, 2024
1 parent 6a07e10 commit a71fe03
Showing 1 changed file with 55 additions and 51 deletions.
106 changes: 55 additions & 51 deletions crates/router/src/core/payments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3653,57 +3653,61 @@ pub async fn perform_session_token_routing<F>(
where
F: Clone,
{
let routing_info: Option<storage::PaymentRoutingInfo> = 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<api::SessionConnectorData> = 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<storage::PaymentRoutingInfo> = 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<api::SessionConnectorData> = 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,
Expand Down

0 comments on commit a71fe03

Please sign in to comment.