mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-03 21:37:41 +08:00
refactor(multiple_mca): make primary_business_detail optional and remove default values (#1677)
Co-authored-by: Arun Raj M <jarnura47@gmail.com>
This commit is contained in:
@ -1913,6 +1913,32 @@ pub fn get_connector_label(
|
||||
connector_label
|
||||
}
|
||||
|
||||
/// Check whether the business details are configured in the merchant account
|
||||
pub fn validate_business_details(
|
||||
business_country: api_enums::CountryAlpha2,
|
||||
business_label: &String,
|
||||
merchant_account: &domain::MerchantAccount,
|
||||
) -> RouterResult<()> {
|
||||
let primary_business_details = merchant_account
|
||||
.primary_business_details
|
||||
.clone()
|
||||
.parse_value::<Vec<api_models::admin::PrimaryBusinessDetails>>("PrimaryBusinessDetails")
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("failed to parse primary business details")?;
|
||||
|
||||
primary_business_details
|
||||
.iter()
|
||||
.find(|business_details| {
|
||||
&business_details.business == business_label
|
||||
&& business_details.country == business_country
|
||||
})
|
||||
.ok_or(errors::ApiErrorResponse::PreconditionFailed {
|
||||
message: "business_details are not configured in the merchant account".to_string(),
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Do lazy parsing of primary business details
|
||||
/// If both country and label are passed, no need to parse business details from merchant_account
|
||||
/// If any one is missing, get it from merchant_account
|
||||
@ -1923,42 +1949,29 @@ pub fn get_business_details(
|
||||
business_label: Option<&String>,
|
||||
merchant_account: &domain::MerchantAccount,
|
||||
) -> RouterResult<(api_enums::CountryAlpha2, String)> {
|
||||
let (business_country, business_label) = match business_country.zip(business_label) {
|
||||
let primary_business_details = merchant_account
|
||||
.primary_business_details
|
||||
.clone()
|
||||
.parse_value::<Vec<api_models::admin::PrimaryBusinessDetails>>("PrimaryBusinessDetails")
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("failed to parse primary business details")?;
|
||||
|
||||
match business_country.zip(business_label) {
|
||||
Some((business_country, business_label)) => {
|
||||
(business_country.to_owned(), business_label.to_owned())
|
||||
Ok((business_country.to_owned(), business_label.to_owned()))
|
||||
}
|
||||
None => {
|
||||
// Parse the primary business details from merchant account
|
||||
let primary_business_details: Vec<api_models::admin::PrimaryBusinessDetails> =
|
||||
merchant_account
|
||||
.primary_business_details
|
||||
.clone()
|
||||
.parse_value("PrimaryBusinessDetails")
|
||||
.change_context(errors::ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("failed to parse primary business details")?;
|
||||
|
||||
if primary_business_details.len() == 1 {
|
||||
let primary_business_details = primary_business_details.first().ok_or(
|
||||
errors::ApiErrorResponse::MissingRequiredField {
|
||||
field_name: "primary_business_details",
|
||||
},
|
||||
)?;
|
||||
(
|
||||
business_country.unwrap_or_else(|| primary_business_details.country.to_owned()),
|
||||
business_label
|
||||
.map(ToString::to_string)
|
||||
.unwrap_or_else(|| primary_business_details.business.to_owned()),
|
||||
)
|
||||
} else {
|
||||
// If primary business details are not present or more than one
|
||||
Err(report!(errors::ApiErrorResponse::MissingRequiredField {
|
||||
field_name: "business_country, business_label"
|
||||
}))?
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Ok((business_country, business_label))
|
||||
_ => match primary_business_details.first() {
|
||||
Some(business_details) if primary_business_details.len() == 1 => Ok((
|
||||
business_country.unwrap_or_else(|| business_details.country.to_owned()),
|
||||
business_label
|
||||
.map(ToString::to_string)
|
||||
.unwrap_or_else(|| business_details.business.to_owned()),
|
||||
)),
|
||||
_ => Err(report!(errors::ApiErrorResponse::MissingRequiredField {
|
||||
field_name: "business_country, business_label"
|
||||
})),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
||||
Reference in New Issue
Block a user