Skip to content

Commit

Permalink
refactor(connector): added amount conversion framework for cashtocode (
Browse files Browse the repository at this point in the history
…#4857)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
Co-authored-by: Hrithikesh <[email protected]>
Co-authored-by: Narayan Bhat <[email protected]>
  • Loading branch information
4 people committed Jun 26, 2024
1 parent 4ccd25d commit 86f4060
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 19 deletions.
27 changes: 22 additions & 5 deletions crates/router/src/connector/cashtocode.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
pub mod transformers;
use std::fmt::Debug;

use base64::Engine;
use common_utils::request::RequestContent;
use common_utils::{
request::RequestContent,
types::{AmountConvertor, FloatMajorUnit, FloatMajorUnitForConnector},
};
use diesel_models::enums;
use error_stack::ResultExt;
use masking::{PeekInterface, Secret};
Expand All @@ -27,8 +29,18 @@ use crate::{
utils::{ByteSliceExt, BytesExt},
};

#[derive(Debug, Clone)]
pub struct Cashtocode;
#[derive(Clone)]
pub struct Cashtocode {
amount_converter: &'static (dyn AmountConvertor<Output = FloatMajorUnit> + Sync),
}

impl Cashtocode {
pub fn new() -> &'static Self {
&Self {
amount_converter: &FloatMajorUnitForConnector,
}
}
}

impl api::Payment for Cashtocode {}
impl api::PaymentSession for Cashtocode {}
Expand Down Expand Up @@ -227,7 +239,12 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
req: &types::PaymentsAuthorizeRouterData,
_connectors: &settings::Connectors,
) -> CustomResult<RequestContent, errors::ConnectorError> {
let connector_req = cashtocode::CashtocodePaymentsRequest::try_from(req)?;
let amount = connector_utils::convert_amount(
self.amount_converter,
req.request.minor_amount,
req.request.currency,
)?;
let connector_req = cashtocode::CashtocodePaymentsRequest::try_from((req, amount))?;
Ok(RequestContent::Json(Box::new(connector_req)))
}

Expand Down
21 changes: 11 additions & 10 deletions crates/router/src/connector/cashtocode/transformers.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use std::collections::HashMap;

pub use common_utils::request::Method;
use common_utils::{errors::CustomResult, ext_traits::ValueExt, id_type, pii::Email};
use common_utils::{
errors::CustomResult, ext_traits::ValueExt, id_type, pii::Email, types::FloatMajorUnit,
};
use error_stack::ResultExt;
use masking::Secret;
use serde::{Deserialize, Serialize};
Expand All @@ -16,7 +18,7 @@ use crate::{
#[derive(Default, Debug, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CashtocodePaymentsRequest {
amount: f64,
amount: FloatMajorUnit,
transaction_id: String,
user_id: Secret<id_type::CustomerId>,
currency: enums::Currency,
Expand Down Expand Up @@ -48,9 +50,11 @@ fn get_mid(
}
}

impl TryFrom<&types::PaymentsAuthorizeRouterData> for CashtocodePaymentsRequest {
impl TryFrom<(&types::PaymentsAuthorizeRouterData, FloatMajorUnit)> for CashtocodePaymentsRequest {
type Error = error_stack::Report<errors::ConnectorError>;
fn try_from(item: &types::PaymentsAuthorizeRouterData) -> Result<Self, Self::Error> {
fn try_from(
(item, amount): (&types::PaymentsAuthorizeRouterData, FloatMajorUnit),
) -> Result<Self, Self::Error> {
let customer_id = item.get_customer_id()?;
let url = item.request.get_router_return_url()?;
let mid = get_mid(
Expand All @@ -60,10 +64,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for CashtocodePaymentsRequest
)?;
match item.payment_method {
diesel_models::enums::PaymentMethod::Reward => Ok(Self {
amount: utils::to_currency_base_unit_asf64(
item.request.amount,
item.request.currency,
)?,
amount,
transaction_id: item.attempt_id.clone(),
currency: item.request.currency,
user_id: Secret::new(customer_id.to_owned()),
Expand Down Expand Up @@ -192,7 +193,7 @@ pub struct CashtocodePaymentsResponseData {
#[serde(rename_all = "camelCase")]
pub struct CashtocodePaymentsSyncResponse {
pub transaction_id: String,
pub amount: f64,
pub amount: FloatMajorUnit,
}

fn get_redirect_form_data(
Expand Down Expand Up @@ -330,7 +331,7 @@ pub struct CashtocodeErrorResponse {
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CashtocodeIncomingWebhook {
pub amount: f64,
pub amount: FloatMajorUnit,
pub currency: String,
pub foreign_transaction_id: String,
#[serde(rename = "type")]
Expand Down
1 change: 1 addition & 0 deletions crates/router/src/connector/cryptopay/transformers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ impl<F, T>
status,
response,
amount_captured,
minor_amount_captured: amount_captured_in_minor_units,
..item.data
})
}
Expand Down
2 changes: 0 additions & 2 deletions crates/router/src/connector/payme.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ use crate::{
transformers::ForeignTryFrom,
ErrorResponse, Response,
},
// transformers::{ForeignFrom, ForeignTryFrom},
utils::{handle_json_response_deserialization_failure, BytesExt},
};

Expand All @@ -50,7 +49,6 @@ impl Payme {
}
}
}
// dummy commit
impl api::Payment for Payme {}
impl api::PaymentSession for Payme {}
impl api::PaymentsCompleteAuthorize for Payme {}
Expand Down
2 changes: 1 addition & 1 deletion crates/router/src/types/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@ impl ConnectorData {
Ok(ConnectorEnum::Old(Box::new(&connector::Braintree)))
}
enums::Connector::Cashtocode => {
Ok(ConnectorEnum::Old(Box::new(&connector::Cashtocode)))
Ok(ConnectorEnum::Old(Box::new(connector::Cashtocode::new())))
}
enums::Connector::Checkout => {
Ok(ConnectorEnum::Old(Box::new(&connector::Checkout)))
Expand Down
2 changes: 1 addition & 1 deletion crates/router/tests/connectors/cashtocode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ impl utils::Connector for CashtocodeTest {
fn get_data(&self) -> types::api::ConnectorData {
use router::connector::Cashtocode;
utils::construct_connector_data_old(
Box::new(&Cashtocode),
Box::new(Cashtocode::new()),
types::Connector::Cashtocode,
types::api::GetToken::Connector,
None,
Expand Down

0 comments on commit 86f4060

Please sign in to comment.