fix(router): connecconnector name not saved in payment_attempt & connector_response tables (#143)

This commit is contained in:
ItsMeShashank
2022-12-14 15:46:28 +05:30
committed by GitHub
parent 7f0d8e8286
commit 40050031ad
3 changed files with 40 additions and 10 deletions

View File

@ -174,10 +174,13 @@ async fn payment_response_update_tracker<F: Clone, T>(
let (payment_attempt_update, connector_response_update) = match router_data.response.clone() { let (payment_attempt_update, connector_response_update) = match router_data.response.clone() {
Err(err) => ( Err(err) => (
Some(storage::PaymentAttemptUpdate::ErrorUpdate { Some(storage::PaymentAttemptUpdate::ErrorUpdate {
connector: Some(router_data.connector.clone()),
status: storage::enums::AttemptStatus::Failure, status: storage::enums::AttemptStatus::Failure,
error_message: Some(err.message), error_message: Some(err.message),
}), }),
None, Some(storage::ConnectorResponseUpdate::ErrorUpdate {
connector_name: Some(router_data.connector.clone()),
}),
), ),
Ok(payments_response) => match payments_response { Ok(payments_response) => match payments_response {
types::PaymentsResponseData::TransactionResponse { types::PaymentsResponseData::TransactionResponse {
@ -203,6 +206,7 @@ async fn payment_response_update_tracker<F: Clone, T>(
let payment_attempt_update = storage::PaymentAttemptUpdate::ResponseUpdate { let payment_attempt_update = storage::PaymentAttemptUpdate::ResponseUpdate {
status: router_data.status, status: router_data.status,
connector: Some(router_data.connector),
connector_transaction_id: connector_transaction_id.clone(), connector_transaction_id: connector_transaction_id.clone(),
authentication_type: None, authentication_type: None,
payment_method_id: Some(router_data.payment_method_id), payment_method_id: Some(router_data.payment_method_id),

View File

@ -35,12 +35,12 @@ pub struct ConnectorResponse {
pub encoded_data: Option<String>, pub encoded_data: Option<String>,
} }
#[derive(Clone, Debug, Deserialize, AsChangeset, Serialize)] #[derive(Clone, Default, Debug, Deserialize, AsChangeset, Serialize)]
#[diesel(table_name = connector_response)] #[diesel(table_name = connector_response)]
pub struct ConnectorResponseUpdateInternal { pub struct ConnectorResponseUpdateInternal {
pub connector_transaction_id: Option<String>, pub connector_transaction_id: Option<String>,
pub authentication_data: Option<serde_json::Value>, pub authentication_data: Option<serde_json::Value>,
pub modified_at: PrimitiveDateTime, pub modified_at: Option<PrimitiveDateTime>,
pub encoded_data: Option<String>, pub encoded_data: Option<String>,
pub connector_name: Option<String>, pub connector_name: Option<String>,
} }
@ -53,16 +53,30 @@ pub enum ConnectorResponseUpdate {
encoded_data: Option<String>, encoded_data: Option<String>,
connector_name: Option<String>, connector_name: Option<String>,
}, },
ErrorUpdate {
connector_name: Option<String>,
},
} }
impl ConnectorResponseUpdate { impl ConnectorResponseUpdate {
pub fn apply_changeset(self, source: ConnectorResponse) -> ConnectorResponse { pub fn apply_changeset(self, source: ConnectorResponse) -> ConnectorResponse {
let connector_response_update: ConnectorResponseUpdateInternal = self.into(); let connector_response_update: ConnectorResponseUpdateInternal = self.into();
ConnectorResponse { ConnectorResponse {
modified_at: connector_response_update.modified_at, modified_at: connector_response_update
connector_transaction_id: connector_response_update.connector_transaction_id, .modified_at
authentication_data: connector_response_update.authentication_data, .unwrap_or_else(common_utils::date_time::now),
encoded_data: connector_response_update.encoded_data, connector_name: connector_response_update
.connector_name
.or(source.connector_name),
connector_transaction_id: source
.connector_transaction_id
.or(connector_response_update.connector_transaction_id),
authentication_data: connector_response_update
.authentication_data
.or(source.authentication_data),
encoded_data: connector_response_update
.encoded_data
.or(source.encoded_data),
..source ..source
} }
} }
@ -80,9 +94,14 @@ impl From<ConnectorResponseUpdate> for ConnectorResponseUpdateInternal {
connector_transaction_id, connector_transaction_id,
authentication_data, authentication_data,
encoded_data, encoded_data,
modified_at: common_utils::date_time::now(), modified_at: Some(common_utils::date_time::now()),
connector_name, connector_name,
}, },
ConnectorResponseUpdate::ErrorUpdate { connector_name } => Self {
connector_name,
modified_at: Some(common_utils::date_time::now()),
..Self::default()
},
} }
} }
} }

View File

@ -96,6 +96,7 @@ pub enum PaymentAttemptUpdate {
}, },
ResponseUpdate { ResponseUpdate {
status: storage_enums::AttemptStatus, status: storage_enums::AttemptStatus,
connector: Option<String>,
connector_transaction_id: Option<String>, connector_transaction_id: Option<String>,
authentication_type: Option<storage_enums::AuthenticationType>, authentication_type: Option<storage_enums::AuthenticationType>,
payment_method_id: Option<Option<String>>, payment_method_id: Option<Option<String>>,
@ -106,6 +107,7 @@ pub enum PaymentAttemptUpdate {
status: storage_enums::AttemptStatus, status: storage_enums::AttemptStatus,
}, },
ErrorUpdate { ErrorUpdate {
connector: Option<String>,
status: storage_enums::AttemptStatus, status: storage_enums::AttemptStatus,
error_message: Option<String>, error_message: Option<String>,
}, },
@ -137,9 +139,10 @@ impl PaymentAttemptUpdate {
amount: pa_update.amount.unwrap_or(source.amount), amount: pa_update.amount.unwrap_or(source.amount),
currency: pa_update.currency.or(source.currency), currency: pa_update.currency.or(source.currency),
status: pa_update.status.unwrap_or(source.status), status: pa_update.status.unwrap_or(source.status),
connector_transaction_id: pa_update connector: pa_update.connector.or(source.connector),
connector_transaction_id: source
.connector_transaction_id .connector_transaction_id
.or(source.connector_transaction_id), .or(pa_update.connector_transaction_id),
authentication_type: pa_update.authentication_type.or(source.authentication_type), authentication_type: pa_update.authentication_type.or(source.authentication_type),
payment_method: pa_update.payment_method.or(source.payment_method), payment_method: pa_update.payment_method.or(source.payment_method),
error_message: pa_update.error_message.or(source.error_message), error_message: pa_update.error_message.or(source.error_message),
@ -203,6 +206,7 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
}, },
PaymentAttemptUpdate::ResponseUpdate { PaymentAttemptUpdate::ResponseUpdate {
status, status,
connector,
connector_transaction_id, connector_transaction_id,
authentication_type, authentication_type,
payment_method_id, payment_method_id,
@ -210,6 +214,7 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
mandate_id, mandate_id,
} => Self { } => Self {
status: Some(status), status: Some(status),
connector,
connector_transaction_id, connector_transaction_id,
authentication_type, authentication_type,
payment_method_id, payment_method_id,
@ -219,9 +224,11 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
..Default::default() ..Default::default()
}, },
PaymentAttemptUpdate::ErrorUpdate { PaymentAttemptUpdate::ErrorUpdate {
connector,
status, status,
error_message, error_message,
} => Self { } => Self {
connector,
status: Some(status), status: Some(status),
error_message, error_message,
modified_at: Some(common_utils::date_time::now()), modified_at: Some(common_utils::date_time::now()),