mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-11-01 02:57:02 +08:00 
			
		
		
		
	feat(analytics): added dispute as uri param to analytics info api (#3693)
This commit is contained in:
		 harsh-sharma-juspay
					harsh-sharma-juspay
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							e0d8bb207e
						
					
				
				
					commit
					76ac1a753a
				
			| @ -130,7 +130,8 @@ impl AnalyticsDataSource for ClickhouseClient { | |||||||
|         match table { |         match table { | ||||||
|             AnalyticsCollection::Payment |             AnalyticsCollection::Payment | ||||||
|             | AnalyticsCollection::Refund |             | AnalyticsCollection::Refund | ||||||
|             | AnalyticsCollection::PaymentIntent => { |             | AnalyticsCollection::PaymentIntent | ||||||
|  |             | AnalyticsCollection::Dispute => { | ||||||
|                 TableEngine::CollapsingMergeTree { sign: "sign_flag" } |                 TableEngine::CollapsingMergeTree { sign: "sign_flag" } | ||||||
|             } |             } | ||||||
|             AnalyticsCollection::SdkEvents => TableEngine::BasicTree, |             AnalyticsCollection::SdkEvents => TableEngine::BasicTree, | ||||||
| @ -374,6 +375,7 @@ impl ToSql<ClickhouseClient> for AnalyticsCollection { | |||||||
|             Self::PaymentIntent => Ok("payment_intents".to_string()), |             Self::PaymentIntent => Ok("payment_intents".to_string()), | ||||||
|             Self::ConnectorEvents => Ok("connector_events_audit".to_string()), |             Self::ConnectorEvents => Ok("connector_events_audit".to_string()), | ||||||
|             Self::OutgoingWebhookEvent => Ok("outgoing_webhook_events_audit".to_string()), |             Self::OutgoingWebhookEvent => Ok("outgoing_webhook_events_audit".to_string()), | ||||||
|  |             Self::Dispute => Ok("dispute".to_string()), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -26,6 +26,11 @@ pub async fn get_domain_info( | |||||||
|             download_dimensions: None, |             download_dimensions: None, | ||||||
|             dimensions: utils::get_api_event_dimensions(), |             dimensions: utils::get_api_event_dimensions(), | ||||||
|         }, |         }, | ||||||
|  |         AnalyticsDomain::Dispute => GetInfoResponse { | ||||||
|  |             metrics: utils::get_dispute_metrics_info(), | ||||||
|  |             download_dimensions: None, | ||||||
|  |             dimensions: utils::get_dispute_dimensions(), | ||||||
|  |         }, | ||||||
|     }; |     }; | ||||||
|     Ok(info) |     Ok(info) | ||||||
| } | } | ||||||
|  | |||||||
| @ -445,6 +445,7 @@ impl ToSql<SqlxClient> for AnalyticsCollection { | |||||||
|                 .attach_printable("ConnectorEvents table is not implemented for Sqlx"))?, |                 .attach_printable("ConnectorEvents table is not implemented for Sqlx"))?, | ||||||
|             Self::OutgoingWebhookEvent => Err(error_stack::report!(ParsingError::UnknownError) |             Self::OutgoingWebhookEvent => Err(error_stack::report!(ParsingError::UnknownError) | ||||||
|                 .attach_printable("OutgoingWebhookEvents table is not implemented for Sqlx"))?, |                 .attach_printable("OutgoingWebhookEvents table is not implemented for Sqlx"))?, | ||||||
|  |             Self::Dispute => Ok("dispute".to_string()), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -17,6 +17,7 @@ pub enum AnalyticsDomain { | |||||||
|     Refunds, |     Refunds, | ||||||
|     SdkEvents, |     SdkEvents, | ||||||
|     ApiEvents, |     ApiEvents, | ||||||
|  |     Dispute, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug, strum::AsRefStr, strum::Display, Clone, Copy)] | #[derive(Debug, strum::AsRefStr, strum::Display, Clone, Copy)] | ||||||
| @ -28,6 +29,7 @@ pub enum AnalyticsCollection { | |||||||
|     PaymentIntent, |     PaymentIntent, | ||||||
|     ConnectorEvents, |     ConnectorEvents, | ||||||
|     OutgoingWebhookEvent, |     OutgoingWebhookEvent, | ||||||
|  |     Dispute, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[allow(dead_code)] | #[allow(dead_code)] | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| use api_models::analytics::{ | use api_models::analytics::{ | ||||||
|     api_event::{ApiEventDimensions, ApiEventMetrics}, |     api_event::{ApiEventDimensions, ApiEventMetrics}, | ||||||
|  |     disputes::{DisputeDimensions, DisputeMetrics}, | ||||||
|     payments::{PaymentDimensions, PaymentMetrics}, |     payments::{PaymentDimensions, PaymentMetrics}, | ||||||
|     refunds::{RefundDimensions, RefundMetrics}, |     refunds::{RefundDimensions, RefundMetrics}, | ||||||
|     sdk_events::{SdkEventDimensions, SdkEventMetrics}, |     sdk_events::{SdkEventDimensions, SdkEventMetrics}, | ||||||
| @ -38,3 +39,11 @@ pub fn get_sdk_event_metrics_info() -> Vec<NameDescription> { | |||||||
| pub fn get_api_event_metrics_info() -> Vec<NameDescription> { | pub fn get_api_event_metrics_info() -> Vec<NameDescription> { | ||||||
|     ApiEventMetrics::iter().map(Into::into).collect() |     ApiEventMetrics::iter().map(Into::into).collect() | ||||||
| } | } | ||||||
|  |  | ||||||
|  | pub fn get_dispute_metrics_info() -> Vec<NameDescription> { | ||||||
|  |     DisputeMetrics::iter().map(Into::into).collect() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | pub fn get_dispute_dimensions() -> Vec<NameDescription> { | ||||||
|  |     DisputeDimensions::iter().map(Into::into).collect() | ||||||
|  | } | ||||||
|  | |||||||
| @ -13,6 +13,7 @@ pub use crate::payments::TimeRange; | |||||||
|  |  | ||||||
| pub mod api_event; | pub mod api_event; | ||||||
| pub mod connector_events; | pub mod connector_events; | ||||||
|  | pub mod disputes; | ||||||
| pub mod outgoing_webhook_event; | pub mod outgoing_webhook_event; | ||||||
| pub mod payments; | pub mod payments; | ||||||
| pub mod refunds; | pub mod refunds; | ||||||
|  | |||||||
							
								
								
									
										65
									
								
								crates/api_models/src/analytics/disputes.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								crates/api_models/src/analytics/disputes.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | |||||||
|  | use super::NameDescription; | ||||||
|  |  | ||||||
|  | #[derive( | ||||||
|  |     Clone, | ||||||
|  |     Debug, | ||||||
|  |     Hash, | ||||||
|  |     PartialEq, | ||||||
|  |     Eq, | ||||||
|  |     serde::Serialize, | ||||||
|  |     serde::Deserialize, | ||||||
|  |     strum::Display, | ||||||
|  |     strum::EnumIter, | ||||||
|  |     strum::AsRefStr, | ||||||
|  | )] | ||||||
|  | #[strum(serialize_all = "snake_case")] | ||||||
|  | #[serde(rename_all = "snake_case")] | ||||||
|  | pub enum DisputeMetrics { | ||||||
|  |     DisputesChallenged, | ||||||
|  |     DisputesWon, | ||||||
|  |     DisputesLost, | ||||||
|  |     TotalAmountDisputed, | ||||||
|  |     TotalDisputeLostAmount, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[derive( | ||||||
|  |     Debug, | ||||||
|  |     serde::Serialize, | ||||||
|  |     serde::Deserialize, | ||||||
|  |     strum::AsRefStr, | ||||||
|  |     PartialEq, | ||||||
|  |     PartialOrd, | ||||||
|  |     Eq, | ||||||
|  |     Ord, | ||||||
|  |     strum::Display, | ||||||
|  |     strum::EnumIter, | ||||||
|  |     Clone, | ||||||
|  |     Copy, | ||||||
|  | )] | ||||||
|  | #[serde(rename_all = "snake_case")] | ||||||
|  | #[strum(serialize_all = "snake_case")] | ||||||
|  | pub enum DisputeDimensions { | ||||||
|  |     // Do not change the order of these enums | ||||||
|  |     // Consult the Dashboard FE folks since these also affects the order of metrics on FE | ||||||
|  |     Connector, | ||||||
|  |     DisputeStatus, | ||||||
|  |     ConnectorStatus, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | impl From<DisputeDimensions> for NameDescription { | ||||||
|  |     fn from(value: DisputeDimensions) -> Self { | ||||||
|  |         Self { | ||||||
|  |             name: value.to_string(), | ||||||
|  |             desc: String::new(), | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | impl From<DisputeMetrics> for NameDescription { | ||||||
|  |     fn from(value: DisputeMetrics) -> Self { | ||||||
|  |         Self { | ||||||
|  |             name: value.to_string(), | ||||||
|  |             desc: String::new(), | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user