mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 12:15:40 +08:00
fix: null fields in payments respose (#2745)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
@ -215,35 +215,6 @@ pub struct PaymentIntentUpdateInternal {
|
|||||||
pub surcharge_applicable: Option<bool>,
|
pub surcharge_applicable: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PaymentIntentUpdate {
|
|
||||||
pub fn apply_changeset(self, source: PaymentIntent) -> PaymentIntent {
|
|
||||||
let internal_update: PaymentIntentUpdateInternal = self.into();
|
|
||||||
PaymentIntent {
|
|
||||||
amount: internal_update.amount.unwrap_or(source.amount),
|
|
||||||
currency: internal_update.currency.or(source.currency),
|
|
||||||
status: internal_update.status.unwrap_or(source.status),
|
|
||||||
amount_captured: internal_update.amount_captured.or(source.amount_captured),
|
|
||||||
customer_id: internal_update.customer_id.or(source.customer_id),
|
|
||||||
return_url: internal_update.return_url.or(source.return_url),
|
|
||||||
setup_future_usage: internal_update
|
|
||||||
.setup_future_usage
|
|
||||||
.or(source.setup_future_usage),
|
|
||||||
off_session: internal_update.off_session.or(source.off_session),
|
|
||||||
metadata: internal_update.metadata.or(source.metadata),
|
|
||||||
billing_address_id: internal_update
|
|
||||||
.billing_address_id
|
|
||||||
.or(source.billing_address_id),
|
|
||||||
shipping_address_id: internal_update
|
|
||||||
.shipping_address_id
|
|
||||||
.or(source.shipping_address_id),
|
|
||||||
modified_at: common_utils::date_time::now(),
|
|
||||||
order_details: internal_update.order_details.or(source.order_details),
|
|
||||||
updated_by: internal_update.updated_by,
|
|
||||||
..source
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<PaymentIntentUpdate> for PaymentIntentUpdateInternal {
|
impl From<PaymentIntentUpdate> for PaymentIntentUpdateInternal {
|
||||||
fn from(payment_intent_update: PaymentIntentUpdate) -> Self {
|
fn from(payment_intent_update: PaymentIntentUpdate) -> Self {
|
||||||
match payment_intent_update {
|
match payment_intent_update {
|
||||||
|
|||||||
@ -11,6 +11,7 @@ use diesel_models::enums as storage_enums;
|
|||||||
use error_stack::{IntoReport, ResultExt};
|
use error_stack::{IntoReport, ResultExt};
|
||||||
|
|
||||||
use super::MockDb;
|
use super::MockDb;
|
||||||
|
use crate::DataModelExt;
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl PaymentIntentInterface for MockDb {
|
impl PaymentIntentInterface for MockDb {
|
||||||
@ -123,7 +124,11 @@ impl PaymentIntentInterface for MockDb {
|
|||||||
.iter_mut()
|
.iter_mut()
|
||||||
.find(|item| item.id == this.id)
|
.find(|item| item.id == this.id)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
*payment_intent = update.apply_changeset(this);
|
*payment_intent = PaymentIntent::from_storage_model(
|
||||||
|
update
|
||||||
|
.to_storage_model()
|
||||||
|
.apply_changeset(this.to_storage_model()),
|
||||||
|
);
|
||||||
Ok(payment_intent.clone())
|
Ok(payment_intent.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -146,8 +146,12 @@ impl<T: DatabaseStore> PaymentIntentInterface for KVRouterStore<T> {
|
|||||||
let key = format!("mid_{}_pid_{}", this.merchant_id, this.payment_id);
|
let key = format!("mid_{}_pid_{}", this.merchant_id, this.payment_id);
|
||||||
let field = format!("pi_{}", this.payment_id);
|
let field = format!("pi_{}", this.payment_id);
|
||||||
|
|
||||||
let updated_intent = payment_intent_update.clone().apply_changeset(this.clone());
|
let diesel_intent_update = payment_intent_update.to_storage_model();
|
||||||
let diesel_intent = updated_intent.clone().to_storage_model();
|
let origin_diesel_intent = this.to_storage_model();
|
||||||
|
|
||||||
|
let diesel_intent = diesel_intent_update
|
||||||
|
.clone()
|
||||||
|
.apply_changeset(origin_diesel_intent.clone());
|
||||||
// Check for database presence as well Maybe use a read replica here ?
|
// Check for database presence as well Maybe use a read replica here ?
|
||||||
|
|
||||||
let redis_value =
|
let redis_value =
|
||||||
@ -158,8 +162,8 @@ impl<T: DatabaseStore> PaymentIntentInterface for KVRouterStore<T> {
|
|||||||
op: kv::DBOperation::Update {
|
op: kv::DBOperation::Update {
|
||||||
updatable: kv::Updateable::PaymentIntentUpdate(
|
updatable: kv::Updateable::PaymentIntentUpdate(
|
||||||
kv::PaymentIntentUpdateMems {
|
kv::PaymentIntentUpdateMems {
|
||||||
orig: this.to_storage_model(),
|
orig: origin_diesel_intent,
|
||||||
update_data: payment_intent_update.to_storage_model(),
|
update_data: diesel_intent_update,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@ -175,7 +179,7 @@ impl<T: DatabaseStore> PaymentIntentInterface for KVRouterStore<T> {
|
|||||||
.try_into_hset()
|
.try_into_hset()
|
||||||
.change_context(StorageError::KVError)?;
|
.change_context(StorageError::KVError)?;
|
||||||
|
|
||||||
Ok(updated_intent)
|
Ok(PaymentIntent::from_storage_model(diesel_intent))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user