mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-31 01:57:45 +08:00
refactor(payment_methods): refactor merchant payment method list for wallets (#7866)
This commit is contained in:
@ -1922,7 +1922,10 @@ pub enum PaymentMethodType {
|
||||
|
||||
impl PaymentMethodType {
|
||||
pub fn should_check_for_customer_saved_payment_method_type(self) -> bool {
|
||||
matches!(self, Self::ApplePay | Self::GooglePay | Self::SamsungPay)
|
||||
matches!(
|
||||
self,
|
||||
Self::ApplePay | Self::GooglePay | Self::SamsungPay | Self::Paypal | Self::Klarna
|
||||
)
|
||||
}
|
||||
pub fn to_display_name(&self) -> String {
|
||||
let display_name = match self {
|
||||
|
||||
@ -3459,61 +3459,6 @@ pub async fn list_payment_methods(
|
||||
response
|
||||
);
|
||||
|
||||
// Filter out wallet payment method from mca if customer has already saved it
|
||||
customer
|
||||
.as_ref()
|
||||
.async_map(|customer| async {
|
||||
let wallet_pm_exists = response
|
||||
.iter()
|
||||
.any(|mca| mca.payment_method == enums::PaymentMethod::Wallet);
|
||||
if wallet_pm_exists {
|
||||
match db
|
||||
.find_payment_method_by_customer_id_merchant_id_status(
|
||||
&((&state).into()),
|
||||
&key_store,
|
||||
&customer.customer_id,
|
||||
merchant_account.get_id(),
|
||||
common_enums::PaymentMethodStatus::Active,
|
||||
None,
|
||||
merchant_account.storage_scheme,
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(customer_payment_methods) => {
|
||||
let customer_wallet_pm = customer_payment_methods
|
||||
.iter()
|
||||
.filter(|cust_pm| {
|
||||
cust_pm.get_payment_method_type() == Some(enums::PaymentMethod::Wallet)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
response.retain(|mca| {
|
||||
!(mca.payment_method == enums::PaymentMethod::Wallet
|
||||
&& customer_wallet_pm.iter().any(|cust_pm| {
|
||||
cust_pm.get_payment_method_subtype() == Some(mca.payment_method_type)
|
||||
}))
|
||||
});
|
||||
|
||||
logger::debug!("Filtered out wallet payment method from mca since customer has already saved it");
|
||||
Ok(())
|
||||
}
|
||||
Err(error) => {
|
||||
if error.current_context().is_db_not_found() {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(error)
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("failed to find payment methods for a customer")
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
})
|
||||
.await
|
||||
.transpose()?;
|
||||
|
||||
let mut pmt_to_auth_connector: HashMap<
|
||||
enums::PaymentMethod,
|
||||
HashMap<enums::PaymentMethodType, String>,
|
||||
|
||||
Reference in New Issue
Block a user