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>
This commit is contained in:
Prajjwal Kumar
2024-07-22 21:04:47 +05:30
committed by GitHub
parent eaa391a959
commit fa6c63bd54
2 changed files with 40 additions and 4 deletions

View File

@ -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<String>, max_length = 64, min_length = 1, example = "cus_y3oqhf46pyzuxjbcn2giaqnb44")]

View File

@ -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>("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>("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>("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()
}
}