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

View File

@ -212,7 +212,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for AciPaymentsRequest {
PaymentDetails::BankRedirect(Box::new(BankRedirectionPMData { PaymentDetails::BankRedirect(Box::new(BankRedirectionPMData {
payment_brand: PaymentBrand::Ideal, payment_brand: PaymentBrand::Ideal,
bank_account_country: Some(api_models::enums::CountryAlpha2::NL), 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_bic: None,
bank_account_iban: None, bank_account_iban: None,
billing_country: None, billing_country: None,

View File

@ -539,7 +539,7 @@ pub struct BankRedirectionPMData {
pub struct BankRedirectionWithIssuer<'a> { pub struct BankRedirectionWithIssuer<'a> {
#[serde(rename = "type")] #[serde(rename = "type")]
payment_type: PaymentType, payment_type: PaymentType,
issuer: &'a str, issuer: Option<&'a str>,
} }
#[derive(Debug, Clone, Serialize, Deserialize)] #[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( api_models::payments::BankRedirectData::Eps { bank_name, .. } => Ok(
AdyenPaymentMethod::Eps(Box::new(BankRedirectionWithIssuer { AdyenPaymentMethod::Eps(Box::new(BankRedirectionWithIssuer {
payment_type: PaymentType::Eps, 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( 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( api_models::payments::BankRedirectData::Ideal { bank_name, .. } => Ok(
AdyenPaymentMethod::Ideal(Box::new(BankRedirectionWithIssuer { AdyenPaymentMethod::Ideal(Box::new(BankRedirectionWithIssuer {
payment_type: PaymentType::Ideal, 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 } => { api_models::payments::BankRedirectData::OnlineBankingCzechRepublic { issuer } => {

View File

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

View File

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

View File

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

View File

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

View File

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