From e1c66e72655daa254656cc67f80f70f3447043f7 Mon Sep 17 00:00:00 2001 From: Pa1NarK <69745008+pixincreate@users.noreply.github.com> Date: Fri, 1 Aug 2025 18:14:18 +0530 Subject: [PATCH] refactor(mandate): move repeated code to a separate function within Mandate impl (#8772) --- crates/diesel_models/src/mandate.rs | 21 +++++++++++++++++---- crates/router/src/db/mandate.rs | 7 +++---- crates/router/src/types/api/mandates.rs | 7 ++----- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/crates/diesel_models/src/mandate.rs b/crates/diesel_models/src/mandate.rs index 7ed37dc2fd..f4c507e471 100644 --- a/crates/diesel_models/src/mandate.rs +++ b/crates/diesel_models/src/mandate.rs @@ -78,10 +78,26 @@ pub struct MandateNew { pub customer_user_agent_extended: Option, } +impl Mandate { + /// Returns customer_user_agent_extended with customer_user_agent as fallback + pub fn get_user_agent_extended(&self) -> Option { + self.customer_user_agent_extended + .clone() + .or_else(|| self.customer_user_agent.clone()) + } +} + impl MandateNew { pub fn update_storage_scheme(&mut self, storage_scheme: MerchantStorageScheme) { self.updated_by = Some(storage_scheme.to_string()); } + + /// Returns customer_user_agent_extended with customer_user_agent as fallback + pub fn get_customer_user_agent_extended(&self) -> Option { + self.customer_user_agent_extended + .clone() + .or_else(|| self.customer_user_agent.clone()) + } } #[derive(Debug)] @@ -238,10 +254,7 @@ impl From<&MandateNew> for Mandate { merchant_connector_id: mandate_new.merchant_connector_id.clone(), updated_by: mandate_new.updated_by.clone(), // Using customer_user_agent as a fallback - customer_user_agent_extended: mandate_new - .customer_user_agent_extended - .clone() - .or_else(|| mandate_new.customer_user_agent.clone()), + customer_user_agent_extended: mandate_new.get_customer_user_agent_extended(), } } } diff --git a/crates/router/src/db/mandate.rs b/crates/router/src/db/mandate.rs index 3bd80407fc..caae9dec68 100644 --- a/crates/router/src/db/mandate.rs +++ b/crates/router/src/db/mandate.rs @@ -661,6 +661,8 @@ impl MandateInterface for MockDb { _storage_scheme: MerchantStorageScheme, ) -> CustomResult { let mut mandates = self.mandates.lock().await; + let customer_user_agent_extended = mandate_new.get_customer_user_agent_extended(); + let mandate = storage_types::Mandate { mandate_id: mandate_new.mandate_id.clone(), customer_id: mandate_new.customer_id, @@ -688,10 +690,7 @@ impl MandateInterface for MockDb { connector_mandate_ids: mandate_new.connector_mandate_ids, merchant_connector_id: mandate_new.merchant_connector_id, updated_by: mandate_new.updated_by, - // Using customer_user_agent as a fallback - customer_user_agent_extended: mandate_new - .customer_user_agent_extended - .or_else(|| mandate_new.customer_user_agent.clone()), + customer_user_agent_extended, }; mandates.push(mandate.clone()); Ok(mandate) diff --git a/crates/router/src/types/api/mandates.rs b/crates/router/src/types/api/mandates.rs index 343d6e196b..5d39c5e194 100644 --- a/crates/router/src/types/api/mandates.rs +++ b/crates/router/src/types/api/mandates.rs @@ -95,6 +95,7 @@ impl MandateResponseExt for MandateResponse { let payment_method_type = payment_method .get_payment_method_subtype() .map(|pmt| pmt.to_string()); + let user_agent = mandate.get_user_agent_extended().unwrap_or_default(); Ok(Self { mandate_id: mandate.mandate_id, customer_acceptance: Some(api::payments::CustomerAcceptance { @@ -106,11 +107,7 @@ impl MandateResponseExt for MandateResponse { accepted_at: mandate.customer_accepted_at, online: Some(api::payments::OnlineMandate { ip_address: mandate.customer_ip_address, - // Using customer_user_agent as a fallback - user_agent: mandate - .customer_user_agent_extended - .or(mandate.customer_user_agent) - .unwrap_or_default(), + user_agent, }), }), card,