mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-27 19:46:48 +08:00
feat(debit_routing): add debit_routing_savings in analytics payment attempt (#8519)
Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
@ -111,6 +111,7 @@ pub enum PaymentMetrics {
|
||||
AvgTicketSize,
|
||||
RetriesCount,
|
||||
ConnectorSuccessRate,
|
||||
DebitRouting,
|
||||
SessionizedPaymentSuccessRate,
|
||||
SessionizedPaymentCount,
|
||||
SessionizedPaymentSuccessCount,
|
||||
@ -118,6 +119,7 @@ pub enum PaymentMetrics {
|
||||
SessionizedAvgTicketSize,
|
||||
SessionizedRetriesCount,
|
||||
SessionizedConnectorSuccessRate,
|
||||
SessionizedDebitRouting,
|
||||
PaymentsDistribution,
|
||||
FailureReasons,
|
||||
}
|
||||
@ -128,8 +130,10 @@ impl ForexMetric for PaymentMetrics {
|
||||
self,
|
||||
Self::PaymentProcessedAmount
|
||||
| Self::AvgTicketSize
|
||||
| Self::DebitRouting
|
||||
| Self::SessionizedPaymentProcessedAmount
|
||||
| Self::SessionizedAvgTicketSize
|
||||
| Self::SessionizedDebitRouting,
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -309,6 +313,9 @@ pub struct PaymentMetricsBucketValue {
|
||||
pub payments_failure_rate_distribution_with_only_retries: Option<f64>,
|
||||
pub failure_reason_count: Option<u64>,
|
||||
pub failure_reason_count_without_smart_retries: Option<u64>,
|
||||
pub debit_routed_transaction_count: Option<u64>,
|
||||
pub debit_routing_savings: Option<u64>,
|
||||
pub debit_routing_savings_in_usd: Option<u64>,
|
||||
}
|
||||
|
||||
#[derive(Debug, serde::Serialize)]
|
||||
|
||||
@ -67,7 +67,7 @@ pub struct DecidedGateway {
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
|
||||
pub struct DebitRoutingOutput {
|
||||
pub co_badged_card_networks_info: Vec<CoBadgedCardNetworksInfo>,
|
||||
pub co_badged_card_networks_info: CoBadgedCardNetworks,
|
||||
pub issuer_country: common_enums::CountryAlpha2,
|
||||
pub is_regulated: bool,
|
||||
pub regulated_name: Option<common_enums::RegulatedName>,
|
||||
@ -80,19 +80,19 @@ pub struct CoBadgedCardNetworksInfo {
|
||||
pub saving_percentage: f64,
|
||||
}
|
||||
|
||||
impl DebitRoutingOutput {
|
||||
pub fn get_co_badged_card_networks(&self) -> Vec<common_enums::CardNetwork> {
|
||||
self.co_badged_card_networks_info
|
||||
.iter()
|
||||
.map(|data| data.network.clone())
|
||||
.collect()
|
||||
#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
|
||||
pub struct CoBadgedCardNetworks(pub Vec<CoBadgedCardNetworksInfo>);
|
||||
|
||||
impl CoBadgedCardNetworks {
|
||||
pub fn get_card_networks(&self) -> Vec<common_enums::CardNetwork> {
|
||||
self.0.iter().map(|info| info.network.clone()).collect()
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&DebitRoutingOutput> for payment_methods::CoBadgedCardData {
|
||||
fn from(output: &DebitRoutingOutput) -> Self {
|
||||
Self {
|
||||
co_badged_card_networks: output.get_co_badged_card_networks(),
|
||||
co_badged_card_networks_info: output.co_badged_card_networks_info.clone(),
|
||||
issuer_country_code: output.issuer_country,
|
||||
is_regulated: output.is_regulated,
|
||||
regulated_name: output.regulated_name.clone(),
|
||||
@ -111,7 +111,7 @@ impl TryFrom<(payment_methods::CoBadgedCardData, String)> for DebitRoutingReques
|
||||
})?;
|
||||
|
||||
Ok(Self {
|
||||
co_badged_card_networks_info: output.co_badged_card_networks,
|
||||
co_badged_card_networks_info: output.co_badged_card_networks_info.get_card_networks(),
|
||||
issuer_country: output.issuer_country_code,
|
||||
is_regulated: output.is_regulated,
|
||||
regulated_name: output.regulated_name,
|
||||
|
||||
@ -19,7 +19,7 @@ use utoipa::{schema, ToSchema};
|
||||
#[cfg(feature = "payouts")]
|
||||
use crate::payouts;
|
||||
use crate::{
|
||||
admin, enums as api_enums,
|
||||
admin, enums as api_enums, open_router,
|
||||
payments::{self, BankCodeResponse},
|
||||
};
|
||||
|
||||
@ -937,14 +937,14 @@ pub struct PaymentMethodResponse {
|
||||
pub network_token: Option<NetworkTokenResponse>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
pub enum PaymentMethodsData {
|
||||
Card(CardDetailsPaymentMethod),
|
||||
BankDetails(PaymentMethodDataBankCreds),
|
||||
WalletDetails(PaymentMethodDataWalletInfo),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
pub struct CardDetailsPaymentMethod {
|
||||
pub last4_digits: Option<String>,
|
||||
pub issuer_country: Option<String>,
|
||||
@ -958,12 +958,33 @@ pub struct CardDetailsPaymentMethod {
|
||||
pub card_type: Option<String>,
|
||||
#[serde(default = "saved_in_locker_default")]
|
||||
pub saved_to_locker: bool,
|
||||
pub co_badged_card_data: Option<CoBadgedCardData>,
|
||||
pub co_badged_card_data: Option<CoBadgedCardDataToBeSaved>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
impl From<&CoBadgedCardData> for CoBadgedCardDataToBeSaved {
|
||||
fn from(co_badged_card_data: &CoBadgedCardData) -> Self {
|
||||
Self {
|
||||
co_badged_card_networks: co_badged_card_data
|
||||
.co_badged_card_networks_info
|
||||
.get_card_networks(),
|
||||
issuer_country_code: co_badged_card_data.issuer_country_code,
|
||||
is_regulated: co_badged_card_data.is_regulated,
|
||||
regulated_name: co_badged_card_data.regulated_name.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
pub struct CoBadgedCardData {
|
||||
pub co_badged_card_networks: Vec<api_enums::CardNetwork>,
|
||||
pub co_badged_card_networks_info: open_router::CoBadgedCardNetworks,
|
||||
pub issuer_country_code: common_enums::CountryAlpha2,
|
||||
pub is_regulated: bool,
|
||||
pub regulated_name: Option<common_enums::RegulatedName>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
pub struct CoBadgedCardDataToBeSaved {
|
||||
pub co_badged_card_networks: Vec<common_enums::CardNetwork>,
|
||||
pub issuer_country_code: common_enums::CountryAlpha2,
|
||||
pub is_regulated: bool,
|
||||
pub regulated_name: Option<common_enums::RegulatedName>,
|
||||
@ -1325,7 +1346,7 @@ impl From<(CardDetailFromLocker, Option<&CoBadgedCardData>)> for CardDetailsPaym
|
||||
card_network: item.card_network,
|
||||
card_type: item.card_type,
|
||||
saved_to_locker: item.saved_to_locker,
|
||||
co_badged_card_data: co_badged_card_data.cloned(),
|
||||
co_badged_card_data: co_badged_card_data.map(CoBadgedCardDataToBeSaved::from),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user