diff --git a/crates/router/src/core/payment_methods/cards.rs b/crates/router/src/core/payment_methods/cards.rs index fad3e6d918..046393b2f6 100644 --- a/crates/router/src/core/payment_methods/cards.rs +++ b/crates/router/src/core/payment_methods/cards.rs @@ -4058,21 +4058,17 @@ pub async fn set_default_payment_method( } pub async fn update_last_used_at( - pm_id: &str, + payment_method: &diesel_models::PaymentMethod, state: &routes::SessionState, storage_scheme: MerchantStorageScheme, ) -> errors::RouterResult<()> { let update_last_used = storage::PaymentMethodUpdate::LastUsedUpdate { last_used_at: common_utils::date_time::now(), }; - let payment_method = state - .store - .find_payment_method(pm_id, storage_scheme) - .await - .to_not_found_response(errors::ApiErrorResponse::PaymentMethodNotFound)?; + state .store - .update_payment_method(payment_method, update_last_used, storage_scheme) + .update_payment_method(payment_method.clone(), update_last_used, storage_scheme) .await .change_context(errors::ApiErrorResponse::InternalServerError) .attach_printable("Failed to update the last_used_at in db")?; diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index 93876cdd54..9802860ef9 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -1769,11 +1769,11 @@ pub async fn retrieve_payment_method_with_temporary_token( pub async fn retrieve_card_with_permanent_token( state: &SessionState, locker_id: &str, - payment_method_id: &str, + _payment_method_id: &str, payment_intent: &PaymentIntent, card_token_data: Option<&CardToken>, _merchant_key_store: &domain::MerchantKeyStore, - storage_scheme: enums::MerchantStorageScheme, + _storage_scheme: enums::MerchantStorageScheme, ) -> RouterResult { let customer_id = payment_intent .customer_id @@ -1827,7 +1827,7 @@ pub async fn retrieve_card_with_permanent_token( card_issuing_country: None, bank_code: None, }; - cards::update_last_used_at(payment_method_id, state, storage_scheme).await?; + Ok(api::PaymentMethodData::Card(api_card)) } diff --git a/crates/router/src/core/payments/operations/payment_response.rs b/crates/router/src/core/payments/operations/payment_response.rs index 4b529d2b39..b7a1ffb7c5 100644 --- a/crates/router/src/core/payments/operations/payment_response.rs +++ b/crates/router/src/core/payments/operations/payment_response.rs @@ -115,6 +115,21 @@ impl PostUpdateTracker, types::PaymentsAuthor .and_then(|billing_details| billing_details.address.as_ref()) .and_then(|address| address.get_optional_full_name()); + if let Some(payment_method_info) = &payment_data.payment_method_info { + if payment_data.payment_intent.off_session.is_none() && resp.response.is_ok() { + payment_methods::cards::update_last_used_at( + payment_method_info, + state, + merchant_account.storage_scheme, + ) + .await + .map_err(|e| { + logger::error!("Failed to update last used at: {:?}", e); + }) + .ok(); + } + }; + let save_payment_call_future = Box::pin(tokenization::save_payment_method( state, connector_name.clone(),