mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-27 19:46:48 +08:00
fix(router): add routing cache invalidation on payment connector update (#3132)
This commit is contained in:
@ -10,7 +10,7 @@ rust-version.workspace = true
|
|||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["connector_choice_bcompat"]
|
default = ["connector_choice_bcompat", "connector_choice_mca_id"]
|
||||||
release = ["connector_choice_bcompat", "connector_choice_mca_id"]
|
release = ["connector_choice_bcompat", "connector_choice_mca_id"]
|
||||||
connector_choice_bcompat = ["api_models/connector_choice_bcompat"]
|
connector_choice_bcompat = ["api_models/connector_choice_bcompat"]
|
||||||
connector_choice_mca_id = ["api_models/connector_choice_mca_id", "euclid/connector_choice_mca_id", "kgraph_utils/connector_choice_mca_id"]
|
connector_choice_mca_id = ["api_models/connector_choice_mca_id", "euclid/connector_choice_mca_id", "kgraph_utils/connector_choice_mca_id"]
|
||||||
|
|||||||
@ -776,14 +776,13 @@ pub async fn create_payment_connector(
|
|||||||
let pm_auth_connector =
|
let pm_auth_connector =
|
||||||
api_enums::convert_pm_auth_connector(req.connector_name.to_string().as_str());
|
api_enums::convert_pm_auth_connector(req.connector_name.to_string().as_str());
|
||||||
|
|
||||||
let is_unroutable_connector = if pm_auth_connector.is_some() {
|
if pm_auth_connector.is_some() {
|
||||||
if req.connector_type != api_enums::ConnectorType::PaymentMethodAuth {
|
if req.connector_type != api_enums::ConnectorType::PaymentMethodAuth {
|
||||||
return Err(errors::ApiErrorResponse::InvalidRequestData {
|
return Err(errors::ApiErrorResponse::InvalidRequestData {
|
||||||
message: "Invalid connector type given".to_string(),
|
message: "Invalid connector type given".to_string(),
|
||||||
})
|
})
|
||||||
.into_report();
|
.into_report();
|
||||||
}
|
}
|
||||||
true
|
|
||||||
} else {
|
} else {
|
||||||
let routable_connector_option = req
|
let routable_connector_option = req
|
||||||
.connector_name
|
.connector_name
|
||||||
@ -794,7 +793,6 @@ pub async fn create_payment_connector(
|
|||||||
message: "Invalid connector name given".to_string(),
|
message: "Invalid connector name given".to_string(),
|
||||||
})?;
|
})?;
|
||||||
routable_connector = Some(routable_connector_option);
|
routable_connector = Some(routable_connector_option);
|
||||||
false
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// If connector label is not passed in the request, generate one
|
// If connector label is not passed in the request, generate one
|
||||||
@ -863,31 +861,13 @@ pub async fn create_payment_connector(
|
|||||||
|
|
||||||
// The purpose of this merchant account update is just to update the
|
// The purpose of this merchant account update is just to update the
|
||||||
// merchant account `modified_at` field for KGraph cache invalidation
|
// merchant account `modified_at` field for KGraph cache invalidation
|
||||||
let merchant_account_update = storage::MerchantAccountUpdate::Update {
|
|
||||||
merchant_name: None,
|
|
||||||
merchant_details: None,
|
|
||||||
return_url: None,
|
|
||||||
webhook_details: None,
|
|
||||||
sub_merchants_enabled: None,
|
|
||||||
parent_merchant_id: None,
|
|
||||||
enable_payment_response_hash: None,
|
|
||||||
locker_id: None,
|
|
||||||
payment_response_hash_key: None,
|
|
||||||
primary_business_details: None,
|
|
||||||
metadata: None,
|
|
||||||
publishable_key: None,
|
|
||||||
redirect_to_merchant_with_http_post: None,
|
|
||||||
routing_algorithm: None,
|
|
||||||
intent_fulfillment_time: None,
|
|
||||||
frm_routing_algorithm: None,
|
|
||||||
payout_routing_algorithm: None,
|
|
||||||
default_profile: None,
|
|
||||||
payment_link_config: None,
|
|
||||||
};
|
|
||||||
|
|
||||||
state
|
state
|
||||||
.store
|
.store
|
||||||
.update_specific_fields_in_merchant(merchant_id, merchant_account_update, &key_store)
|
.update_specific_fields_in_merchant(
|
||||||
|
merchant_id,
|
||||||
|
storage::MerchantAccountUpdate::ModifiedAtUpdate,
|
||||||
|
&key_store,
|
||||||
|
)
|
||||||
.await
|
.await
|
||||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||||
.attach_printable("error updating the merchant account when creating payment connector")?;
|
.attach_printable("error updating the merchant account when creating payment connector")?;
|
||||||
@ -1018,40 +998,6 @@ pub async fn create_payment_connector(
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
if !is_unroutable_connector {
|
|
||||||
if let Some(routable_connector_val) = routable_connector {
|
|
||||||
let choice = routing_types::RoutableConnectorChoice {
|
|
||||||
#[cfg(feature = "backwards_compatibility")]
|
|
||||||
choice_kind: routing_types::RoutableChoiceKind::FullStruct,
|
|
||||||
connector: routable_connector_val,
|
|
||||||
#[cfg(feature = "connector_choice_mca_id")]
|
|
||||||
merchant_connector_id: Some(mca.merchant_connector_id.clone()),
|
|
||||||
#[cfg(not(feature = "connector_choice_mca_id"))]
|
|
||||||
sub_label: req.business_sub_label.clone(),
|
|
||||||
};
|
|
||||||
|
|
||||||
if !default_routing_config.contains(&choice) {
|
|
||||||
default_routing_config.push(choice.clone());
|
|
||||||
routing_helpers::update_merchant_default_config(
|
|
||||||
&*state.clone().store,
|
|
||||||
merchant_id,
|
|
||||||
default_routing_config,
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
|
|
||||||
if !default_routing_config_for_profile.contains(&choice) {
|
|
||||||
default_routing_config_for_profile.push(choice);
|
|
||||||
routing_helpers::update_merchant_default_config(
|
|
||||||
&*state.store,
|
|
||||||
&profile_id,
|
|
||||||
default_routing_config_for_profile,
|
|
||||||
)
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let mca_response = mca.try_into()?;
|
let mca_response = mca.try_into()?;
|
||||||
Ok(service_api::ApplicationResponse::Json(mca_response))
|
Ok(service_api::ApplicationResponse::Json(mca_response))
|
||||||
}
|
}
|
||||||
@ -1240,6 +1186,17 @@ pub async fn update_payment_connector(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The purpose of this merchant account update is just to update the
|
||||||
|
// merchant account `modified_at` field for KGraph cache invalidation
|
||||||
|
db.update_specific_fields_in_merchant(
|
||||||
|
merchant_id,
|
||||||
|
storage::MerchantAccountUpdate::ModifiedAtUpdate,
|
||||||
|
&key_store,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||||
|
.attach_printable("error updating the merchant account when updating payment connector")?;
|
||||||
|
|
||||||
let payment_connector = storage::MerchantConnectorAccountUpdate::Update {
|
let payment_connector = storage::MerchantConnectorAccountUpdate::Update {
|
||||||
merchant_id: None,
|
merchant_id: None,
|
||||||
connector_type: Some(req.connector_type),
|
connector_type: Some(req.connector_type),
|
||||||
|
|||||||
@ -79,6 +79,7 @@ pub enum MerchantAccountUpdate {
|
|||||||
recon_status: diesel_models::enums::ReconStatus,
|
recon_status: diesel_models::enums::ReconStatus,
|
||||||
},
|
},
|
||||||
UnsetDefaultProfile,
|
UnsetDefaultProfile,
|
||||||
|
ModifiedAtUpdate,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<MerchantAccountUpdate> for MerchantAccountUpdateInternal {
|
impl From<MerchantAccountUpdate> for MerchantAccountUpdateInternal {
|
||||||
@ -140,6 +141,10 @@ impl From<MerchantAccountUpdate> for MerchantAccountUpdateInternal {
|
|||||||
default_profile: Some(None),
|
default_profile: Some(None),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
|
MerchantAccountUpdate::ModifiedAtUpdate => Self {
|
||||||
|
modified_at: Some(date_time::now()),
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user