refactor(core): use previously used connector (#431)

This commit is contained in:
Narayan Bhat
2023-01-20 12:40:23 +05:30
committed by GitHub
parent c1de463cde
commit 4b471c7ddf
10 changed files with 37 additions and 13 deletions

View File

@ -100,7 +100,12 @@ where
let connector_details = operation
.to_domain()?
.get_connector(&merchant_account, state, &req)
.get_connector(
&merchant_account,
state,
&req,
payment_data.payment_attempt.connector.as_ref(),
)
.await?;
let connector_details = route_connector(

View File

@ -596,13 +596,13 @@ pub async fn get_customer_from_details(
pub async fn get_connector_default(
state: &AppState,
request_connector: Option<api_enums::Connector>,
request_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
let connectors = &state.conf.connectors;
if let Some(connector) = request_connector {
if let Some(connector_name) = request_connector {
let connector_data = api::ConnectorData::get_connector_by_name(
connectors,
&connector.to_string(),
connector_name,
api::GetToken::Connector,
)?;
Ok(api::ConnectorCallType::Single(connector_data))

View File

@ -125,6 +125,7 @@ pub trait Domain<F: Clone, R>: Send + Sync {
merchant_account: &storage::MerchantAccount,
state: &AppState,
request: &R,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse>;
}
@ -192,8 +193,9 @@ where
_merchant_account: &storage::MerchantAccount,
state: &AppState,
_request: &api::PaymentsRetrieveRequest,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, None).await
helpers::get_connector_default(state, previously_used_connector).await
}
#[instrument(skip_all)]
@ -258,8 +260,9 @@ where
_merchant_account: &storage::MerchantAccount,
state: &AppState,
_request: &api::PaymentsCaptureRequest,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, None).await
helpers::get_connector_default(state, previously_used_connector).await
}
}
@ -312,7 +315,8 @@ where
_merchant_account: &storage::MerchantAccount,
state: &AppState,
_request: &api::PaymentsCancelRequest,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, None).await
helpers::get_connector_default(state, previously_used_connector).await
}
}

View File

@ -253,8 +253,16 @@ impl<F: Clone + Send> Domain<F, api::PaymentsRequest> for PaymentConfirm {
_merchant_account: &storage::MerchantAccount,
state: &AppState,
request: &api::PaymentsRequest,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, request.connector).await
// Use a new connector in the confirm call or use the same one which was passed when
// creating the payment or if none is passed then use the routing algorithm
let request_connector = request.connector.map(|connector| connector.to_string());
helpers::get_connector_default(
state,
request_connector.as_ref().or(previously_used_connector),
)
.await
}
}

View File

@ -257,8 +257,10 @@ impl<F: Clone + Send> Domain<F, api::PaymentsRequest> for PaymentCreate {
_merchant_account: &storage::MerchantAccount,
state: &AppState,
request: &api::PaymentsRequest,
_previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, request.connector).await
let request_connector = request.connector.map(|connector| connector.to_string());
helpers::get_connector_default(state, request_connector.as_ref()).await
}
}

View File

@ -254,8 +254,9 @@ where
_merchant_account: &storage::MerchantAccount,
state: &AppState,
_request: &api::VerifyRequest,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, None).await
helpers::get_connector_default(state, previously_used_connector).await
}
}

View File

@ -269,6 +269,7 @@ where
merchant_account: &storage::MerchantAccount,
state: &AppState,
request: &api::PaymentsSessionRequest,
_previously_used_connector: Option<&String>,
) -> RouterResult<api::ConnectorCallType> {
let connectors = &state.conf.connectors;
let db = &state.store;

View File

@ -249,7 +249,8 @@ where
_merchant_account: &storage::MerchantAccount,
state: &AppState,
_request: &api::PaymentsStartRequest,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, None).await
helpers::get_connector_default(state, previously_used_connector).await
}
}

View File

@ -101,8 +101,9 @@ impl<F: Clone + Send> Domain<F, api::PaymentsRequest> for PaymentStatus {
_merchant_account: &storage::MerchantAccount,
state: &AppState,
_request: &api::PaymentsRequest,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, None).await
helpers::get_connector_default(state, previously_used_connector).await
}
}

View File

@ -273,8 +273,9 @@ impl<F: Clone + Send> Domain<F, api::PaymentsRequest> for PaymentUpdate {
_merchant_account: &storage::MerchantAccount,
state: &AppState,
_request: &api::PaymentsRequest,
previously_used_connector: Option<&String>,
) -> CustomResult<api::ConnectorCallType, errors::ApiErrorResponse> {
helpers::get_connector_default(state, None).await
helpers::get_connector_default(state, previously_used_connector).await
}
}