mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 09:07:09 +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(
|
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")?;
|
||||||
|
|||||||
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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(),
|
||||||
|
|||||||
Reference in New Issue
Block a user