refactor(connector_customer): incorrect mapping of connector customer (#1275)

This commit is contained in:
Narayan Bhat
2023-05-31 20:16:39 +05:30
committed by GitHub
parent 1261791d9f
commit ebdfde75ec
5 changed files with 95 additions and 84 deletions

View File

@ -122,7 +122,6 @@ where
let updated_customer = call_create_connector_customer_if_required(
state,
&payment_data.payment_attempt.connector.clone(),
&customer,
&merchant_account,
&mut payment_data,
@ -639,7 +638,6 @@ where
pub async fn call_create_connector_customer_if_required<F, Req>(
state: &AppState,
connector_name: &Option<String>,
customer: &Option<domain::Customer>,
merchant_account: &domain::MerchantAccount,
payment_data: &mut PaymentData<F>,
@ -658,17 +656,32 @@ where
// To perform router related operation for PaymentResponse
PaymentResponse: Operation<F, Req>,
{
let connector_name = payment_data.payment_attempt.connector.clone();
match connector_name {
Some(connector_name) => {
let connector = api::ConnectorData::get_connector_by_name(
&state.conf.connectors,
connector_name,
&connector_name,
api::GetToken::Connector,
)?;
let (is_eligible, connector_customer_id, connector_customer_map) =
customers::should_call_connector_create_customer(state, &connector, customer)?;
if is_eligible {
let connector_label = helpers::get_connector_label(
payment_data.payment_intent.business_country,
&payment_data.payment_intent.business_label,
payment_data.payment_attempt.business_sub_label.as_ref(),
&connector_name,
);
let (should_call_connector, existing_connector_customer_id) =
customers::should_call_connector_create_customer(
state,
&connector,
customer,
&connector_label,
);
if should_call_connector {
// Create customer at connector and update the customer table to store this data
let router_data = payment_data
.construct_router_data(
@ -679,15 +692,23 @@ where
)
.await?;
let (connector_customer, customer_update) = router_data
.create_connector_customer(state, &connector, connector_customer_map)
let connector_customer_id = router_data
.create_connector_customer(state, &connector)
.await?;
payment_data.connector_customer_id = connector_customer;
let customer_update = customers::update_connector_customer_in_customers(
&connector_label,
customer.as_ref(),
&connector_customer_id,
)
.await;
payment_data.connector_customer_id = connector_customer_id;
Ok(customer_update)
} else {
// Customer already created in previous calls use the same value, no need to update
payment_data.connector_customer_id = connector_customer_id;
payment_data.connector_customer_id =
existing_connector_customer_id.map(ToOwned::to_owned);
Ok(None)
}
}