mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 18:17:13 +08:00 
			
		
		
		
	refactor(webhooks): check event type not supported before checking for profile_id (#3543)
This commit is contained in:
		| @ -326,14 +326,26 @@ pub async fn find_payment_intent_from_mandate_id_type( | ||||
|     .to_not_found_response(errors::ApiErrorResponse::PaymentNotFound) | ||||
| } | ||||
|  | ||||
| pub async fn get_profile_id_using_object_reference_id( | ||||
| pub async fn get_mca_from_object_reference_id( | ||||
|     db: &dyn StorageInterface, | ||||
|     object_reference_id: webhooks::ObjectReferenceId, | ||||
|     merchant_account: &domain::MerchantAccount, | ||||
|     connector_name: &str, | ||||
| ) -> CustomResult<String, errors::ApiErrorResponse> { | ||||
|     key_store: &domain::MerchantKeyStore, | ||||
| ) -> CustomResult<domain::MerchantConnectorAccount, errors::ApiErrorResponse> { | ||||
|     let merchant_id = merchant_account.merchant_id.clone(); | ||||
|  | ||||
|     match merchant_account.default_profile.as_ref() { | ||||
|         Some(profile_id) => Ok(profile_id.clone()), | ||||
|         Some(profile_id) => db | ||||
|             .find_merchant_connector_account_by_profile_id_connector_name( | ||||
|                 profile_id, | ||||
|                 connector_name, | ||||
|                 key_store, | ||||
|             ) | ||||
|             .await | ||||
|             .to_not_found_response(errors::ApiErrorResponse::MerchantConnectorAccountNotFound { | ||||
|                 id: format!("profile_id {profile_id} and connector_name {connector_name}"), | ||||
|             }), | ||||
|         _ => { | ||||
|             let payment_intent = match object_reference_id { | ||||
|                 webhooks::ObjectReferenceId::PaymentId(payment_id_type) => { | ||||
| @ -355,19 +367,56 @@ pub async fn get_profile_id_using_object_reference_id( | ||||
|                 } | ||||
|             }; | ||||
|  | ||||
|             let profile_id = utils::get_profile_id_from_business_details( | ||||
|                 payment_intent.business_country, | ||||
|                 payment_intent.business_label.as_ref(), | ||||
|                 merchant_account, | ||||
|                 payment_intent.profile_id.as_ref(), | ||||
|                 db, | ||||
|                 false, | ||||
|             ) | ||||
|             .await | ||||
|             .change_context(errors::ApiErrorResponse::InternalServerError) | ||||
|             .attach_printable("profile_id is not set in payment_intent")?; | ||||
|             let payment_attempt = db | ||||
|                 .find_payment_attempt_by_attempt_id_merchant_id( | ||||
|                     &payment_intent.active_attempt.get_id(), | ||||
|                     &merchant_id, | ||||
|                     merchant_account.storage_scheme, | ||||
|                 ) | ||||
|                 .await | ||||
|                 .to_not_found_response(errors::ApiErrorResponse::PaymentNotFound)?; | ||||
|  | ||||
|             Ok(profile_id) | ||||
|             match payment_attempt.merchant_connector_id { | ||||
|                 Some(merchant_connector_id) => db | ||||
|                     .find_by_merchant_connector_account_merchant_id_merchant_connector_id( | ||||
|                         &merchant_id, | ||||
|                         &merchant_connector_id, | ||||
|                         key_store, | ||||
|                     ) | ||||
|                     .await | ||||
|                     .to_not_found_response( | ||||
|                         errors::ApiErrorResponse::MerchantConnectorAccountNotFound { | ||||
|                             id: merchant_connector_id, | ||||
|                         }, | ||||
|                     ), | ||||
|                 None => { | ||||
|                     let profile_id = utils::get_profile_id_from_business_details( | ||||
|                         payment_intent.business_country, | ||||
|                         payment_intent.business_label.as_ref(), | ||||
|                         merchant_account, | ||||
|                         payment_intent.profile_id.as_ref(), | ||||
|                         db, | ||||
|                         false, | ||||
|                     ) | ||||
|                     .await | ||||
|                     .change_context(errors::ApiErrorResponse::InternalServerError) | ||||
|                     .attach_printable("profile_id is not set in payment_intent")?; | ||||
|  | ||||
|                     db.find_merchant_connector_account_by_profile_id_connector_name( | ||||
|                         &profile_id, | ||||
|                         connector_name, | ||||
|                         key_store, | ||||
|                     ) | ||||
|                     .await | ||||
|                     .to_not_found_response( | ||||
|                         errors::ApiErrorResponse::MerchantConnectorAccountNotFound { | ||||
|                             id: format!( | ||||
|                                 "profile_id {profile_id} and connector_name {connector_name}" | ||||
|                             ), | ||||
|                         }, | ||||
|                     ) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Narayan Bhat
					Narayan Bhat