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:
Kartikeya Hegde
2023-10-31 19:56:45 +05:30
committed by GitHub
parent 09c3e170d1
commit 42261a5306
3 changed files with 15 additions and 35 deletions

View File

@ -215,35 +215,6 @@ pub struct PaymentIntentUpdateInternal {
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 {
fn from(payment_intent_update: PaymentIntentUpdate) -> Self {
match payment_intent_update {

View File

@ -11,6 +11,7 @@ use diesel_models::enums as storage_enums;
use error_stack::{IntoReport, ResultExt};
use super::MockDb;
use crate::DataModelExt;
#[async_trait::async_trait]
impl PaymentIntentInterface for MockDb {
@ -123,7 +124,11 @@ impl PaymentIntentInterface for MockDb {
.iter_mut()
.find(|item| item.id == this.id)
.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())
}

View File

@ -146,8 +146,12 @@ impl<T: DatabaseStore> PaymentIntentInterface for KVRouterStore<T> {
let key = format!("mid_{}_pid_{}", this.merchant_id, this.payment_id);
let field = format!("pi_{}", this.payment_id);
let updated_intent = payment_intent_update.clone().apply_changeset(this.clone());
let diesel_intent = updated_intent.clone().to_storage_model();
let diesel_intent_update = payment_intent_update.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 ?
let redis_value =
@ -158,8 +162,8 @@ impl<T: DatabaseStore> PaymentIntentInterface for KVRouterStore<T> {
op: kv::DBOperation::Update {
updatable: kv::Updateable::PaymentIntentUpdate(
kv::PaymentIntentUpdateMems {
orig: this.to_storage_model(),
update_data: payment_intent_update.to_storage_model(),
orig: origin_diesel_intent,
update_data: diesel_intent_update,
},
),
},
@ -175,7 +179,7 @@ impl<T: DatabaseStore> PaymentIntentInterface for KVRouterStore<T> {
.try_into_hset()
.change_context(StorageError::KVError)?;
Ok(updated_intent)
Ok(PaymentIntent::from_storage_model(diesel_intent))
}
}
}