fix(payment_methods): support last used for off session token payments (#5039)

This commit is contained in:
Amisha Prabhat
2024-06-20 19:13:57 +05:30
committed by GitHub
parent 19a605e7c1
commit d98293ae9a
3 changed files with 21 additions and 10 deletions

View File

@ -4058,21 +4058,17 @@ pub async fn set_default_payment_method(
} }
pub async fn update_last_used_at( pub async fn update_last_used_at(
pm_id: &str, payment_method: &diesel_models::PaymentMethod,
state: &routes::SessionState, state: &routes::SessionState,
storage_scheme: MerchantStorageScheme, storage_scheme: MerchantStorageScheme,
) -> errors::RouterResult<()> { ) -> errors::RouterResult<()> {
let update_last_used = storage::PaymentMethodUpdate::LastUsedUpdate { let update_last_used = storage::PaymentMethodUpdate::LastUsedUpdate {
last_used_at: common_utils::date_time::now(), 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 state
.store .store
.update_payment_method(payment_method, update_last_used, storage_scheme) .update_payment_method(payment_method.clone(), update_last_used, storage_scheme)
.await .await
.change_context(errors::ApiErrorResponse::InternalServerError) .change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed to update the last_used_at in db")?; .attach_printable("Failed to update the last_used_at in db")?;

View File

@ -1769,11 +1769,11 @@ pub async fn retrieve_payment_method_with_temporary_token(
pub async fn retrieve_card_with_permanent_token( pub async fn retrieve_card_with_permanent_token(
state: &SessionState, state: &SessionState,
locker_id: &str, locker_id: &str,
payment_method_id: &str, _payment_method_id: &str,
payment_intent: &PaymentIntent, payment_intent: &PaymentIntent,
card_token_data: Option<&CardToken>, card_token_data: Option<&CardToken>,
_merchant_key_store: &domain::MerchantKeyStore, _merchant_key_store: &domain::MerchantKeyStore,
storage_scheme: enums::MerchantStorageScheme, _storage_scheme: enums::MerchantStorageScheme,
) -> RouterResult<api::PaymentMethodData> { ) -> RouterResult<api::PaymentMethodData> {
let customer_id = payment_intent let customer_id = payment_intent
.customer_id .customer_id
@ -1827,7 +1827,7 @@ pub async fn retrieve_card_with_permanent_token(
card_issuing_country: None, card_issuing_country: None,
bank_code: None, bank_code: None,
}; };
cards::update_last_used_at(payment_method_id, state, storage_scheme).await?;
Ok(api::PaymentMethodData::Card(api_card)) Ok(api::PaymentMethodData::Card(api_card))
} }

View File

@ -115,6 +115,21 @@ impl<F: Send + Clone> PostUpdateTracker<F, PaymentData<F>, types::PaymentsAuthor
.and_then(|billing_details| billing_details.address.as_ref()) .and_then(|billing_details| billing_details.address.as_ref())
.and_then(|address| address.get_optional_full_name()); .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( let save_payment_call_future = Box::pin(tokenization::save_payment_method(
state, state,
connector_name.clone(), connector_name.clone(),