Skip to content

Commit

Permalink
refactor: update payment_method_type during payments_confirm
Browse files Browse the repository at this point in the history
  • Loading branch information
kashif-m committed Nov 10, 2024
1 parent fd38e62 commit 7c9ff20
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 35 deletions.
33 changes: 33 additions & 0 deletions crates/router/src/core/payments/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6102,3 +6102,36 @@ pub fn validate_platform_fees_for_marketplace(
}
}
}

pub fn get_optional_card_type_from_additional_payment_method_data(
payment_method_type: Option<enums::PaymentMethodType>,
additional_pm_data: Option<&api_models::payments::AdditionalPaymentData>,
) -> Option<enums::PaymentMethodType> {
additional_pm_data
.and_then(|pm_data| {
if let api_models::payments::AdditionalPaymentData::Card(card_info) = pm_data {
card_info.card_type.as_ref().and_then(|card_type_str| {
api_models::enums::PaymentMethodType::from_str(&card_type_str.to_lowercase()).map_err(|err| {
logger::error!(
"Err - {:?}\nInvalid card_type value found in BIN DB - {:?}",
err,
card_type_str,
);
}).ok()
})
} else {
None
}
})
.map_or(payment_method_type, |card_type_in_bin_store| {
if let Some(card_type_in_req) = payment_method_type {
if card_type_in_req != card_type_in_bin_store {
logger::info!(
"Mismatch in card_type\nAPI request - {}; BIN lookup - {}\nOverriding with {}",
card_type_in_req, card_type_in_bin_store, card_type_in_bin_store,
);
}
}
Some(card_type_in_bin_store)
})
}
18 changes: 12 additions & 6 deletions crates/router/src/core/payments/operations/payment_confirm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -576,12 +576,6 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
payment_method_info,
} = mandate_details;

payment_attempt.payment_method_type = payment_method_type
.or(payment_attempt.payment_method_type)
.or(payment_method_info
.as_ref()
.and_then(|pm_info| pm_info.payment_method_type));

let token = token.or_else(|| payment_attempt.payment_token.clone());

helpers::validate_pm_or_token_given(
Expand Down Expand Up @@ -650,6 +644,18 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa

payment_attempt.payment_method = payment_method.or(payment_attempt.payment_method);

let payment_method_type =
helpers::get_optional_card_type_from_additional_payment_method_data(
payment_method_type,
additional_pm_data.as_ref(),
);

payment_attempt.payment_method_type = payment_method_type
.or(payment_attempt.payment_method_type)
.or(payment_method_info
.as_ref()
.and_then(|pm_info| pm_info.payment_method_type));

// The operation merges mandate data from both request and payment_attempt
let setup_mandate = mandate_data.map(|mut sm| {
sm.mandate_type = payment_attempt.mandate_details.clone().or(sm.mandate_type);
Expand Down
34 changes: 5 additions & 29 deletions crates/router/src/core/payments/operations/payment_create.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use std::{marker::PhantomData, str::FromStr};
use std::marker::PhantomData;

use api_models::{
enums::FrmSuggestion, mandates::RecurringDetails, payment_methods::PaymentMethodsData,
Expand Down Expand Up @@ -1196,34 +1196,10 @@ impl PaymentCreate {
};

let payment_method_type =
additional_pm_data
.as_ref()
.and_then(|pm_data| {
if let api_models::payments::AdditionalPaymentData::Card(card_info) = pm_data {
card_info.card_type.as_ref().and_then(|card_type_str| {
enums::PaymentMethodType::from_str(&card_type_str.to_lowercase()).map_err(|err| {
logger::error!(
"Err - {:?}\nInvalid card_type value found in BIN DB - {:?}",
err,
card_type_str,
);
}).ok()
})
} else {
None
}
})
.map_or(payment_method_type, |card_type_in_bin_store| {
if let Some(card_type_in_req) = payment_method_type {
if card_type_in_req != card_type_in_bin_store {
logger::info!(
"Mismatch in card_type\nAPI request - {}; BIN lookup - {}\nOverriding with {}",
card_type_in_req, card_type_in_bin_store, card_type_in_bin_store,
);
}
}
Some(card_type_in_bin_store)
});
helpers::get_optional_card_type_from_additional_payment_method_data(
payment_method_type,
additional_pm_data.as_ref(),
);

Ok((
storage::PaymentAttemptNew {
Expand Down

0 comments on commit 7c9ff20

Please sign in to comment.