Skip to content

Commit 86f4060

Browse files
sahkalhyperswitch-bot[bot]hrithikesh026Narayanbhat166
authored
refactor(connector): added amount conversion framework for cashtocode (#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]>
1 parent 4ccd25d commit 86f4060

File tree

6 files changed

+36
-19
lines changed

6 files changed

+36
-19
lines changed

crates/router/src/connector/cashtocode.rs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
pub mod transformers;
2-
use std::fmt::Debug;
32

43
use base64::Engine;
5-
use common_utils::request::RequestContent;
4+
use common_utils::{
5+
request::RequestContent,
6+
types::{AmountConvertor, FloatMajorUnit, FloatMajorUnitForConnector},
7+
};
68
use diesel_models::enums;
79
use error_stack::ResultExt;
810
use masking::{PeekInterface, Secret};
@@ -27,8 +29,18 @@ use crate::{
2729
utils::{ByteSliceExt, BytesExt},
2830
};
2931

30-
#[derive(Debug, Clone)]
31-
pub struct Cashtocode;
32+
#[derive(Clone)]
33+
pub struct Cashtocode {
34+
amount_converter: &'static (dyn AmountConvertor<Output = FloatMajorUnit> + Sync),
35+
}
36+
37+
impl Cashtocode {
38+
pub fn new() -> &'static Self {
39+
&Self {
40+
amount_converter: &FloatMajorUnitForConnector,
41+
}
42+
}
43+
}
3244

3345
impl api::Payment for Cashtocode {}
3446
impl api::PaymentSession for Cashtocode {}
@@ -227,7 +239,12 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
227239
req: &types::PaymentsAuthorizeRouterData,
228240
_connectors: &settings::Connectors,
229241
) -> CustomResult<RequestContent, errors::ConnectorError> {
230-
let connector_req = cashtocode::CashtocodePaymentsRequest::try_from(req)?;
242+
let amount = connector_utils::convert_amount(
243+
self.amount_converter,
244+
req.request.minor_amount,
245+
req.request.currency,
246+
)?;
247+
let connector_req = cashtocode::CashtocodePaymentsRequest::try_from((req, amount))?;
231248
Ok(RequestContent::Json(Box::new(connector_req)))
232249
}
233250

crates/router/src/connector/cashtocode/transformers.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
use std::collections::HashMap;
22

33
pub use common_utils::request::Method;
4-
use common_utils::{errors::CustomResult, ext_traits::ValueExt, id_type, pii::Email};
4+
use common_utils::{
5+
errors::CustomResult, ext_traits::ValueExt, id_type, pii::Email, types::FloatMajorUnit,
6+
};
57
use error_stack::ResultExt;
68
use masking::Secret;
79
use serde::{Deserialize, Serialize};
@@ -16,7 +18,7 @@ use crate::{
1618
#[derive(Default, Debug, Serialize)]
1719
#[serde(rename_all = "camelCase")]
1820
pub struct CashtocodePaymentsRequest {
19-
amount: f64,
21+
amount: FloatMajorUnit,
2022
transaction_id: String,
2123
user_id: Secret<id_type::CustomerId>,
2224
currency: enums::Currency,
@@ -48,9 +50,11 @@ fn get_mid(
4850
}
4951
}
5052

51-
impl TryFrom<&types::PaymentsAuthorizeRouterData> for CashtocodePaymentsRequest {
53+
impl TryFrom<(&types::PaymentsAuthorizeRouterData, FloatMajorUnit)> for CashtocodePaymentsRequest {
5254
type Error = error_stack::Report<errors::ConnectorError>;
53-
fn try_from(item: &types::PaymentsAuthorizeRouterData) -> Result<Self, Self::Error> {
55+
fn try_from(
56+
(item, amount): (&types::PaymentsAuthorizeRouterData, FloatMajorUnit),
57+
) -> Result<Self, Self::Error> {
5458
let customer_id = item.get_customer_id()?;
5559
let url = item.request.get_router_return_url()?;
5660
let mid = get_mid(
@@ -60,10 +64,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for CashtocodePaymentsRequest
6064
)?;
6165
match item.payment_method {
6266
diesel_models::enums::PaymentMethod::Reward => Ok(Self {
63-
amount: utils::to_currency_base_unit_asf64(
64-
item.request.amount,
65-
item.request.currency,
66-
)?,
67+
amount,
6768
transaction_id: item.attempt_id.clone(),
6869
currency: item.request.currency,
6970
user_id: Secret::new(customer_id.to_owned()),
@@ -192,7 +193,7 @@ pub struct CashtocodePaymentsResponseData {
192193
#[serde(rename_all = "camelCase")]
193194
pub struct CashtocodePaymentsSyncResponse {
194195
pub transaction_id: String,
195-
pub amount: f64,
196+
pub amount: FloatMajorUnit,
196197
}
197198

198199
fn get_redirect_form_data(
@@ -330,7 +331,7 @@ pub struct CashtocodeErrorResponse {
330331
#[derive(Debug, Clone, Serialize, Deserialize)]
331332
#[serde(rename_all = "camelCase")]
332333
pub struct CashtocodeIncomingWebhook {
333-
pub amount: f64,
334+
pub amount: FloatMajorUnit,
334335
pub currency: String,
335336
pub foreign_transaction_id: String,
336337
#[serde(rename = "type")]

crates/router/src/connector/cryptopay/transformers.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ impl<F, T>
196196
status,
197197
response,
198198
amount_captured,
199+
minor_amount_captured: amount_captured_in_minor_units,
199200
..item.data
200201
})
201202
}

crates/router/src/connector/payme.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ use crate::{
3131
transformers::ForeignTryFrom,
3232
ErrorResponse, Response,
3333
},
34-
// transformers::{ForeignFrom, ForeignTryFrom},
3534
utils::{handle_json_response_deserialization_failure, BytesExt},
3635
};
3736

@@ -50,7 +49,6 @@ impl Payme {
5049
}
5150
}
5251
}
53-
// dummy commit
5452
impl api::Payment for Payme {}
5553
impl api::PaymentSession for Payme {}
5654
impl api::PaymentsCompleteAuthorize for Payme {}

crates/router/src/types/api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ impl ConnectorData {
371371
Ok(ConnectorEnum::Old(Box::new(&connector::Braintree)))
372372
}
373373
enums::Connector::Cashtocode => {
374-
Ok(ConnectorEnum::Old(Box::new(&connector::Cashtocode)))
374+
Ok(ConnectorEnum::Old(Box::new(connector::Cashtocode::new())))
375375
}
376376
enums::Connector::Checkout => {
377377
Ok(ConnectorEnum::Old(Box::new(&connector::Checkout)))

crates/router/tests/connectors/cashtocode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ impl utils::Connector for CashtocodeTest {
1313
fn get_data(&self) -> types::api::ConnectorData {
1414
use router::connector::Cashtocode;
1515
utils::construct_connector_data_old(
16-
Box::new(&Cashtocode),
16+
Box::new(Cashtocode::new()),
1717
types::Connector::Cashtocode,
1818
types::api::GetToken::Connector,
1919
None,

0 commit comments

Comments
 (0)