refactor(Tokenization): remove ConnectorCallType from tokenization call (#862)

This commit is contained in:
Sangamesh Kulkarni
2023-04-13 14:14:42 +05:30
committed by GitHub
parent acab7671b0
commit 0d047e08f9
2 changed files with 58 additions and 92 deletions

View File

@ -1302,7 +1302,7 @@ pub struct GpayMetaData {
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct GpaySessionTokenData { pub struct GpaySessionTokenData {
#[serde(rename = "gpay")] #[serde(rename = "google_pay")]
pub data: GpayMetaData, pub data: GpayMetaData,
} }

View File

@ -101,14 +101,9 @@ where
) )
.await?; .await?;
let (payment_data, tokenization_action) = get_connector_tokenization_action( let (payment_data, tokenization_action) =
state, get_connector_tokenization_action(state, &operation, payment_data, &validate_result)
&operation, .await?;
connector.as_ref(),
payment_data,
&validate_result,
)
.await?;
let (operation, mut payment_data) = operation let (operation, mut payment_data) = operation
.to_update_tracker()? .to_update_tracker()?
@ -584,15 +579,6 @@ where
Ok(payment_data) Ok(payment_data)
} }
fn get_connector_from_connector_type(
connector_details: Option<&api::ConnectorCallType>,
) -> Option<String> {
connector_details.and_then(|connector_call_type| match connector_call_type {
api::ConnectorCallType::Single(data) => Some(data.connector_name.to_string()),
_ => None,
})
}
fn is_payment_method_tokenization_enabled_for_connector( fn is_payment_method_tokenization_enabled_for_connector(
state: &AppState, state: &AppState,
connector_name: &str, connector_name: &str,
@ -656,98 +642,78 @@ pub enum TokenizationAction {
pub async fn get_connector_tokenization_action<F, Req>( pub async fn get_connector_tokenization_action<F, Req>(
state: &AppState, state: &AppState,
operation: &BoxedOperation<'_, F, Req>, operation: &BoxedOperation<'_, F, Req>,
connector_details: Option<&api::ConnectorCallType>,
mut payment_data: PaymentData<F>, mut payment_data: PaymentData<F>,
validate_result: &operations::ValidateResult<'_>, validate_result: &operations::ValidateResult<'_>,
) -> RouterResult<(PaymentData<F>, TokenizationAction)> ) -> RouterResult<(PaymentData<F>, TokenizationAction)>
where where
F: Send + Clone, F: Send + Clone,
{ {
let payment_data_and_tokenization_action = let connector = payment_data.payment_attempt.connector.to_owned();
match get_connector_from_connector_type(connector_details) {
Some(connector) => {
if is_operation_confirm(&operation) {
let payment_method = &payment_data
.payment_attempt
.payment_method
.get_required_value("payment_method")?;
let is_connector_tokenization_enabled = let payment_data_and_tokenization_action = match connector {
is_payment_method_tokenization_enabled_for_connector( Some(connector) if is_operation_confirm(&operation) => {
state, let payment_method = &payment_data
&connector, .payment_attempt
payment_method, .payment_method
)?; .get_required_value("payment_method")?;
let payment_method_action = decide_payment_method_tokenize_action( let is_connector_tokenization_enabled =
state, is_payment_method_tokenization_enabled_for_connector(
&connector, state,
payment_method, &connector,
payment_data.token.as_ref(), payment_method,
is_connector_tokenization_enabled, )?;
)
.await;
let connector_tokenization_action = match payment_method_action { let payment_method_action = decide_payment_method_tokenize_action(
TokenizationAction::TokenizeInRouter => { state,
let (_operation, payment_method_data) = operation &connector,
.to_domain()? payment_method,
.make_pm_data( payment_data.token.as_ref(),
state, is_connector_tokenization_enabled,
&mut payment_data, )
validate_result.storage_scheme, .await;
)
.await?;
payment_data.payment_method_data = payment_method_data; let connector_tokenization_action = match payment_method_action {
TokenizationAction::SkipConnectorTokenization TokenizationAction::TokenizeInRouter => {
}
TokenizationAction::TokenizeInConnector => {
TokenizationAction::TokenizeInConnector
}
TokenizationAction::TokenizeInConnectorAndRouter => {
let (_operation, payment_method_data) = operation
.to_domain()?
.make_pm_data(
state,
&mut payment_data,
validate_result.storage_scheme,
)
.await?;
payment_data.payment_method_data = payment_method_data;
TokenizationAction::TokenizeInConnector
}
TokenizationAction::ConnectorToken(token) => {
payment_data.pm_token = Some(token);
TokenizationAction::SkipConnectorTokenization
}
TokenizationAction::SkipConnectorTokenization => {
TokenizationAction::SkipConnectorTokenization
}
};
(payment_data, connector_tokenization_action)
} else {
let (_operation, payment_method_data) = operation let (_operation, payment_method_data) = operation
.to_domain()? .to_domain()?
.make_pm_data(state, &mut payment_data, validate_result.storage_scheme) .make_pm_data(state, &mut payment_data, validate_result.storage_scheme)
.await?; .await?;
payment_data.payment_method_data = payment_method_data; payment_data.payment_method_data = payment_method_data;
(payment_data, TokenizationAction::SkipConnectorTokenization) TokenizationAction::SkipConnectorTokenization
} }
}
None => {
let (_operation, payment_method_data) = operation
.to_domain()?
.make_pm_data(state, &mut payment_data, validate_result.storage_scheme)
.await?;
payment_data.payment_method_data = payment_method_data; TokenizationAction::TokenizeInConnector => TokenizationAction::TokenizeInConnector,
(payment_data, TokenizationAction::SkipConnectorTokenization) TokenizationAction::TokenizeInConnectorAndRouter => {
} let (_operation, payment_method_data) = operation
}; .to_domain()?
.make_pm_data(state, &mut payment_data, validate_result.storage_scheme)
.await?;
payment_data.payment_method_data = payment_method_data;
TokenizationAction::TokenizeInConnector
}
TokenizationAction::ConnectorToken(token) => {
payment_data.pm_token = Some(token);
TokenizationAction::SkipConnectorTokenization
}
TokenizationAction::SkipConnectorTokenization => {
TokenizationAction::SkipConnectorTokenization
}
};
(payment_data, connector_tokenization_action)
}
_ => {
let (_operation, payment_method_data) = operation
.to_domain()?
.make_pm_data(state, &mut payment_data, validate_result.storage_scheme)
.await?;
payment_data.payment_method_data = payment_method_data;
(payment_data, TokenizationAction::SkipConnectorTokenization)
}
};
Ok(payment_data_and_tokenization_action) Ok(payment_data_and_tokenization_action)
} }