From fa6c63bd5409ec45f23ddf4616c5eb3cf399aa1b Mon Sep 17 00:00:00 2001 From: Prajjwal Kumar Date: Mon, 22 Jul 2024 21:04:47 +0530 Subject: [PATCH] chore: add customer, shipping and billing details to payment_response for payment list api (#5401) Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> --- crates/api_models/src/payments.rs | 4 +- .../router/src/core/payments/transformers.rs | 40 +++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index 45a6bb4638..04cf4cd5da 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -206,7 +206,9 @@ pub struct CustomerDetails { } /// Details of customer attached to this payment -#[derive(Debug, Default, serde::Serialize, Clone, ToSchema, PartialEq, Setter)] +#[derive( + Debug, Default, serde::Serialize, serde::Deserialize, Clone, ToSchema, PartialEq, Setter, +)] pub struct CustomerDetailsResponse { /// The identifier for the customer. #[schema(value_type = Option, max_length = 64, min_length = 1, example = "cus_y3oqhf46pyzuxjbcn2giaqnb44")] diff --git a/crates/router/src/core/payments/transformers.rs b/crates/router/src/core/payments/transformers.rs index 9b0fee274e..4df4880653 100644 --- a/crates/router/src/core/payments/transformers.rs +++ b/crates/router/src/core/payments/transformers.rs @@ -1,8 +1,8 @@ use std::{fmt::Debug, marker::PhantomData, str::FromStr}; use api_models::payments::{ - CustomerDetailsResponse, FrmMessage, GetAddressFromPaymentMethodData, PaymentChargeRequest, - PaymentChargeResponse, RequestSurchargeDetails, + Address, CustomerDetailsResponse, FrmMessage, GetAddressFromPaymentMethodData, + PaymentChargeRequest, PaymentChargeResponse, RequestSurchargeDetails, }; #[cfg(feature = "payouts")] use api_models::payouts::PayoutAttemptResponse; @@ -1036,7 +1036,7 @@ impl ForeignFrom<(storage::PaymentIntent, storage::PaymentAttempt)> for api::Pay description: pi.description, metadata: pi.metadata, order_details: pi.order_details, - customer_id: pi.customer_id, + customer_id: pi.customer_id.clone(), connector: pa.connector, payment_method: pa.payment_method, payment_method_type: pa.payment_method_type, @@ -1060,6 +1060,40 @@ impl ForeignFrom<(storage::PaymentIntent, storage::PaymentAttempt)> for api::Pay } }), merchant_order_reference_id: pi.merchant_order_reference_id, + customer: pi.customer_details.and_then(|customer_details| + match customer_details.into_inner().expose().parse_value::("CustomerData"){ + Ok(parsed_data) => Some( + CustomerDetailsResponse { + id: pi.customer_id, + name: parsed_data.name, + phone: parsed_data.phone, + email: parsed_data.email, + phone_country_code:parsed_data.phone_country_code + }), + Err(e) => { + router_env::logger::error!("Failed to parse 'CustomerDetailsResponse' from payment method data. Error: {e:?}"); + None + } + } + ), + billing: pi.billing_details.and_then(|billing_details| + match billing_details.into_inner().expose().parse_value::
("Address") { + Ok(parsed_data) => Some(parsed_data), + Err(e) => { + router_env::logger::error!("Failed to parse 'BillingAddress' from payment method data. Error: {e:?}"); + None + } + } + ), + shipping: pi.shipping_details.and_then(|shipping_details| + match shipping_details.into_inner().expose().parse_value::
("Address") { + Ok(parsed_data) => Some(parsed_data), + Err(e) => { + router_env::logger::error!("Failed to parse 'ShippingAddress' from payment method data. Error: {e:?}"); + None + } + } + ), ..Default::default() } }