Skip to content

Commit

Permalink
refactor(connector): added amount framework to cashtocode
Browse files Browse the repository at this point in the history
  • Loading branch information
sahkal committed Jun 3, 2024
1 parent 99824e2 commit 4e53651
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 17 deletions.
22 changes: 17 additions & 5 deletions crates/router/src/connector/cashtocode.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
pub mod transformers;
use std::fmt::Debug;


use base64::Engine;
use common_utils::request::RequestContent;
use common_utils::{request::RequestContent, types::{FloatMajorUnit, AmountConvertor, FloatMajorUnitForConnector}};
use diesel_models::enums;
use error_stack::ResultExt;
use masking::{PeekInterface, Secret};
Expand All @@ -27,8 +27,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 +237,9 @@ 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
17 changes: 7 additions & 10 deletions crates/router/src/connector/cashtocode/transformers.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
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 +16,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 +48,9 @@ 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 +60,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 +189,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 +327,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
2 changes: 1 addition & 1 deletion crates/router/src/types/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ impl ConnectorData {
enums::Connector::Bluesnap => Ok(Box::new(connector::Bluesnap::new())),
enums::Connector::Boku => Ok(Box::new(&connector::Boku)),
enums::Connector::Braintree => Ok(Box::new(&connector::Braintree)),
enums::Connector::Cashtocode => Ok(Box::new(&connector::Cashtocode)),
enums::Connector::Cashtocode => Ok(Box::new(connector::Cashtocode::new())),
enums::Connector::Checkout => Ok(Box::new(&connector::Checkout)),
enums::Connector::Coinbase => Ok(Box::new(&connector::Coinbase)),
enums::Connector::Cryptopay => Ok(Box::new(connector::Cryptopay::new())),
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;
types::api::ConnectorData {
connector: Box::new(&Cashtocode),
connector: Box::new(Cashtocode::new()),
connector_name: types::Connector::Cashtocode,
get_token: types::api::GetToken::Connector,
merchant_connector_id: None,
Expand Down

0 comments on commit 4e53651

Please sign in to comment.