mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 00:49:42 +08:00
refactor: [Noon] add new field max_amount to mandate request (#3481)
Co-authored-by: swangi-kumari <swangi.12015941@lpu.in> Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -738,9 +738,25 @@ impl ForeignTryFrom<(Option<MandateData>, Option<String>)> for Option<payments::
|
|||||||
metadata: None,
|
metadata: None,
|
||||||
},
|
},
|
||||||
)),
|
)),
|
||||||
StripeMandateType::MultiUse => Some(payments::MandateType::MultiUse(None)),
|
StripeMandateType::MultiUse => Some(payments::MandateType::MultiUse(Some(
|
||||||
|
payments::MandateAmountData {
|
||||||
|
amount: mandate.amount.unwrap_or_default(),
|
||||||
|
currency,
|
||||||
|
start_date: mandate.start_date,
|
||||||
|
end_date: mandate.end_date,
|
||||||
|
metadata: None,
|
||||||
},
|
},
|
||||||
None => Some(api_models::payments::MandateType::MultiUse(None)),
|
))),
|
||||||
|
},
|
||||||
|
None => Some(api_models::payments::MandateType::MultiUse(Some(
|
||||||
|
payments::MandateAmountData {
|
||||||
|
amount: mandate.amount.unwrap_or_default(),
|
||||||
|
currency,
|
||||||
|
start_date: mandate.start_date,
|
||||||
|
end_date: mandate.end_date,
|
||||||
|
metadata: None,
|
||||||
|
},
|
||||||
|
))),
|
||||||
},
|
},
|
||||||
customer_acceptance: Some(payments::CustomerAcceptance {
|
customer_acceptance: Some(payments::CustomerAcceptance {
|
||||||
acceptance_type: payments::AcceptanceType::Online,
|
acceptance_type: payments::AcceptanceType::Online,
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
use common_utils::pii;
|
use common_utils::pii;
|
||||||
use error_stack::ResultExt;
|
use error_stack::{IntoReport, ResultExt};
|
||||||
use masking::{PeekInterface, Secret};
|
use masking::{PeekInterface, Secret};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@ -8,7 +8,7 @@ use crate::{
|
|||||||
self as conn_utils, CardData, PaymentsAuthorizeRequestData, RevokeMandateRequestData,
|
self as conn_utils, CardData, PaymentsAuthorizeRequestData, RevokeMandateRequestData,
|
||||||
RouterData, WalletData,
|
RouterData, WalletData,
|
||||||
},
|
},
|
||||||
core::errors,
|
core::{errors, mandate::MandateBehaviour},
|
||||||
services,
|
services,
|
||||||
types::{self, api, storage::enums, transformers::ForeignFrom, ErrorResponse},
|
types::{self, api, storage::enums, transformers::ForeignFrom, ErrorResponse},
|
||||||
utils,
|
utils,
|
||||||
@ -37,7 +37,7 @@ pub struct NoonSubscriptionData {
|
|||||||
subscription_type: NoonSubscriptionType,
|
subscription_type: NoonSubscriptionType,
|
||||||
//Short description about the subscription.
|
//Short description about the subscription.
|
||||||
name: String,
|
name: String,
|
||||||
max_amount: Option<String>,
|
max_amount: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
@ -131,7 +131,7 @@ pub struct NoonSubscription {
|
|||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct NoonCard {
|
pub struct NoonCard {
|
||||||
name_on_card: Secret<String>,
|
name_on_card: Option<Secret<String>>,
|
||||||
number_plain: cards::CardNumber,
|
number_plain: cards::CardNumber,
|
||||||
expiry_month: Secret<String>,
|
expiry_month: Secret<String>,
|
||||||
expiry_year: Secret<String>,
|
expiry_year: Secret<String>,
|
||||||
@ -198,7 +198,7 @@ pub struct NoonPayPal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
#[serde(tag = "type", content = "data")]
|
#[serde(tag = "type", content = "data", rename_all = "UPPERCASE")]
|
||||||
pub enum NoonPaymentData {
|
pub enum NoonPaymentData {
|
||||||
Card(NoonCard),
|
Card(NoonCard),
|
||||||
Subscription(NoonSubscription),
|
Subscription(NoonSubscription),
|
||||||
@ -241,10 +241,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for NoonPaymentsRequest {
|
|||||||
_ => (
|
_ => (
|
||||||
match item.request.payment_method_data.clone() {
|
match item.request.payment_method_data.clone() {
|
||||||
api::PaymentMethodData::Card(req_card) => Ok(NoonPaymentData::Card(NoonCard {
|
api::PaymentMethodData::Card(req_card) => Ok(NoonPaymentData::Card(NoonCard {
|
||||||
name_on_card: req_card
|
name_on_card: req_card.card_holder_name.clone(),
|
||||||
.card_holder_name
|
|
||||||
.clone()
|
|
||||||
.unwrap_or(Secret::new("".to_string())),
|
|
||||||
number_plain: req_card.card_number.clone(),
|
number_plain: req_card.card_number.clone(),
|
||||||
expiry_month: req_card.card_exp_month.clone(),
|
expiry_month: req_card.card_exp_month.clone(),
|
||||||
expiry_year: req_card.get_expiry_year_4_digit(),
|
expiry_year: req_card.get_expiry_year_4_digit(),
|
||||||
@ -335,7 +332,11 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for NoonPaymentsRequest {
|
|||||||
}
|
}
|
||||||
}?,
|
}?,
|
||||||
Some(item.request.currency),
|
Some(item.request.currency),
|
||||||
item.request.order_category.clone(),
|
Some(item.request.order_category.clone().ok_or(
|
||||||
|
errors::ConnectorError::MissingRequiredField {
|
||||||
|
field_name: "order_category",
|
||||||
|
},
|
||||||
|
)?),
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -369,32 +370,40 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for NoonPaymentsRequest {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
let (subscription, tokenize_c_c) =
|
let subscription: Option<NoonSubscriptionData> = item
|
||||||
match item.request.setup_future_usage.is_some().then_some((
|
.request
|
||||||
|
.get_setup_mandate_details()
|
||||||
|
.map(|mandate_data| {
|
||||||
|
let max_amount = match &mandate_data.mandate_type {
|
||||||
|
Some(data_models::mandates::MandateDataType::SingleUse(mandate))
|
||||||
|
| Some(data_models::mandates::MandateDataType::MultiUse(Some(mandate))) => {
|
||||||
|
conn_utils::to_currency_base_unit(mandate.amount, mandate.currency)
|
||||||
|
}
|
||||||
|
Some(data_models::mandates::MandateDataType::MultiUse(None)) => {
|
||||||
|
Err(errors::ConnectorError::MissingRequiredField {
|
||||||
|
field_name:
|
||||||
|
"setup_future_usage.mandate_data.mandate_type.multi_use.amount",
|
||||||
|
})
|
||||||
|
.into_report()
|
||||||
|
}
|
||||||
|
None => Err(errors::ConnectorError::MissingRequiredField {
|
||||||
|
field_name: "setup_future_usage.mandate_data.mandate_type",
|
||||||
|
})
|
||||||
|
.into_report(),
|
||||||
|
}?;
|
||||||
|
|
||||||
|
Ok::<NoonSubscriptionData, error_stack::Report<errors::ConnectorError>>(
|
||||||
NoonSubscriptionData {
|
NoonSubscriptionData {
|
||||||
subscription_type: NoonSubscriptionType::Unscheduled,
|
subscription_type: NoonSubscriptionType::Unscheduled,
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
max_amount: item
|
max_amount,
|
||||||
.request
|
|
||||||
.setup_mandate_details
|
|
||||||
.clone()
|
|
||||||
.and_then(|mandate_details| match mandate_details.mandate_type {
|
|
||||||
Some(data_models::mandates::MandateDataType::SingleUse(mandate))
|
|
||||||
| Some(data_models::mandates::MandateDataType::MultiUse(Some(
|
|
||||||
mandate,
|
|
||||||
))) => Some(
|
|
||||||
conn_utils::to_currency_base_unit(mandate.amount, mandate.currency)
|
|
||||||
.ok(),
|
|
||||||
),
|
|
||||||
_ => None,
|
|
||||||
})
|
|
||||||
.flatten(),
|
|
||||||
},
|
},
|
||||||
true,
|
)
|
||||||
)) {
|
})
|
||||||
Some((a, b)) => (Some(a), Some(b)),
|
.transpose()?;
|
||||||
None => (None, None),
|
|
||||||
};
|
let tokenize_c_c = subscription.is_some().then_some(true);
|
||||||
|
|
||||||
let order = NoonOrder {
|
let order = NoonOrder {
|
||||||
amount: conn_utils::to_currency_base_unit(item.request.amount, item.request.currency)?,
|
amount: conn_utils::to_currency_base_unit(item.request.amount, item.request.currency)?,
|
||||||
currency,
|
currency,
|
||||||
|
|||||||
Reference in New Issue
Block a user