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 { | ||||
|             AnalyticsCollection::Payment | ||||
|             | AnalyticsCollection::Refund | ||||
|             | AnalyticsCollection::PaymentIntent => { | ||||
|             | AnalyticsCollection::PaymentIntent | ||||
|             | AnalyticsCollection::Dispute => { | ||||
|                 TableEngine::CollapsingMergeTree { sign: "sign_flag" } | ||||
|             } | ||||
|             AnalyticsCollection::SdkEvents => TableEngine::BasicTree, | ||||
| @ -374,6 +375,7 @@ impl ToSql<ClickhouseClient> for AnalyticsCollection { | ||||
|             Self::PaymentIntent => Ok("payment_intents".to_string()), | ||||
|             Self::ConnectorEvents => Ok("connector_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, | ||||
|             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) | ||||
| } | ||||
|  | ||||
| @ -445,6 +445,7 @@ impl ToSql<SqlxClient> for AnalyticsCollection { | ||||
|                 .attach_printable("ConnectorEvents table is not implemented for Sqlx"))?, | ||||
|             Self::OutgoingWebhookEvent => Err(error_stack::report!(ParsingError::UnknownError) | ||||
|                 .attach_printable("OutgoingWebhookEvents table is not implemented for Sqlx"))?, | ||||
|             Self::Dispute => Ok("dispute".to_string()), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -17,6 +17,7 @@ pub enum AnalyticsDomain { | ||||
|     Refunds, | ||||
|     SdkEvents, | ||||
|     ApiEvents, | ||||
|     Dispute, | ||||
| } | ||||
|  | ||||
| #[derive(Debug, strum::AsRefStr, strum::Display, Clone, Copy)] | ||||
| @ -28,6 +29,7 @@ pub enum AnalyticsCollection { | ||||
|     PaymentIntent, | ||||
|     ConnectorEvents, | ||||
|     OutgoingWebhookEvent, | ||||
|     Dispute, | ||||
| } | ||||
|  | ||||
| #[allow(dead_code)] | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| use api_models::analytics::{ | ||||
|     api_event::{ApiEventDimensions, ApiEventMetrics}, | ||||
|     disputes::{DisputeDimensions, DisputeMetrics}, | ||||
|     payments::{PaymentDimensions, PaymentMetrics}, | ||||
|     refunds::{RefundDimensions, RefundMetrics}, | ||||
|     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> { | ||||
|     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 connector_events; | ||||
| pub mod disputes; | ||||
| pub mod outgoing_webhook_event; | ||||
| pub mod payments; | ||||
| 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