refactor: make bank names optional in payment method data (#1483)

This commit is contained in:
Narayan Bhat
2023-06-20 14:47:54 +05:30
committed by GitHub
parent ecf16b0c74
commit 8198559966
8 changed files with 41 additions and 24 deletions

View File

@ -621,10 +621,10 @@ impl From<&PaymentMethodData> for AdditionalPaymentData {
},
PaymentMethodData::BankRedirect(bank_redirect_data) => match bank_redirect_data {
BankRedirectData::Eps { bank_name, .. } => Self::BankRedirect {
bank_name: Some(bank_name.to_owned()),
bank_name: bank_name.to_owned(),
},
BankRedirectData::Ideal { bank_name, .. } => Self::BankRedirect {
bank_name: Some(bank_name.to_owned()),
bank_name: bank_name.to_owned(),
},
_ => Self::BankRedirect { bank_name: None },
},
@ -670,7 +670,7 @@ pub enum BankRedirectData {
/// The hyperswitch bank code for eps
#[schema(value_type = BankNames, example = "triodos_bank")]
bank_name: api_enums::BankNames,
bank_name: Option<api_enums::BankNames>,
},
Giropay {
/// The billing details for bank redirection
@ -691,7 +691,7 @@ pub enum BankRedirectData {
/// The hyperswitch bank code for ideal
#[schema(value_type = BankNames, example = "abn_amro")]
bank_name: api_enums::BankNames,
bank_name: Option<api_enums::BankNames>,
},
Interac {
/// The country for bank payment

View File

@ -212,7 +212,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for AciPaymentsRequest {
PaymentDetails::BankRedirect(Box::new(BankRedirectionPMData {
payment_brand: PaymentBrand::Ideal,
bank_account_country: Some(api_models::enums::CountryAlpha2::NL),
bank_account_bank_name: Some(bank_name.to_string()),
bank_account_bank_name: bank_name
.map(|bank_name| bank_name.to_string()),
bank_account_bic: None,
bank_account_iban: None,
billing_country: None,

View File

@ -539,7 +539,7 @@ pub struct BankRedirectionPMData {
pub struct BankRedirectionWithIssuer<'a> {
#[serde(rename = "type")]
payment_type: PaymentType,
issuer: &'a str,
issuer: Option<&'a str>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
@ -1188,7 +1188,10 @@ impl<'a> TryFrom<&api_models::payments::BankRedirectData> for AdyenPaymentMethod
api_models::payments::BankRedirectData::Eps { bank_name, .. } => Ok(
AdyenPaymentMethod::Eps(Box::new(BankRedirectionWithIssuer {
payment_type: PaymentType::Eps,
issuer: AdyenTestBankNames::try_from(bank_name)?.0,
issuer: bank_name
.map(|bank_name| AdyenTestBankNames::try_from(&bank_name))
.transpose()?
.map(|adyen_bank_name| adyen_bank_name.0),
})),
),
api_models::payments::BankRedirectData::Giropay { .. } => Ok(
@ -1199,7 +1202,10 @@ impl<'a> TryFrom<&api_models::payments::BankRedirectData> for AdyenPaymentMethod
api_models::payments::BankRedirectData::Ideal { bank_name, .. } => Ok(
AdyenPaymentMethod::Ideal(Box::new(BankRedirectionWithIssuer {
payment_type: PaymentType::Ideal,
issuer: AdyenTestBankNames::try_from(bank_name)?.0,
issuer: bank_name
.map(|bank_name| AdyenTestBankNames::try_from(&bank_name))
.transpose()?
.map(|adyen_bank_name| adyen_bank_name.0),
})),
),
api_models::payments::BankRedirectData::OnlineBankingCzechRepublic { issuer } => {

View File

@ -103,7 +103,7 @@ pub enum RecurringType {
#[derive(Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct NexinetsBankRedirects {
bic: NexinetsBIC,
bic: Option<NexinetsBIC>,
}
#[derive(Debug, Serialize)]
@ -578,7 +578,9 @@ fn get_payment_details_and_product(
api_models::payments::BankRedirectData::Ideal { bank_name, .. } => Ok((
Some(NexinetsPaymentDetails::BankRedirects(Box::new(
NexinetsBankRedirects {
bic: NexinetsBIC::try_from(bank_name)?,
bic: bank_name
.map(|bank_name| NexinetsBIC::try_from(&bank_name))
.transpose()?,
},
))),
NexinetsProduct::Ideal,

View File

@ -549,7 +549,7 @@ impl<F>
email: item.request.get_email()?,
country: item.get_billing_country()?,
}),
Some(NuveiBIC::try_from(bank_name)?),
bank_name.map(NuveiBIC::try_from).transpose()?,
)
}
_ => Err(errors::ConnectorError::NotSupported {

View File

@ -216,15 +216,15 @@ pub struct ChargesResponse {
pub enum StripeBankName {
Eps {
#[serde(rename = "payment_method_data[eps][bank]")]
bank_name: StripeBankNames,
bank_name: Option<StripeBankNames>,
},
Ideal {
#[serde(rename = "payment_method_data[ideal][bank]")]
ideal_bank_name: StripeBankNames,
ideal_bank_name: Option<StripeBankNames>,
},
Przelewy24 {
#[serde(rename = "payment_method_data[p24][bank]")]
bank_name: StripeBankNames,
bank_name: Option<StripeBankNames>,
},
}
@ -248,23 +248,25 @@ fn get_bank_name(
StripePaymentMethodType::Eps,
api_models::payments::BankRedirectData::Eps { ref bank_name, .. },
) => Ok(Some(StripeBankName::Eps {
bank_name: StripeBankNames::try_from(bank_name)?,
bank_name: bank_name
.map(|bank_name| StripeBankNames::try_from(&bank_name))
.transpose()?,
})),
(
StripePaymentMethodType::Ideal,
api_models::payments::BankRedirectData::Ideal { bank_name, .. },
) => Ok(Some(StripeBankName::Ideal {
ideal_bank_name: StripeBankNames::try_from(bank_name)?,
ideal_bank_name: bank_name
.map(|bank_name| StripeBankNames::try_from(&bank_name))
.transpose()?,
})),
(
StripePaymentMethodType::Przelewy24,
api_models::payments::BankRedirectData::Przelewy24 { bank_name, .. },
) => Ok(Some(StripeBankName::Przelewy24 {
bank_name: StripeBankNames::try_from(&bank_name.ok_or(
errors::ConnectorError::MissingRequiredField {
field_name: "bank_name",
},
)?)?,
bank_name: bank_name
.map(|bank_name| StripeBankNames::try_from(&bank_name))
.transpose()?,
})),
(
StripePaymentMethodType::Sofort

View File

@ -133,7 +133,7 @@ pub struct Giropay {
#[derive(Debug, Serialize)]
pub struct Ideal {
#[serde(rename = "issuerId")]
pub issuer_id: WorldlineBic,
pub issuer_id: Option<WorldlineBic>,
}
#[derive(Debug, Serialize)]
@ -322,7 +322,9 @@ fn make_bank_redirect_request(
payments::BankRedirectData::Ideal { bank_name, .. } => (
{
PaymentMethodSpecificData::PaymentProduct809SpecificInput(Box::new(Ideal {
issuer_id: WorldlineBic::try_from(bank_name)?,
issuer_id: bank_name
.map(|bank_name| WorldlineBic::try_from(&bank_name))
.transpose()?,
}))
},
809,

View File

@ -464,7 +464,11 @@ impl<F: Send + Clone> ValidateRequest<F, api::PaymentsRequest> for PaymentCreate
request.shipping.is_some(),
request.billing.is_some(),
request.setup_future_usage.is_some(),
&request.customer_id,
&request
.customer
.clone()
.map(|customer| customer.id)
.or(request.customer_id.clone()),
)?;
}