mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 00:49:42 +08:00
fix(payment_methods): support last used for off session token payments (#5039)
This commit is contained in:
@ -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")?;
|
||||
|
||||
@ -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<api::PaymentMethodData> {
|
||||
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))
|
||||
}
|
||||
|
||||
|
||||
@ -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(|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(),
|
||||
|
||||
Reference in New Issue
Block a user