fix: Update browser info on payment confirmation (#52)

This commit is contained in:
Kartikeya Hegde
2022-12-01 14:35:04 +05:30
committed by GitHub
parent 0f22d707ba
commit 5a5ac61d01
2 changed files with 19 additions and 2 deletions

View File

@ -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

View File

@ -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 {