feat(connector): [Chargebee] Add record back support for chargebee (#7505)

Co-authored-by: Chikke Srujan <chikke.srujan@Chikke-Srujan-N7WRTY72X7.local>
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
chikke srujan
2025-03-18 18:12:46 +05:30
committed by GitHub
parent e4c7ab8e68
commit e77bb71c6c
8 changed files with 494 additions and 56 deletions

View File

@ -1314,6 +1314,7 @@ impl ConnectorAuthTypeAndMetadataValidation<'_> {
}
api_enums::Connector::Chargebee => {
chargebee::transformers::ChargebeeAuthType::try_from(self.auth_type)?;
chargebee::transformers::ChargebeeMetadata::try_from(self.connector_meta_data)?;
Ok(())
}
api_enums::Connector::Checkout => {

View File

@ -12,11 +12,14 @@ pub mod session_update_flow;
pub mod setup_mandate_flow;
use async_trait::async_trait;
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
use hyperswitch_domain_models::router_flow_types::{
revenue_recovery::RecoveryRecordBack, GetAdditionalRevenueRecoveryDetails,
};
use hyperswitch_domain_models::{
mandates::CustomerAcceptance,
router_flow_types::{
revenue_recovery::RecoveryRecordBack, Authenticate, AuthenticationConfirmation,
GetAdditionalRevenueRecoveryDetails, PostAuthenticate, PreAuthenticate,
Authenticate, AuthenticationConfirmation, PostAuthenticate, PreAuthenticate,
},
router_request_types::PaymentsCaptureData,
};
@ -2216,6 +2219,7 @@ fn handle_post_capture_response(
}
}
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
macro_rules! default_imp_for_revenue_recovery_record_back {
($($path:ident::$connector:ident),*) => {
$(
@ -2231,8 +2235,10 @@ macro_rules! default_imp_for_revenue_recovery_record_back {
};
}
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
#[cfg(feature = "dummy_connector")]
impl<const T: u8> api::RevenueRecoveryRecordBack for connector::DummyConnector<T> {}
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
#[cfg(feature = "dummy_connector")]
impl<const T: u8>
services::ConnectorIntegration<
@ -2242,7 +2248,7 @@ impl<const T: u8>
> for connector::DummyConnector<T>
{
}
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
default_imp_for_revenue_recovery_record_back!(
connector::Adyenplatform,
connector::Ebanx,
@ -2259,9 +2265,36 @@ default_imp_for_revenue_recovery_record_back!(
connector::Wise
);
macro_rules! default_imp_for_additional_revenue_recovery_call {
macro_rules! default_imp_for_revenue_recovery {
($($path:ident::$connector:ident),*) => {
$( impl api::RevenueRecovery for $path::$connector {}
)*
};
}
#[cfg(feature = "dummy_connector")]
impl<const T: u8> api::RevenueRecovery for connector::DummyConnector<T> {}
default_imp_for_revenue_recovery! {
connector::Adyenplatform,
connector::Ebanx,
connector::Gpayments,
connector::Netcetera,
connector::Nmi,
connector::Payone,
connector::Plaid,
connector::Riskified,
connector::Signifyd,
connector::Stripe,
connector::Threedsecureio,
connector::Wellsfargopayout,
connector::Wise
}
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
macro_rules! default_imp_for_additional_revenue_recovery_call {
($($path:ident::$connector:ident),*) => {
$(
impl api::AdditionalRevenueRecovery for $path::$connector {}
impl
services::ConnectorIntegration<
@ -2274,9 +2307,10 @@ macro_rules! default_imp_for_additional_revenue_recovery_call {
};
}
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
#[cfg(feature = "dummy_connector")]
impl<const T: u8> api::RevenueRecovery for connector::DummyConnector<T> {}
impl<const T: u8> api::AdditionalRevenueRecovery for connector::DummyConnector<T> {}
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
#[cfg(feature = "dummy_connector")]
impl<const T: u8>
services::ConnectorIntegration<
@ -2287,6 +2321,7 @@ impl<const T: u8>
{
}
#[cfg(all(feature = "v2", feature = "revenue_recovery"))]
default_imp_for_additional_revenue_recovery_call!(
connector::Adyenplatform,
connector::Ebanx,

View File

@ -10,8 +10,8 @@ use hyperswitch_domain_models::{
router_data_v2::{
flow_common_types::{
AccessTokenFlowData, DisputesFlowData, ExternalAuthenticationFlowData, FilesFlowData,
MandateRevokeFlowData, PaymentFlowData, RefundFlowData, UasFlowData,
WebhookSourceVerifyData,
MandateRevokeFlowData, PaymentFlowData, RefundFlowData, RevenueRecoveryRecordBackData,
UasFlowData, WebhookSourceVerifyData,
},
RouterDataV2,
},
@ -715,6 +715,42 @@ impl<T, Req: Clone, Resp: Clone> RouterDataConversion<T, Req, Resp>
}
}
impl<T, Req: Clone, Resp: Clone> RouterDataConversion<T, Req, Resp>
for RevenueRecoveryRecordBackData
{
fn from_old_router_data(
old_router_data: &RouterData<T, Req, Resp>,
) -> errors::CustomResult<RouterDataV2<T, Self, Req, Resp>, errors::ConnectorError>
where
Self: Sized,
{
let resource_common_data = Self {};
Ok(RouterDataV2 {
flow: std::marker::PhantomData,
tenant_id: old_router_data.tenant_id.clone(),
resource_common_data,
connector_auth_type: old_router_data.connector_auth_type.clone(),
request: old_router_data.request.clone(),
response: old_router_data.response.clone(),
})
}
fn to_old_router_data(
new_router_data: RouterDataV2<T, Self, Req, Resp>,
) -> errors::CustomResult<RouterData<T, Req, Resp>, errors::ConnectorError>
where
Self: Sized,
{
let router_data = get_default_router_data(
new_router_data.tenant_id.clone(),
"recovery_record_back",
new_router_data.request,
new_router_data.response,
);
Ok(router_data)
}
}
impl<T, Req: Clone, Resp: Clone> RouterDataConversion<T, Req, Resp> for UasFlowData {
fn from_old_router_data(
old_router_data: &RouterData<T, Req, Resp>,