refactor(dynamic_routing): perform db operations for dynamic_routing_stats table only when payments are in terminal state (#6900)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Prajjwal Kumar
2025-01-15 16:00:42 +05:30
committed by GitHub
parent bbf884460c
commit 1ec91e54e2
2 changed files with 17 additions and 1 deletions

View File

@ -1304,6 +1304,20 @@ pub enum IntentStatus {
} }
impl IntentStatus { impl IntentStatus {
/// Indicates whether the payment intent is in terminal state or not
pub fn is_in_terminal_state(self) -> bool {
match self {
Self::Succeeded | Self::Failed | Self::Cancelled | Self::PartiallyCaptured => true,
Self::Processing
| Self::RequiresCustomerAction
| Self::RequiresMerchantAction
| Self::RequiresPaymentMethod
| Self::RequiresConfirmation
| Self::RequiresCapture
| Self::PartiallyCapturedAndCapturable => false,
}
}
/// Indicates whether the syncing with the connector should be allowed or not /// Indicates whether the syncing with the connector should be allowed or not
pub fn should_force_sync_with_connector(self) -> bool { pub fn should_force_sync_with_connector(self) -> bool {
match self { match self {

View File

@ -1971,7 +1971,9 @@ async fn payment_response_update_tracker<F: Clone, T: types::Capturable>(
#[cfg(all(feature = "v1", feature = "dynamic_routing"))] #[cfg(all(feature = "v1", feature = "dynamic_routing"))]
{ {
if business_profile.dynamic_routing_algorithm.is_some() { if payment_intent.status.is_in_terminal_state()
&& business_profile.dynamic_routing_algorithm.is_some()
{
let state = state.clone(); let state = state.clone();
let business_profile = business_profile.clone(); let business_profile = business_profile.clone();
let payment_attempt = payment_attempt.clone(); let payment_attempt = payment_attempt.clone();