From aa036ce84d1ecef7665dd1f8832e569d50a2d7cd Mon Sep 17 00:00:00 2001 From: Kiran Kumar <60121719+KiranKBR@users.noreply.github.com> Date: Wed, 7 Aug 2024 22:31:44 +0530 Subject: [PATCH] refactor(connector): added amount conversion framework for Gpayments (#4978) --- crates/router/src/connector/gpayments.rs | 27 +++++++++++++------ .../src/connector/gpayments/transformers.rs | 13 +++++---- crates/router/src/types/api/authentication.rs | 2 +- crates/router/tests/connectors/gpayments.rs | 2 +- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/crates/router/src/connector/gpayments.rs b/crates/router/src/connector/gpayments.rs index e628779cd9..9f88e21513 100644 --- a/crates/router/src/connector/gpayments.rs +++ b/crates/router/src/connector/gpayments.rs @@ -1,9 +1,10 @@ pub mod gpayments_types; pub mod transformers; -use std::fmt::Debug; - -use common_utils::request::RequestContent; +use common_utils::{ + request::RequestContent, + types::{AmountConvertor, MinorUnit, MinorUnitForConnector}, +}; use error_stack::{report, ResultExt}; use transformers as gpayments; @@ -22,8 +23,18 @@ use crate::{ utils::BytesExt, }; -#[derive(Debug, Clone)] -pub struct Gpayments; +#[derive(Clone)] +pub struct Gpayments { + _amount_converter: &'static (dyn AmountConvertor + Sync), +} + +impl Gpayments { + pub fn new() -> &'static Self { + &Self { + _amount_converter: &MinorUnitForConnector, + } + } +} impl api::Payment for Gpayments {} impl api::PaymentSession for Gpayments {} @@ -246,7 +257,7 @@ impl req: &types::authentication::ConnectorAuthenticationRouterData, _connectors: &settings::Connectors, ) -> CustomResult { - let connector_router_data = gpayments::GpaymentsRouterData::try_from((0, req))?; + let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req)); let req_obj = gpayments_types::GpaymentsAuthenticationRequest::try_from(&connector_router_data)?; Ok(RequestContent::Json(Box::new(req_obj))) @@ -440,7 +451,7 @@ impl req: &types::authentication::PreAuthNRouterData, _connectors: &settings::Connectors, ) -> CustomResult { - let connector_router_data = gpayments::GpaymentsRouterData::try_from((0, req))?; + let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req)); let req_obj = gpayments_types::GpaymentsPreAuthenticationRequest::try_from(&connector_router_data)?; Ok(RequestContent::Json(Box::new(req_obj))) @@ -537,7 +548,7 @@ impl req: &types::authentication::PreAuthNVersionCallRouterData, _connectors: &settings::Connectors, ) -> CustomResult { - let connector_router_data = gpayments::GpaymentsRouterData::try_from((0, req))?; + let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req)); let req_obj = gpayments_types::GpaymentsPreAuthVersionCallRequest::try_from(&connector_router_data)?; Ok(RequestContent::Json(Box::new(req_obj))) diff --git a/crates/router/src/connector/gpayments/transformers.rs b/crates/router/src/connector/gpayments/transformers.rs index 50c8c0f28c..572b6dfa0e 100644 --- a/crates/router/src/connector/gpayments/transformers.rs +++ b/crates/router/src/connector/gpayments/transformers.rs @@ -1,6 +1,6 @@ use api_models::payments::DeviceChannel; use base64::Engine; -use common_utils::date_time; +use common_utils::{date_time, types::MinorUnit}; use error_stack::ResultExt; use masking::{ExposeInterface, Secret}; use serde::Deserialize; @@ -21,17 +21,16 @@ use crate::{ }; pub struct GpaymentsRouterData { - pub amount: i64, // The type of amount that a connector accepts, for example, String, i64, f64, etc. + pub amount: MinorUnit, // The type of amount that a connector accepts, for example, String, i64, f64, etc. pub router_data: T, } -impl TryFrom<(i64, T)> for GpaymentsRouterData { - type Error = error_stack::Report; - fn try_from((amount, item): (i64, T)) -> Result { - Ok(Self { +impl From<(MinorUnit, T)> for GpaymentsRouterData { + fn from((amount, item): (MinorUnit, T)) -> Self { + Self { amount, router_data: item, - }) + } } } diff --git a/crates/router/src/types/api/authentication.rs b/crates/router/src/types/api/authentication.rs index 9b2a69bfe0..7d35943dd7 100644 --- a/crates/router/src/types/api/authentication.rs +++ b/crates/router/src/types/api/authentication.rs @@ -148,7 +148,7 @@ impl AuthenticationConnectorData { Ok(ConnectorEnum::Old(Box::new(&connector::Netcetera))) } enums::AuthenticationConnectors::Gpayments => { - Ok(ConnectorEnum::Old(Box::new(&connector::Gpayments))) + Ok(ConnectorEnum::Old(Box::new(connector::Gpayments::new()))) } } } diff --git a/crates/router/tests/connectors/gpayments.rs b/crates/router/tests/connectors/gpayments.rs index f0935a928a..851c0ee06f 100644 --- a/crates/router/tests/connectors/gpayments.rs +++ b/crates/router/tests/connectors/gpayments.rs @@ -11,7 +11,7 @@ impl utils::Connector for GpaymentsTest { fn get_data(&self) -> types::api::ConnectorData { use router::connector::Gpayments; utils::construct_connector_data_old( - Box::new(&Gpayments), + Box::new(Gpayments::new()), types::Connector::Threedsecureio, // Added as Dummy connector as template code is added for future usage types::api::GetToken::Connector,