From dcf867d96ed899886b5246f0f53aa2ddbb2ed0cf Mon Sep 17 00:00:00 2001 From: Amisha Prabhat <55580080+Aprabhat19@users.noreply.github.com> Date: Wed, 16 Jul 2025 21:43:59 +0530 Subject: [PATCH] feat(payments): Add feature_metadata in the payments response for v2 (#8667) Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> --- api-reference/v2/openapi_spec_v2.json | 10 +++++++++- crates/api_models/src/payments.rs | 9 ++++++--- crates/hyperswitch_domain_models/src/lib.rs | 5 ++--- crates/router/src/core/payments/transformers.rs | 4 +++- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/api-reference/v2/openapi_spec_v2.json b/api-reference/v2/openapi_spec_v2.json index 285a21ba04..7b4f04a229 100644 --- a/api-reference/v2/openapi_spec_v2.json +++ b/api-reference/v2/openapi_spec_v2.json @@ -10838,7 +10838,7 @@ ], "nullable": true }, - "payment_revenue_recovery_metadata": { + "revenue_recovery": { "allOf": [ { "$ref": "#/components/schemas/PaymentRevenueRecoveryMetadata" @@ -19319,6 +19319,14 @@ "type": "string", "description": "Stringified connector raw response body. Only returned if `return_raw_connector_response` is true", "nullable": true + }, + "feature_metadata": { + "allOf": [ + { + "$ref": "#/components/schemas/FeatureMetadata" + } + ], + "nullable": true } } }, diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index f3d7d9b675..cef094a98d 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -5808,6 +5808,9 @@ pub struct PaymentsResponse { /// Stringified connector raw response body. Only returned if `return_raw_connector_response` is true #[schema(value_type = Option)] pub raw_connector_response: Option>, + + /// Additional data that might be required by hyperswitch based on the additional features. + pub feature_metadata: Option, } #[cfg(feature = "v2")] @@ -7823,13 +7826,13 @@ pub struct FeatureMetadata { /// Recurring payment details required for apple pay Merchant Token pub apple_pay_recurring_details: Option, /// revenue recovery data for payment intent - pub payment_revenue_recovery_metadata: Option, + pub revenue_recovery: Option, } #[cfg(feature = "v2")] impl FeatureMetadata { pub fn get_retry_count(&self) -> Option { - self.payment_revenue_recovery_metadata + self.revenue_recovery .as_ref() .map(|metadata| metadata.total_retry_count) } @@ -7842,7 +7845,7 @@ impl FeatureMetadata { redirect_response: self.redirect_response, search_tags: self.search_tags, apple_pay_recurring_details: self.apple_pay_recurring_details, - payment_revenue_recovery_metadata: Some(payment_revenue_recovery_metadata), + revenue_recovery: Some(payment_revenue_recovery_metadata), } } } diff --git a/crates/hyperswitch_domain_models/src/lib.rs b/crates/hyperswitch_domain_models/src/lib.rs index 35f619334c..fd24c3d9f4 100644 --- a/crates/hyperswitch_domain_models/src/lib.rs +++ b/crates/hyperswitch_domain_models/src/lib.rs @@ -145,7 +145,7 @@ impl ApiModelToDieselModelConvertor for FeatureMetadata { redirect_response, search_tags, apple_pay_recurring_details, - payment_revenue_recovery_metadata, + revenue_recovery: payment_revenue_recovery_metadata, } = from; Self { @@ -172,8 +172,7 @@ impl ApiModelToDieselModelConvertor for FeatureMetadata { search_tags, apple_pay_recurring_details: apple_pay_recurring_details .map(|value| value.convert_back()), - payment_revenue_recovery_metadata: payment_revenue_recovery_metadata - .map(|value| value.convert_back()), + revenue_recovery: payment_revenue_recovery_metadata.map(|value| value.convert_back()), } } } diff --git a/crates/router/src/core/payments/transformers.rs b/crates/router/src/core/payments/transformers.rs index 1df3b6ef29..6785e42998 100644 --- a/crates/router/src/core/payments/transformers.rs +++ b/crates/router/src/core/payments/transformers.rs @@ -1989,6 +1989,7 @@ where is_iframe_redirection_enabled: None, merchant_reference_id: payment_intent.merchant_reference_id.clone(), raw_connector_response, + feature_metadata: None, }; Ok(services::ApplicationResponse::JsonWithHeaders(( @@ -2089,6 +2090,7 @@ where is_iframe_redirection_enabled: payment_intent.is_iframe_redirection_enabled, merchant_reference_id: payment_intent.merchant_reference_id.clone(), raw_connector_response, + feature_metadata: None, }; Ok(services::ApplicationResponse::JsonWithHeaders(( @@ -5215,7 +5217,7 @@ impl ForeignFrom<&diesel_models::types::FeatureMetadata> for api_models::payment .clone() .map(api_models::payments::RedirectResponse::foreign_from); Self { - payment_revenue_recovery_metadata: revenue_recovery, + revenue_recovery, apple_pay_recurring_details: apple_pay_details, redirect_response: redirect_res, search_tags: feature_metadata.search_tags.clone(),