mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 18:17:13 +08:00 
			
		
		
		
	feat(router): add mandate connector to payment data (#1392)
This commit is contained in:
		| @ -998,6 +998,7 @@ where | |||||||
|     pub connector_response: storage::ConnectorResponse, |     pub connector_response: storage::ConnectorResponse, | ||||||
|     pub amount: api::Amount, |     pub amount: api::Amount, | ||||||
|     pub mandate_id: Option<api_models::payments::MandateIds>, |     pub mandate_id: Option<api_models::payments::MandateIds>, | ||||||
|  |     pub mandate_connector: Option<String>, | ||||||
|     pub currency: storage_enums::Currency, |     pub currency: storage_enums::Currency, | ||||||
|     pub setup_mandate: Option<api::MandateData>, |     pub setup_mandate: Option<api::MandateData>, | ||||||
|     pub address: PaymentAddress, |     pub address: PaymentAddress, | ||||||
|  | |||||||
| @ -245,6 +245,7 @@ pub async fn get_token_pm_type_mandate_details( | |||||||
|     Option<String>, |     Option<String>, | ||||||
|     Option<storage_enums::PaymentMethod>, |     Option<storage_enums::PaymentMethod>, | ||||||
|     Option<api::MandateData>, |     Option<api::MandateData>, | ||||||
|  |     Option<String>, | ||||||
| )> { | )> { | ||||||
|     match mandate_type { |     match mandate_type { | ||||||
|         Some(api::MandateTxnType::NewMandateTxn) => { |         Some(api::MandateTxnType::NewMandateTxn) => { | ||||||
| @ -256,17 +257,19 @@ pub async fn get_token_pm_type_mandate_details( | |||||||
|                 request.payment_token.to_owned(), |                 request.payment_token.to_owned(), | ||||||
|                 request.payment_method.map(ForeignInto::foreign_into), |                 request.payment_method.map(ForeignInto::foreign_into), | ||||||
|                 Some(setup_mandate), |                 Some(setup_mandate), | ||||||
|  |                 None, | ||||||
|             )) |             )) | ||||||
|         } |         } | ||||||
|         Some(api::MandateTxnType::RecurringMandateTxn) => { |         Some(api::MandateTxnType::RecurringMandateTxn) => { | ||||||
|             let (token_, payment_method_type_) = |             let (token_, payment_method_type_, mandate_connector) = | ||||||
|                 get_token_for_recurring_mandate(state, request, merchant_account).await?; |                 get_token_for_recurring_mandate(state, request, merchant_account).await?; | ||||||
|             Ok((token_, payment_method_type_, None)) |             Ok((token_, payment_method_type_, None, mandate_connector)) | ||||||
|         } |         } | ||||||
|         None => Ok(( |         None => Ok(( | ||||||
|             request.payment_token.to_owned(), |             request.payment_token.to_owned(), | ||||||
|             request.payment_method.map(ForeignInto::foreign_into), |             request.payment_method.map(ForeignInto::foreign_into), | ||||||
|             request.mandate_data.clone(), |             request.mandate_data.clone(), | ||||||
|  |             None, | ||||||
|         )), |         )), | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -275,7 +278,11 @@ pub async fn get_token_for_recurring_mandate( | |||||||
|     state: &AppState, |     state: &AppState, | ||||||
|     req: &api::PaymentsRequest, |     req: &api::PaymentsRequest, | ||||||
|     merchant_account: &domain::MerchantAccount, |     merchant_account: &domain::MerchantAccount, | ||||||
| ) -> RouterResult<(Option<String>, Option<storage_enums::PaymentMethod>)> { | ) -> RouterResult<( | ||||||
|  |     Option<String>, | ||||||
|  |     Option<storage_enums::PaymentMethod>, | ||||||
|  |     Option<String>, | ||||||
|  | )> { | ||||||
|     let db = &*state.store; |     let db = &*state.store; | ||||||
|     let mandate_id = req.mandate_id.clone().get_required_value("mandate_id")?; |     let mandate_id = req.mandate_id.clone().get_required_value("mandate_id")?; | ||||||
|  |  | ||||||
| @ -330,9 +337,17 @@ pub async fn get_token_for_recurring_mandate( | |||||||
|             } |             } | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         Ok((Some(token), Some(payment_method.payment_method))) |         Ok(( | ||||||
|  |             Some(token), | ||||||
|  |             Some(payment_method.payment_method), | ||||||
|  |             Some(mandate.connector), | ||||||
|  |         )) | ||||||
|     } else { |     } else { | ||||||
|         Ok((None, Some(payment_method.payment_method))) |         Ok(( | ||||||
|  |             None, | ||||||
|  |             Some(payment_method.payment_method), | ||||||
|  |             Some(mandate.connector), | ||||||
|  |         )) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -134,6 +134,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsCancelRequest> | |||||||
|                 amount, |                 amount, | ||||||
|                 email: None, |                 email: None, | ||||||
|                 mandate_id: None, |                 mandate_id: None, | ||||||
|  |                 mandate_connector: None, | ||||||
|                 setup_mandate: None, |                 setup_mandate: None, | ||||||
|                 token: None, |                 token: None, | ||||||
|                 address: PaymentAddress { |                 address: PaymentAddress { | ||||||
|  | |||||||
| @ -141,6 +141,7 @@ impl<F: Send + Clone> GetTracker<F, payments::PaymentData<F>, api::PaymentsCaptu | |||||||
|                 amount, |                 amount, | ||||||
|                 email: None, |                 email: None, | ||||||
|                 mandate_id: None, |                 mandate_id: None, | ||||||
|  |                 mandate_connector: None, | ||||||
|                 setup_mandate: None, |                 setup_mandate: None, | ||||||
|                 token: None, |                 token: None, | ||||||
|                 address: payments::PaymentAddress { |                 address: payments::PaymentAddress { | ||||||
|  | |||||||
| @ -70,7 +70,8 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Co | |||||||
|             "confirm", |             "confirm", | ||||||
|         )?; |         )?; | ||||||
|  |  | ||||||
|         let (token, payment_method, setup_mandate) = helpers::get_token_pm_type_mandate_details( |         let (token, payment_method, setup_mandate, mandate_connector) = | ||||||
|  |             helpers::get_token_pm_type_mandate_details( | ||||||
|                 state, |                 state, | ||||||
|                 request, |                 request, | ||||||
|                 mandate_type.clone(), |                 mandate_type.clone(), | ||||||
| @ -186,6 +187,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Co | |||||||
|                 amount, |                 amount, | ||||||
|                 email: request.email.clone(), |                 email: request.email.clone(), | ||||||
|                 mandate_id: None, |                 mandate_id: None, | ||||||
|  |                 mandate_connector, | ||||||
|                 setup_mandate, |                 setup_mandate, | ||||||
|                 token, |                 token, | ||||||
|                 address: PaymentAddress { |                 address: PaymentAddress { | ||||||
|  | |||||||
| @ -98,7 +98,8 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | |||||||
|             .map(ForeignInto::foreign_into) |             .map(ForeignInto::foreign_into) | ||||||
|             .or(payment_intent.setup_future_usage); |             .or(payment_intent.setup_future_usage); | ||||||
|  |  | ||||||
|         let (token, payment_method, setup_mandate) = helpers::get_token_pm_type_mandate_details( |         let (token, payment_method, setup_mandate, mandate_connector) = | ||||||
|  |             helpers::get_token_pm_type_mandate_details( | ||||||
|                 state, |                 state, | ||||||
|                 request, |                 request, | ||||||
|                 mandate_type.clone(), |                 mandate_type.clone(), | ||||||
| @ -229,6 +230,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | |||||||
|                 amount, |                 amount, | ||||||
|                 email: request.email.clone(), |                 email: request.email.clone(), | ||||||
|                 mandate_id: None, |                 mandate_id: None, | ||||||
|  |                 mandate_connector, | ||||||
|                 setup_mandate, |                 setup_mandate, | ||||||
|                 token, |                 token, | ||||||
|                 address: PaymentAddress { |                 address: PaymentAddress { | ||||||
|  | |||||||
| @ -63,7 +63,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | |||||||
|             .get_payment_intent_id() |             .get_payment_intent_id() | ||||||
|             .change_context(errors::ApiErrorResponse::PaymentNotFound)?; |             .change_context(errors::ApiErrorResponse::PaymentNotFound)?; | ||||||
|  |  | ||||||
|         let (token, payment_method_type, setup_mandate) = |         let (token, payment_method_type, setup_mandate, mandate_connector) = | ||||||
|             helpers::get_token_pm_type_mandate_details( |             helpers::get_token_pm_type_mandate_details( | ||||||
|                 state, |                 state, | ||||||
|                 request, |                 request, | ||||||
| @ -233,6 +233,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | |||||||
|                 amount, |                 amount, | ||||||
|                 email: request.email.clone(), |                 email: request.email.clone(), | ||||||
|                 mandate_id, |                 mandate_id, | ||||||
|  |                 mandate_connector, | ||||||
|                 setup_mandate, |                 setup_mandate, | ||||||
|                 token, |                 token, | ||||||
|                 address: PaymentAddress { |                 address: PaymentAddress { | ||||||
|  | |||||||
| @ -166,6 +166,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::VerifyRequest> for Paym | |||||||
|                 amount: api::Amount::Zero, |                 amount: api::Amount::Zero, | ||||||
|                 email: None, |                 email: None, | ||||||
|                 mandate_id: None, |                 mandate_id: None, | ||||||
|  |                 mandate_connector: None, | ||||||
|                 setup_mandate: request.mandate_data.clone(), |                 setup_mandate: request.mandate_data.clone(), | ||||||
|                 token: request.payment_token.clone(), |                 token: request.payment_token.clone(), | ||||||
|                 connector_response, |                 connector_response, | ||||||
|  | |||||||
| @ -153,6 +153,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsSessionRequest> | |||||||
|                 amount, |                 amount, | ||||||
|                 email: None, |                 email: None, | ||||||
|                 mandate_id: None, |                 mandate_id: None, | ||||||
|  |                 mandate_connector: None, | ||||||
|                 token: None, |                 token: None, | ||||||
|                 setup_mandate: None, |                 setup_mandate: None, | ||||||
|                 address: payments::PaymentAddress { |                 address: payments::PaymentAddress { | ||||||
|  | |||||||
| @ -124,6 +124,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsStartRequest> f | |||||||
|                 amount, |                 amount, | ||||||
|                 email: None, |                 email: None, | ||||||
|                 mandate_id: None, |                 mandate_id: None, | ||||||
|  |                 mandate_connector: None, | ||||||
|                 connector_response, |                 connector_response, | ||||||
|                 setup_mandate: None, |                 setup_mandate: None, | ||||||
|                 token: payment_attempt.payment_token.clone(), |                 token: payment_attempt.payment_token.clone(), | ||||||
|  | |||||||
| @ -266,6 +266,7 @@ async fn get_tracker_for_sync< | |||||||
|                     mandate_reference_id: None, |                     mandate_reference_id: None, | ||||||
|                 } |                 } | ||||||
|             }), |             }), | ||||||
|  |             mandate_connector: None, | ||||||
|             setup_mandate: None, |             setup_mandate: None, | ||||||
|             token: None, |             token: None, | ||||||
|             address: PaymentAddress { |             address: PaymentAddress { | ||||||
|  | |||||||
| @ -72,7 +72,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | |||||||
|             "update", |             "update", | ||||||
|         )?; |         )?; | ||||||
|  |  | ||||||
|         let (token, payment_method_type, setup_mandate) = |         let (token, payment_method_type, setup_mandate, mandate_connector) = | ||||||
|             helpers::get_token_pm_type_mandate_details( |             helpers::get_token_pm_type_mandate_details( | ||||||
|                 state, |                 state, | ||||||
|                 request, |                 request, | ||||||
| @ -287,6 +287,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa | |||||||
|                 amount, |                 amount, | ||||||
|                 email: request.email.clone(), |                 email: request.email.clone(), | ||||||
|                 mandate_id, |                 mandate_id, | ||||||
|  |                 mandate_connector, | ||||||
|                 token, |                 token, | ||||||
|                 setup_mandate, |                 setup_mandate, | ||||||
|                 address: PaymentAddress { |                 address: PaymentAddress { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 ItsMeShashank
					ItsMeShashank