mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 04:04:55 +08:00
fix(core): Add column mandate_data for storing the details of a mandate in PaymentAttempt (#3606)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -2000,17 +2000,8 @@ pub async fn list_payment_methods(
|
||||
merchant_name: merchant_account.merchant_name,
|
||||
payment_type,
|
||||
payment_methods: payment_method_responses,
|
||||
mandate_payment: payment_attempt
|
||||
.and_then(|inner| inner.mandate_details)
|
||||
.and_then(|man_type_details| match man_type_details {
|
||||
data_models::mandates::MandateTypeDetails::MandateType(mandate_type) => {
|
||||
Some(mandate_type)
|
||||
}
|
||||
data_models::mandates::MandateTypeDetails::MandateDetails(mandate_details) => {
|
||||
mandate_details.mandate_type
|
||||
}
|
||||
})
|
||||
.map(|d| match d {
|
||||
mandate_payment: payment_attempt.and_then(|inner| inner.mandate_details).map(
|
||||
|d| match d {
|
||||
data_models::mandates::MandateDataType::SingleUse(i) => {
|
||||
api::MandateType::SingleUse(api::MandateAmountData {
|
||||
amount: i.amount,
|
||||
@ -2032,7 +2023,8 @@ pub async fn list_payment_methods(
|
||||
data_models::mandates::MandateDataType::MultiUse(None) => {
|
||||
api::MandateType::MultiUse(None)
|
||||
}
|
||||
}),
|
||||
},
|
||||
),
|
||||
show_surcharge_breakup_screen: merchant_surcharge_configs
|
||||
.show_surcharge_breakup_screen
|
||||
.unwrap_or_default(),
|
||||
@ -2242,28 +2234,20 @@ pub async fn filter_payment_methods(
|
||||
})?;
|
||||
let filter7 = payment_attempt
|
||||
.and_then(|attempt| attempt.mandate_details.as_ref())
|
||||
.map(|mandate_details| {
|
||||
let (mandate_type_present, update_mandate_id_present) =
|
||||
match mandate_details {
|
||||
data_models::mandates::MandateTypeDetails::MandateType(_) => {
|
||||
(true, false)
|
||||
}
|
||||
data_models::mandates::MandateTypeDetails::MandateDetails(
|
||||
mand_details,
|
||||
) => (
|
||||
mand_details.mandate_type.is_some(),
|
||||
mand_details.update_mandate_id.is_some(),
|
||||
),
|
||||
};
|
||||
.map(|_mandate_details| {
|
||||
filter_pm_based_on_supported_payments_for_mandate(
|
||||
supported_payment_methods_for_mandate,
|
||||
&payment_method,
|
||||
&payment_method_object.payment_method_type,
|
||||
connector_variant,
|
||||
)
|
||||
})
|
||||
.unwrap_or(true);
|
||||
|
||||
if mandate_type_present {
|
||||
filter_pm_based_on_supported_payments_for_mandate(
|
||||
supported_payment_methods_for_mandate,
|
||||
&payment_method,
|
||||
&payment_method_object.payment_method_type,
|
||||
connector_variant,
|
||||
)
|
||||
} else if update_mandate_id_present {
|
||||
let filter8 = payment_attempt
|
||||
.and_then(|attempt| attempt.mandate_data.as_ref())
|
||||
.map(|mandate_detail| {
|
||||
if mandate_detail.update_mandate_id.is_some() {
|
||||
filter_pm_based_on_update_mandate_support_for_connector(
|
||||
supported_payment_methods_for_update_mandate,
|
||||
&payment_method,
|
||||
@ -2284,7 +2268,15 @@ pub async fn filter_payment_methods(
|
||||
payment_method,
|
||||
);
|
||||
|
||||
if filter && filter2 && filter3 && filter4 && filter5 && filter6 && filter7 {
|
||||
if filter
|
||||
&& filter2
|
||||
&& filter3
|
||||
&& filter4
|
||||
&& filter5
|
||||
&& filter6
|
||||
&& filter7
|
||||
&& filter8
|
||||
{
|
||||
resp.push(response_pm_type);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3201,6 +3201,7 @@ impl AttemptType {
|
||||
unified_code: None,
|
||||
unified_message: None,
|
||||
net_amount: old_payment_attempt.amount,
|
||||
mandate_data: old_payment_attempt.mandate_data,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -441,28 +441,11 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
|
||||
|
||||
// The operation merges mandate data from both request and payment_attempt
|
||||
setup_mandate = setup_mandate.map(|mut sm| {
|
||||
sm.mandate_type = payment_attempt
|
||||
.mandate_details
|
||||
.clone()
|
||||
.and_then(|mandate| match mandate {
|
||||
data_models::mandates::MandateTypeDetails::MandateType(mandate_type) => {
|
||||
Some(mandate_type)
|
||||
}
|
||||
data_models::mandates::MandateTypeDetails::MandateDetails(mandate_details) => {
|
||||
mandate_details.mandate_type
|
||||
}
|
||||
})
|
||||
.or(sm.mandate_type);
|
||||
sm.mandate_type = payment_attempt.mandate_details.clone().or(sm.mandate_type);
|
||||
sm.update_mandate_id = payment_attempt
|
||||
.mandate_details
|
||||
.mandate_data
|
||||
.clone()
|
||||
.and_then(|mandate| match mandate {
|
||||
data_models::mandates::MandateTypeDetails::MandateType(_) => None,
|
||||
data_models::mandates::MandateTypeDetails::MandateDetails(update_id) => {
|
||||
Some(update_id.update_mandate_id)
|
||||
}
|
||||
})
|
||||
.flatten()
|
||||
.and_then(|mandate| mandate.update_mandate_id)
|
||||
.or(sm.update_mandate_id);
|
||||
sm
|
||||
});
|
||||
|
||||
@ -4,7 +4,7 @@ use api_models::enums::FrmSuggestion;
|
||||
use async_trait::async_trait;
|
||||
use common_utils::ext_traits::{AsyncExt, Encode, ValueExt};
|
||||
use data_models::{
|
||||
mandates::{MandateData, MandateDetails, MandateTypeDetails},
|
||||
mandates::{MandateData, MandateDetails},
|
||||
payments::payment_attempt::PaymentAttempt,
|
||||
};
|
||||
use diesel_models::ephemeral_key;
|
||||
@ -733,27 +733,17 @@ impl PaymentCreate {
|
||||
Err(errors::ApiErrorResponse::InvalidRequestData {message:"Only one field out of 'mandate_type' and 'update_mandate_id' was expected, found both".to_string()})?
|
||||
}
|
||||
|
||||
let mandate_details = if request.mandate_data.is_none() {
|
||||
None
|
||||
} else if let Some(update_id) = request
|
||||
let mandate_data = if let Some(update_id) = request
|
||||
.mandate_data
|
||||
.as_ref()
|
||||
.and_then(|inner| inner.update_mandate_id.clone())
|
||||
{
|
||||
let mandate_data = MandateDetails {
|
||||
let mandate_details = MandateDetails {
|
||||
update_mandate_id: Some(update_id),
|
||||
mandate_type: None,
|
||||
};
|
||||
Some(MandateTypeDetails::MandateDetails(mandate_data))
|
||||
Some(mandate_details)
|
||||
} else {
|
||||
let mandate_data = MandateDetails {
|
||||
update_mandate_id: None,
|
||||
mandate_type: request
|
||||
.mandate_data
|
||||
.as_ref()
|
||||
.and_then(|inner| inner.mandate_type.clone().map(Into::into)),
|
||||
};
|
||||
Some(MandateTypeDetails::MandateDetails(mandate_data))
|
||||
None
|
||||
};
|
||||
|
||||
Ok((
|
||||
@ -782,7 +772,11 @@ impl PaymentCreate {
|
||||
business_sub_label: request.business_sub_label.clone(),
|
||||
surcharge_amount,
|
||||
tax_amount,
|
||||
mandate_details,
|
||||
mandate_details: request
|
||||
.mandate_data
|
||||
.as_ref()
|
||||
.and_then(|inner| inner.mandate_type.clone().map(Into::into)),
|
||||
mandate_data,
|
||||
..storage::PaymentAttemptNew::default()
|
||||
},
|
||||
additional_pm_data,
|
||||
|
||||
Reference in New Issue
Block a user