refactor(connector): added amount conversion framework for Gpayments (#4978)

This commit is contained in:
Kiran Kumar
2024-08-07 22:31:44 +05:30
committed by GitHub
parent 732472204d
commit aa036ce84d
4 changed files with 27 additions and 17 deletions

View File

@ -1,9 +1,10 @@
pub mod gpayments_types; pub mod gpayments_types;
pub mod transformers; 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 error_stack::{report, ResultExt};
use transformers as gpayments; use transformers as gpayments;
@ -22,8 +23,18 @@ use crate::{
utils::BytesExt, utils::BytesExt,
}; };
#[derive(Debug, Clone)] #[derive(Clone)]
pub struct Gpayments; pub struct Gpayments {
_amount_converter: &'static (dyn AmountConvertor<Output = MinorUnit> + Sync),
}
impl Gpayments {
pub fn new() -> &'static Self {
&Self {
_amount_converter: &MinorUnitForConnector,
}
}
}
impl api::Payment for Gpayments {} impl api::Payment for Gpayments {}
impl api::PaymentSession for Gpayments {} impl api::PaymentSession for Gpayments {}
@ -246,7 +257,7 @@ impl
req: &types::authentication::ConnectorAuthenticationRouterData, req: &types::authentication::ConnectorAuthenticationRouterData,
_connectors: &settings::Connectors, _connectors: &settings::Connectors,
) -> CustomResult<RequestContent, errors::ConnectorError> { ) -> CustomResult<RequestContent, errors::ConnectorError> {
let connector_router_data = gpayments::GpaymentsRouterData::try_from((0, req))?; let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
let req_obj = let req_obj =
gpayments_types::GpaymentsAuthenticationRequest::try_from(&connector_router_data)?; gpayments_types::GpaymentsAuthenticationRequest::try_from(&connector_router_data)?;
Ok(RequestContent::Json(Box::new(req_obj))) Ok(RequestContent::Json(Box::new(req_obj)))
@ -440,7 +451,7 @@ impl
req: &types::authentication::PreAuthNRouterData, req: &types::authentication::PreAuthNRouterData,
_connectors: &settings::Connectors, _connectors: &settings::Connectors,
) -> CustomResult<RequestContent, errors::ConnectorError> { ) -> CustomResult<RequestContent, errors::ConnectorError> {
let connector_router_data = gpayments::GpaymentsRouterData::try_from((0, req))?; let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
let req_obj = let req_obj =
gpayments_types::GpaymentsPreAuthenticationRequest::try_from(&connector_router_data)?; gpayments_types::GpaymentsPreAuthenticationRequest::try_from(&connector_router_data)?;
Ok(RequestContent::Json(Box::new(req_obj))) Ok(RequestContent::Json(Box::new(req_obj)))
@ -537,7 +548,7 @@ impl
req: &types::authentication::PreAuthNVersionCallRouterData, req: &types::authentication::PreAuthNVersionCallRouterData,
_connectors: &settings::Connectors, _connectors: &settings::Connectors,
) -> CustomResult<RequestContent, errors::ConnectorError> { ) -> CustomResult<RequestContent, errors::ConnectorError> {
let connector_router_data = gpayments::GpaymentsRouterData::try_from((0, req))?; let connector_router_data = gpayments::GpaymentsRouterData::from((MinorUnit::zero(), req));
let req_obj = let req_obj =
gpayments_types::GpaymentsPreAuthVersionCallRequest::try_from(&connector_router_data)?; gpayments_types::GpaymentsPreAuthVersionCallRequest::try_from(&connector_router_data)?;
Ok(RequestContent::Json(Box::new(req_obj))) Ok(RequestContent::Json(Box::new(req_obj)))

View File

@ -1,6 +1,6 @@
use api_models::payments::DeviceChannel; use api_models::payments::DeviceChannel;
use base64::Engine; use base64::Engine;
use common_utils::date_time; use common_utils::{date_time, types::MinorUnit};
use error_stack::ResultExt; use error_stack::ResultExt;
use masking::{ExposeInterface, Secret}; use masking::{ExposeInterface, Secret};
use serde::Deserialize; use serde::Deserialize;
@ -21,17 +21,16 @@ use crate::{
}; };
pub struct GpaymentsRouterData<T> { pub struct GpaymentsRouterData<T> {
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, pub router_data: T,
} }
impl<T> TryFrom<(i64, T)> for GpaymentsRouterData<T> { impl<T> From<(MinorUnit, T)> for GpaymentsRouterData<T> {
type Error = error_stack::Report<errors::ConnectorError>; fn from((amount, item): (MinorUnit, T)) -> Self {
fn try_from((amount, item): (i64, T)) -> Result<Self, Self::Error> { Self {
Ok(Self {
amount, amount,
router_data: item, router_data: item,
}) }
} }
} }

View File

@ -148,7 +148,7 @@ impl AuthenticationConnectorData {
Ok(ConnectorEnum::Old(Box::new(&connector::Netcetera))) Ok(ConnectorEnum::Old(Box::new(&connector::Netcetera)))
} }
enums::AuthenticationConnectors::Gpayments => { enums::AuthenticationConnectors::Gpayments => {
Ok(ConnectorEnum::Old(Box::new(&connector::Gpayments))) Ok(ConnectorEnum::Old(Box::new(connector::Gpayments::new())))
} }
} }
} }

View File

@ -11,7 +11,7 @@ impl utils::Connector for GpaymentsTest {
fn get_data(&self) -> types::api::ConnectorData { fn get_data(&self) -> types::api::ConnectorData {
use router::connector::Gpayments; use router::connector::Gpayments;
utils::construct_connector_data_old( utils::construct_connector_data_old(
Box::new(&Gpayments), Box::new(Gpayments::new()),
types::Connector::Threedsecureio, types::Connector::Threedsecureio,
// Added as Dummy connector as template code is added for future usage // Added as Dummy connector as template code is added for future usage
types::api::GetToken::Connector, types::api::GetToken::Connector,