mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 17:19:15 +08:00
fix: Update browser info on payment confirmation (#52)
This commit is contained in:
@ -18,11 +18,11 @@ use crate::{
|
|||||||
},
|
},
|
||||||
routes::AppState,
|
routes::AppState,
|
||||||
types::{
|
types::{
|
||||||
api,
|
self, api,
|
||||||
storage::{self, enums},
|
storage::{self, enums},
|
||||||
Connector,
|
Connector,
|
||||||
},
|
},
|
||||||
utils::OptionExt,
|
utils::{self, OptionExt},
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PaymentOperation)]
|
#[derive(Debug, Clone, Copy, PaymentOperation)]
|
||||||
@ -71,6 +71,15 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let browser_info = request
|
||||||
|
.browser_info
|
||||||
|
.clone()
|
||||||
|
.map(|x| utils::Encode::<types::BrowserInformation>::encode_to_value(&x))
|
||||||
|
.transpose()
|
||||||
|
.change_context(errors::ApiErrorResponse::InvalidDataValue {
|
||||||
|
field_name: "browser_info",
|
||||||
|
})?;
|
||||||
|
|
||||||
payment_attempt = db
|
payment_attempt = db
|
||||||
.find_payment_attempt_by_payment_id_merchant_id(&payment_id, merchant_id)
|
.find_payment_attempt_by_payment_id_merchant_id(&payment_id, merchant_id)
|
||||||
.await
|
.await
|
||||||
@ -80,6 +89,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
|
|||||||
payment_attempt.payment_method = payment_method_type.or(payment_attempt.payment_method);
|
payment_attempt.payment_method = payment_method_type.or(payment_attempt.payment_method);
|
||||||
|
|
||||||
payment_attempt.payment_method = payment_method_type.or(payment_attempt.payment_method);
|
payment_attempt.payment_method = payment_method_type.or(payment_attempt.payment_method);
|
||||||
|
payment_attempt.browser_info = browser_info;
|
||||||
currency = payment_attempt.currency.get_required_value("currency")?;
|
currency = payment_attempt.currency.get_required_value("currency")?;
|
||||||
amount = payment_attempt.amount;
|
amount = payment_attempt.amount;
|
||||||
|
|
||||||
@ -163,6 +173,7 @@ impl<F: Clone> UpdateTracker<F, PaymentData<F>, api::PaymentsRequest> for Paymen
|
|||||||
F: 'b + Send,
|
F: 'b + Send,
|
||||||
{
|
{
|
||||||
let payment_method = payment_data.payment_attempt.payment_method;
|
let payment_method = payment_data.payment_attempt.payment_method;
|
||||||
|
let browser_info = payment_data.payment_attempt.browser_info.clone();
|
||||||
|
|
||||||
let (intent_status, attempt_status) = match payment_data.payment_attempt.authentication_type
|
let (intent_status, attempt_status) = match payment_data.payment_attempt.authentication_type
|
||||||
{
|
{
|
||||||
@ -182,6 +193,7 @@ impl<F: Clone> UpdateTracker<F, PaymentData<F>, api::PaymentsRequest> for Paymen
|
|||||||
storage::PaymentAttemptUpdate::ConfirmUpdate {
|
storage::PaymentAttemptUpdate::ConfirmUpdate {
|
||||||
status: attempt_status,
|
status: attempt_status,
|
||||||
payment_method,
|
payment_method,
|
||||||
|
browser_info,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
|||||||
@ -87,6 +87,7 @@ pub enum PaymentAttemptUpdate {
|
|||||||
ConfirmUpdate {
|
ConfirmUpdate {
|
||||||
status: enums::AttemptStatus,
|
status: enums::AttemptStatus,
|
||||||
payment_method: Option<enums::PaymentMethodType>,
|
payment_method: Option<enums::PaymentMethodType>,
|
||||||
|
browser_info: Option<serde_json::Value>,
|
||||||
},
|
},
|
||||||
VoidUpdate {
|
VoidUpdate {
|
||||||
status: enums::AttemptStatus,
|
status: enums::AttemptStatus,
|
||||||
@ -124,6 +125,7 @@ pub(super) struct PaymentAttemptUpdateInternal {
|
|||||||
modified_at: Option<PrimitiveDateTime>,
|
modified_at: Option<PrimitiveDateTime>,
|
||||||
redirect: Option<bool>,
|
redirect: Option<bool>,
|
||||||
mandate_id: Option<String>,
|
mandate_id: Option<String>,
|
||||||
|
browser_info: Option<serde_json::Value>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PaymentAttemptUpdate {
|
impl PaymentAttemptUpdate {
|
||||||
@ -142,6 +144,7 @@ impl PaymentAttemptUpdate {
|
|||||||
payment_method_id: pa_update
|
payment_method_id: pa_update
|
||||||
.payment_method_id
|
.payment_method_id
|
||||||
.unwrap_or(source.payment_method_id),
|
.unwrap_or(source.payment_method_id),
|
||||||
|
browser_info: pa_update.browser_info,
|
||||||
modified_at: common_utils::date_time::now(),
|
modified_at: common_utils::date_time::now(),
|
||||||
..source
|
..source
|
||||||
}
|
}
|
||||||
@ -178,10 +181,12 @@ impl From<PaymentAttemptUpdate> for PaymentAttemptUpdateInternal {
|
|||||||
PaymentAttemptUpdate::ConfirmUpdate {
|
PaymentAttemptUpdate::ConfirmUpdate {
|
||||||
status,
|
status,
|
||||||
payment_method,
|
payment_method,
|
||||||
|
browser_info,
|
||||||
} => Self {
|
} => Self {
|
||||||
status: Some(status),
|
status: Some(status),
|
||||||
payment_method,
|
payment_method,
|
||||||
modified_at: Some(common_utils::date_time::now()),
|
modified_at: Some(common_utils::date_time::now()),
|
||||||
|
browser_info,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
PaymentAttemptUpdate::VoidUpdate {
|
PaymentAttemptUpdate::VoidUpdate {
|
||||||
|
|||||||
Reference in New Issue
Block a user