diff --git a/crates/analytics/src/active_payments/metrics.rs b/crates/analytics/src/active_payments/metrics.rs index e7b4ff3f5b..5526f30fd6 100644 --- a/crates/analytics/src/active_payments/metrics.rs +++ b/crates/analytics/src/active_payments/metrics.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ active_payments::{ActivePaymentsMetrics, ActivePaymentsMetricsBucketIdentifier}, Granularity, TimeRange, @@ -13,7 +15,7 @@ mod active_payments; use active_payments::ActivePayments; -#[derive(Debug, PartialEq, Eq, serde::Deserialize)] +#[derive(Debug, PartialEq, Eq, serde::Deserialize, Hash)] pub struct ActivePaymentsMetricRow { pub count: Option, } @@ -32,7 +34,7 @@ where time_range: &TimeRange, pool: &T, ) -> MetricsResult< - Vec<( + HashSet<( ActivePaymentsMetricsBucketIdentifier, ActivePaymentsMetricRow, )>, @@ -56,7 +58,7 @@ where time_range: &TimeRange, pool: &T, ) -> MetricsResult< - Vec<( + HashSet<( ActivePaymentsMetricsBucketIdentifier, ActivePaymentsMetricRow, )>, diff --git a/crates/analytics/src/active_payments/metrics/active_payments.rs b/crates/analytics/src/active_payments/metrics/active_payments.rs index 60209e3975..30621c98c7 100644 --- a/crates/analytics/src/active_payments/metrics/active_payments.rs +++ b/crates/analytics/src/active_payments/metrics/active_payments.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ active_payments::ActivePaymentsMetricsBucketIdentifier, Granularity, TimeRange, }; @@ -31,7 +33,7 @@ where time_range: &TimeRange, pool: &T, ) -> MetricsResult< - Vec<( + HashSet<( ActivePaymentsMetricsBucketIdentifier, ActivePaymentsMetricRow, )>, @@ -79,7 +81,7 @@ where .into_iter() .map(|i| Ok((ActivePaymentsMetricsBucketIdentifier::new(None), i))) .collect::, diff --git a/crates/analytics/src/api_event/metrics.rs b/crates/analytics/src/api_event/metrics.rs index 16f2d7a2f5..1a08b56a59 100644 --- a/crates/analytics/src/api_event/metrics.rs +++ b/crates/analytics/src/api_event/metrics.rs @@ -14,13 +14,15 @@ use crate::{ mod api_count; pub mod latency; mod status_code_count; +use std::collections::HashSet; + use api_count::ApiCount; use latency::MaxLatency; use status_code_count::StatusCodeCount; use self::latency::LatencyAvg; -#[derive(Debug, PartialEq, Eq, serde::Deserialize)] +#[derive(Debug, PartialEq, Eq, serde::Deserialize, Hash)] pub struct ApiEventMetricRow { pub latency: Option, pub api_count: Option, @@ -46,7 +48,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult>; + ) -> MetricsResult>; } #[async_trait::async_trait] @@ -67,7 +69,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { match self { Self::Latency => { MaxLatency diff --git a/crates/analytics/src/api_event/metrics/api_count.rs b/crates/analytics/src/api_event/metrics/api_count.rs index 7f5f291aa5..cb9d559292 100644 --- a/crates/analytics/src/api_event/metrics/api_count.rs +++ b/crates/analytics/src/api_event/metrics/api_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ api_event::{ApiEventDimensions, ApiEventFilters, ApiEventMetricsBucketIdentifier}, Granularity, TimeRange, @@ -33,7 +35,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::ApiEvents); query_builder @@ -98,7 +100,7 @@ where )) }) .collect::, + HashSet<(ApiEventMetricsBucketIdentifier, ApiEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/api_event/metrics/latency.rs b/crates/analytics/src/api_event/metrics/latency.rs index 379b39fbeb..20fb648945 100644 --- a/crates/analytics/src/api_event/metrics/latency.rs +++ b/crates/analytics/src/api_event/metrics/latency.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ api_event::{ApiEventDimensions, ApiEventFilters, ApiEventMetricsBucketIdentifier}, Granularity, TimeRange, @@ -36,7 +38,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::ApiEvents); query_builder @@ -120,7 +122,7 @@ where )) }) .collect::, + HashSet<(ApiEventMetricsBucketIdentifier, ApiEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/api_event/metrics/status_code_count.rs b/crates/analytics/src/api_event/metrics/status_code_count.rs index 5c652fd8e0..a513016921 100644 --- a/crates/analytics/src/api_event/metrics/status_code_count.rs +++ b/crates/analytics/src/api_event/metrics/status_code_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ api_event::{ApiEventDimensions, ApiEventFilters, ApiEventMetricsBucketIdentifier}, Granularity, TimeRange, @@ -33,7 +35,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::ApiEvents); query_builder @@ -95,7 +97,7 @@ where )) }) .collect::, + HashSet<(ApiEventMetricsBucketIdentifier, ApiEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/auth_events/metrics.rs b/crates/analytics/src/auth_events/metrics.rs index ae61aefb85..6690850a80 100644 --- a/crates/analytics/src/auth_events/metrics.rs +++ b/crates/analytics/src/auth_events/metrics.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::{AuthEventMetrics, AuthEventMetricsBucketIdentifier}, Granularity, TimeRange, @@ -27,7 +29,7 @@ use frictionless_flow_count::FrictionlessFlowCount; use frictionless_success_count::FrictionlessSuccessCount; use three_ds_sdk_count::ThreeDsSdkCount; -#[derive(Debug, PartialEq, Eq, serde::Deserialize)] +#[derive(Debug, PartialEq, Eq, serde::Deserialize, Hash)] pub struct AuthEventMetricRow { pub count: Option, pub time_bucket: Option, @@ -47,7 +49,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult>; + ) -> MetricsResult>; } #[async_trait::async_trait] @@ -67,7 +69,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { match self { Self::ThreeDsSdkCount => { ThreeDsSdkCount diff --git a/crates/analytics/src/auth_events/metrics/authentication_attempt_count.rs b/crates/analytics/src/auth_events/metrics/authentication_attempt_count.rs index 0111085880..80c80db92f 100644 --- a/crates/analytics/src/auth_events/metrics/authentication_attempt_count.rs +++ b/crates/analytics/src/auth_events/metrics/authentication_attempt_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::AuthEventMetricsBucketIdentifier, sdk_events::SdkEventNames, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); @@ -94,7 +96,7 @@ where )) }) .collect::, + HashSet<(AuthEventMetricsBucketIdentifier, AuthEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/auth_events/metrics/authentication_success_count.rs b/crates/analytics/src/auth_events/metrics/authentication_success_count.rs index 6f0580bb0b..bfcfbaf3a6 100644 --- a/crates/analytics/src/auth_events/metrics/authentication_success_count.rs +++ b/crates/analytics/src/auth_events/metrics/authentication_success_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::AuthEventMetricsBucketIdentifier, sdk_events::SdkEventNames, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); @@ -94,7 +96,7 @@ where )) }) .collect::, + HashSet<(AuthEventMetricsBucketIdentifier, AuthEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/auth_events/metrics/challenge_attempt_count.rs b/crates/analytics/src/auth_events/metrics/challenge_attempt_count.rs index f2d2ab153f..b146c053d3 100644 --- a/crates/analytics/src/auth_events/metrics/challenge_attempt_count.rs +++ b/crates/analytics/src/auth_events/metrics/challenge_attempt_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::{AuthEventFlows, AuthEventMetricsBucketIdentifier}, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::ApiEventsAnalytics); @@ -86,7 +88,7 @@ where )) }) .collect::, + HashSet<(AuthEventMetricsBucketIdentifier, AuthEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/auth_events/metrics/challenge_flow_count.rs b/crates/analytics/src/auth_events/metrics/challenge_flow_count.rs index 49fef8941f..b2921bb3ec 100644 --- a/crates/analytics/src/auth_events/metrics/challenge_flow_count.rs +++ b/crates/analytics/src/auth_events/metrics/challenge_flow_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::AuthEventMetricsBucketIdentifier, sdk_events::SdkEventNames, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); @@ -96,7 +98,7 @@ where )) }) .collect::, + HashSet<(AuthEventMetricsBucketIdentifier, AuthEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/auth_events/metrics/challenge_success_count.rs b/crates/analytics/src/auth_events/metrics/challenge_success_count.rs index b7d55714b6..f6553f84f8 100644 --- a/crates/analytics/src/auth_events/metrics/challenge_success_count.rs +++ b/crates/analytics/src/auth_events/metrics/challenge_success_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::{AuthEventFlows, AuthEventMetricsBucketIdentifier}, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::ApiEventsAnalytics); @@ -86,7 +88,7 @@ where )) }) .collect::, + HashSet<(AuthEventMetricsBucketIdentifier, AuthEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/auth_events/metrics/frictionless_flow_count.rs b/crates/analytics/src/auth_events/metrics/frictionless_flow_count.rs index 7ae9d77367..42261f09b3 100644 --- a/crates/analytics/src/auth_events/metrics/frictionless_flow_count.rs +++ b/crates/analytics/src/auth_events/metrics/frictionless_flow_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::AuthEventMetricsBucketIdentifier, sdk_events::SdkEventNames, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); @@ -98,7 +100,7 @@ where )) }) .collect::, + HashSet<(AuthEventMetricsBucketIdentifier, AuthEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/auth_events/metrics/frictionless_success_count.rs b/crates/analytics/src/auth_events/metrics/frictionless_success_count.rs index 2f05a050ce..4d7eed972f 100644 --- a/crates/analytics/src/auth_events/metrics/frictionless_success_count.rs +++ b/crates/analytics/src/auth_events/metrics/frictionless_success_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::{AuthEventFlows, AuthEventMetricsBucketIdentifier}, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::ApiEventsAnalytics); @@ -86,7 +88,7 @@ where )) }) .collect::, + HashSet<(AuthEventMetricsBucketIdentifier, AuthEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/auth_events/metrics/three_ds_sdk_count.rs b/crates/analytics/src/auth_events/metrics/three_ds_sdk_count.rs index b08d48b550..05173bcb9d 100644 --- a/crates/analytics/src/auth_events/metrics/three_ds_sdk_count.rs +++ b/crates/analytics/src/auth_events/metrics/three_ds_sdk_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ auth_events::AuthEventMetricsBucketIdentifier, sdk_events::SdkEventNames, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); @@ -94,7 +96,7 @@ where )) }) .collect::, + HashSet<(AuthEventMetricsBucketIdentifier, AuthEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/disputes/metrics.rs b/crates/analytics/src/disputes/metrics.rs index 4963626d0f..e397785528 100644 --- a/crates/analytics/src/disputes/metrics.rs +++ b/crates/analytics/src/disputes/metrics.rs @@ -2,6 +2,8 @@ mod dispute_status_metric; mod total_amount_disputed; mod total_dispute_lost_amount; +use std::collections::HashSet; + use api_models::{ analytics::{ disputes::{ @@ -22,7 +24,7 @@ use crate::{ query::{Aggregate, GroupByClause, ToSql, Window}, types::{AnalyticsCollection, AnalyticsDataSource, DBEnumWrapper, LoadRow, MetricsResult}, }; -#[derive(Debug, Eq, PartialEq, serde::Deserialize)] +#[derive(Debug, Eq, PartialEq, serde::Deserialize, Hash)] pub struct DisputeMetricRow { pub dispute_stage: Option>, pub dispute_status: Option>, @@ -55,7 +57,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult>; + ) -> MetricsResult>; } #[async_trait::async_trait] @@ -76,7 +78,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { match self { Self::TotalAmountDisputed => { TotalAmountDisputed::default() diff --git a/crates/analytics/src/disputes/metrics/dispute_status_metric.rs b/crates/analytics/src/disputes/metrics/dispute_status_metric.rs index 5b97021bec..005be320eb 100644 --- a/crates/analytics/src/disputes/metrics/dispute_status_metric.rs +++ b/crates/analytics/src/disputes/metrics/dispute_status_metric.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ disputes::{DisputeDimensions, DisputeFilters, DisputeMetricsBucketIdentifier}, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> + ) -> MetricsResult> where T: AnalyticsDataSource + super::DisputeMetricAnalytics, { @@ -111,7 +113,7 @@ where )) }) .collect::, + HashSet<(DisputeMetricsBucketIdentifier, DisputeMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/disputes/metrics/total_amount_disputed.rs b/crates/analytics/src/disputes/metrics/total_amount_disputed.rs index cbba553aa8..cf299ebfa9 100644 --- a/crates/analytics/src/disputes/metrics/total_amount_disputed.rs +++ b/crates/analytics/src/disputes/metrics/total_amount_disputed.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ disputes::{DisputeDimensions, DisputeFilters, DisputeMetricsBucketIdentifier}, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> + ) -> MetricsResult> where T: AnalyticsDataSource + super::DisputeMetricAnalytics, { @@ -110,7 +112,7 @@ where i, )) }) - .collect::, crate::query::PostProcessingError>>() + .collect::, crate::query::PostProcessingError>>() .change_context(MetricsError::PostProcessingFailure) } } diff --git a/crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs b/crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs index c7be2ab1a9..ddf6338f01 100644 --- a/crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs +++ b/crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ disputes::{DisputeDimensions, DisputeFilters, DisputeMetricsBucketIdentifier}, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> + ) -> MetricsResult> where T: AnalyticsDataSource + super::DisputeMetricAnalytics, { @@ -111,7 +113,7 @@ where i, )) }) - .collect::, crate::query::PostProcessingError>>() + .collect::, crate::query::PostProcessingError>>() .change_context(MetricsError::PostProcessingFailure) } } diff --git a/crates/analytics/src/lib.rs b/crates/analytics/src/lib.rs index ca9802b7d3..34dcc35d9e 100644 --- a/crates/analytics/src/lib.rs +++ b/crates/analytics/src/lib.rs @@ -32,7 +32,7 @@ pub use types::AnalyticsDomain; pub mod lambda_utils; pub mod utils; -use std::sync::Arc; +use std::{collections::HashSet, sync::Arc}; use api_models::analytics::{ active_payments::{ActivePaymentsMetrics, ActivePaymentsMetricsBucketIdentifier}, @@ -116,7 +116,7 @@ impl AnalyticsProvider { filters: &PaymentFilters, granularity: &Option, time_range: &TimeRange, - ) -> types::MetricsResult> { + ) -> types::MetricsResult> { // Metrics to get the fetch time for each payment metric metrics::request::record_operation_time( async { @@ -330,7 +330,7 @@ impl AnalyticsProvider { filters: &PaymentIntentFilters, granularity: &Option, time_range: &TimeRange, - ) -> types::MetricsResult> + ) -> types::MetricsResult> { // Metrics to get the fetch time for each payment intent metric metrics::request::record_operation_time( @@ -435,7 +435,7 @@ impl AnalyticsProvider { filters: &RefundFilters, granularity: &Option, time_range: &TimeRange, - ) -> types::MetricsResult> { + ) -> types::MetricsResult> { // Metrics to get the fetch time for each refund metric metrics::request::record_operation_time( async { @@ -635,7 +635,7 @@ impl AnalyticsProvider { filters: &DisputeFilters, granularity: &Option, time_range: &TimeRange, - ) -> types::MetricsResult> { + ) -> types::MetricsResult> { // Metrics to get the fetch time for each refund metric metrics::request::record_operation_time( async { @@ -735,7 +735,7 @@ impl AnalyticsProvider { filters: &SdkEventFilters, granularity: &Option, time_range: &TimeRange, - ) -> types::MetricsResult> { + ) -> types::MetricsResult> { match self { Self::Sqlx(_pool) => Err(report!(MetricsError::NotImplemented)), Self::Clickhouse(pool) => { @@ -773,7 +773,7 @@ impl AnalyticsProvider { publishable_key: &str, time_range: &TimeRange, ) -> types::MetricsResult< - Vec<( + HashSet<( ActivePaymentsMetricsBucketIdentifier, ActivePaymentsMetricRow, )>, @@ -800,7 +800,7 @@ impl AnalyticsProvider { publishable_key: &str, granularity: &Option, time_range: &TimeRange, - ) -> types::MetricsResult> { + ) -> types::MetricsResult> { match self { Self::Sqlx(_pool) => Err(report!(MetricsError::NotImplemented)), Self::Clickhouse(pool) => { @@ -831,7 +831,7 @@ impl AnalyticsProvider { filters: &ApiEventFilters, granularity: &Option, time_range: &TimeRange, - ) -> types::MetricsResult> { + ) -> types::MetricsResult> { match self { Self::Sqlx(_pool) => Err(report!(MetricsError::NotImplemented)), Self::Clickhouse(ckh_pool) diff --git a/crates/analytics/src/payment_intents/core.rs b/crates/analytics/src/payment_intents/core.rs index e3932baaf0..c7546a4ab0 100644 --- a/crates/analytics/src/payment_intents/core.rs +++ b/crates/analytics/src/payment_intents/core.rs @@ -1,5 +1,5 @@ #![allow(dead_code)] -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use api_models::analytics::{ payment_intents::{ @@ -34,7 +34,7 @@ pub enum TaskType { MetricTask( PaymentIntentMetrics, CustomResult< - Vec<(PaymentIntentMetricsBucketIdentifier, PaymentIntentMetricRow)>, + HashSet<(PaymentIntentMetricsBucketIdentifier, PaymentIntentMetricRow)>, AnalyticsError, >, ), diff --git a/crates/analytics/src/payment_intents/metrics.rs b/crates/analytics/src/payment_intents/metrics.rs index 3a0cbbc85d..a06d76ce8f 100644 --- a/crates/analytics/src/payment_intents/metrics.rs +++ b/crates/analytics/src/payment_intents/metrics.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payment_intents::{ PaymentIntentDimensions, PaymentIntentFilters, PaymentIntentMetrics, @@ -23,7 +25,7 @@ use smart_retried_amount::SmartRetriedAmount; use successful_smart_retries::SuccessfulSmartRetries; use total_smart_retries::TotalSmartRetries; -#[derive(Debug, PartialEq, Eq, serde::Deserialize)] +#[derive(Debug, PartialEq, Eq, serde::Deserialize, Hash)] pub struct PaymentIntentMetricRow { pub status: Option>, pub currency: Option>, @@ -50,7 +52,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult>; + ) -> MetricsResult>; } #[async_trait::async_trait] @@ -71,7 +73,8 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> + { match self { Self::SuccessfulSmartRetries => { SuccessfulSmartRetries diff --git a/crates/analytics/src/payment_intents/metrics/payment_intent_count.rs b/crates/analytics/src/payment_intents/metrics/payment_intent_count.rs index 0f235375c4..5db153c8a3 100644 --- a/crates/analytics/src/payment_intents/metrics/payment_intent_count.rs +++ b/crates/analytics/src/payment_intents/metrics/payment_intent_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payment_intents::{ PaymentIntentDimensions, PaymentIntentFilters, PaymentIntentMetricsBucketIdentifier, @@ -35,7 +37,8 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> + { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::PaymentIntent); @@ -113,7 +116,7 @@ where )) }) .collect::, + HashSet<(PaymentIntentMetricsBucketIdentifier, PaymentIntentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payment_intents/metrics/smart_retried_amount.rs b/crates/analytics/src/payment_intents/metrics/smart_retried_amount.rs index 470a0e6686..3b78a35582 100644 --- a/crates/analytics/src/payment_intents/metrics/smart_retried_amount.rs +++ b/crates/analytics/src/payment_intents/metrics/smart_retried_amount.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::{ analytics::{ payment_intents::{ @@ -41,7 +43,8 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> + { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::PaymentIntent); @@ -123,7 +126,7 @@ where )) }) .collect::, + HashSet<(PaymentIntentMetricsBucketIdentifier, PaymentIntentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payment_intents/metrics/successful_smart_retries.rs b/crates/analytics/src/payment_intents/metrics/successful_smart_retries.rs index 292062d1e1..ef0bb6672f 100644 --- a/crates/analytics/src/payment_intents/metrics/successful_smart_retries.rs +++ b/crates/analytics/src/payment_intents/metrics/successful_smart_retries.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::{ analytics::{ payment_intents::{ @@ -41,7 +43,8 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> + { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::PaymentIntent); @@ -122,7 +125,7 @@ where )) }) .collect::, + HashSet<(PaymentIntentMetricsBucketIdentifier, PaymentIntentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payment_intents/metrics/total_smart_retries.rs b/crates/analytics/src/payment_intents/metrics/total_smart_retries.rs index d5a3d142ba..3ef8c02aca 100644 --- a/crates/analytics/src/payment_intents/metrics/total_smart_retries.rs +++ b/crates/analytics/src/payment_intents/metrics/total_smart_retries.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payment_intents::{ PaymentIntentDimensions, PaymentIntentFilters, PaymentIntentMetricsBucketIdentifier, @@ -38,7 +40,8 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> + { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::PaymentIntent); @@ -117,7 +120,7 @@ where )) }) .collect::, + HashSet<(PaymentIntentMetricsBucketIdentifier, PaymentIntentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payments/core.rs b/crates/analytics/src/payments/core.rs index 2508866626..e943bf0ac6 100644 --- a/crates/analytics/src/payments/core.rs +++ b/crates/analytics/src/payments/core.rs @@ -1,5 +1,5 @@ #![allow(dead_code)] -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use api_models::analytics::{ payments::{ @@ -34,7 +34,7 @@ use crate::{ pub enum TaskType { MetricTask( PaymentMetrics, - CustomResult, AnalyticsError>, + CustomResult, AnalyticsError>, ), DistributionTask( PaymentDistributions, diff --git a/crates/analytics/src/payments/metrics.rs b/crates/analytics/src/payments/metrics.rs index 59a9ca88a8..1dd1481688 100644 --- a/crates/analytics/src/payments/metrics.rs +++ b/crates/analytics/src/payments/metrics.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payments::{PaymentDimensions, PaymentFilters, PaymentMetrics, PaymentMetricsBucketIdentifier}, Granularity, TimeRange, @@ -27,7 +29,7 @@ use success_rate::PaymentSuccessRate; use self::retries_count::RetriesCount; -#[derive(Debug, PartialEq, Eq, serde::Deserialize)] +#[derive(Debug, PartialEq, Eq, serde::Deserialize, Hash)] pub struct PaymentMetricRow { pub currency: Option>, pub status: Option>, @@ -60,7 +62,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult>; + ) -> MetricsResult>; } #[async_trait::async_trait] @@ -81,7 +83,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { match self { Self::PaymentSuccessRate => { PaymentSuccessRate diff --git a/crates/analytics/src/payments/metrics/avg_ticket_size.rs b/crates/analytics/src/payments/metrics/avg_ticket_size.rs index 38ab0a9540..1a1fbe5298 100644 --- a/crates/analytics/src/payments/metrics/avg_ticket_size.rs +++ b/crates/analytics/src/payments/metrics/avg_ticket_size.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payments::{PaymentDimensions, PaymentFilters, PaymentMetricsBucketIdentifier}, Granularity, TimeRange, @@ -34,7 +36,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::Payment); for dim in dimensions.iter() { @@ -130,7 +132,7 @@ where )) }) .collect::, + HashSet<(PaymentMetricsBucketIdentifier, PaymentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payments/metrics/connector_success_rate.rs b/crates/analytics/src/payments/metrics/connector_success_rate.rs index 2742327f4a..c5da4b51a0 100644 --- a/crates/analytics/src/payments/metrics/connector_success_rate.rs +++ b/crates/analytics/src/payments/metrics/connector_success_rate.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payments::{PaymentDimensions, PaymentFilters, PaymentMetricsBucketIdentifier}, Granularity, TimeRange, @@ -36,7 +38,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::Payment); let mut dimensions = dimensions.to_vec(); @@ -124,7 +126,7 @@ where )) }) .collect::, + HashSet<(PaymentMetricsBucketIdentifier, PaymentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payments/metrics/payment_count.rs b/crates/analytics/src/payments/metrics/payment_count.rs index 50ea1791b3..6fd12edea7 100644 --- a/crates/analytics/src/payments/metrics/payment_count.rs +++ b/crates/analytics/src/payments/metrics/payment_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payments::{PaymentDimensions, PaymentFilters, PaymentMetricsBucketIdentifier}, Granularity, TimeRange, @@ -33,7 +35,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::Payment); for dim in dimensions.iter() { @@ -115,7 +117,7 @@ where i, )) }) - .collect::, crate::query::PostProcessingError>>() + .collect::, crate::query::PostProcessingError>>() .change_context(MetricsError::PostProcessingFailure) } } diff --git a/crates/analytics/src/payments/metrics/payment_processed_amount.rs b/crates/analytics/src/payments/metrics/payment_processed_amount.rs index 6ea5b15734..772156a070 100644 --- a/crates/analytics/src/payments/metrics/payment_processed_amount.rs +++ b/crates/analytics/src/payments/metrics/payment_processed_amount.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payments::{PaymentDimensions, PaymentFilters, PaymentMetricsBucketIdentifier}, Granularity, TimeRange, @@ -34,7 +36,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::Payment); for dim in dimensions.iter() { @@ -124,7 +126,7 @@ where )) }) .collect::, + HashSet<(PaymentMetricsBucketIdentifier, PaymentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payments/metrics/payment_success_count.rs b/crates/analytics/src/payments/metrics/payment_success_count.rs index 4350700618..ce63424d1c 100644 --- a/crates/analytics/src/payments/metrics/payment_success_count.rs +++ b/crates/analytics/src/payments/metrics/payment_success_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payments::{PaymentDimensions, PaymentFilters, PaymentMetricsBucketIdentifier}, Granularity, TimeRange, @@ -34,7 +36,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::Payment); for dim in dimensions.iter() { @@ -123,7 +125,7 @@ where )) }) .collect::, + HashSet<(PaymentMetricsBucketIdentifier, PaymentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payments/metrics/retries_count.rs b/crates/analytics/src/payments/metrics/retries_count.rs index 3c4580d37a..33aa7d3b0b 100644 --- a/crates/analytics/src/payments/metrics/retries_count.rs +++ b/crates/analytics/src/payments/metrics/retries_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::{ analytics::{ payments::{PaymentDimensions, PaymentFilters, PaymentMetricsBucketIdentifier}, @@ -39,7 +41,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::PaymentIntent); query_builder @@ -119,7 +121,7 @@ where )) }) .collect::, + HashSet<(PaymentMetricsBucketIdentifier, PaymentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/payments/metrics/success_rate.rs b/crates/analytics/src/payments/metrics/success_rate.rs index a0c67c1d80..1f48deaad1 100644 --- a/crates/analytics/src/payments/metrics/success_rate.rs +++ b/crates/analytics/src/payments/metrics/success_rate.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ payments::{PaymentDimensions, PaymentFilters, PaymentMetricsBucketIdentifier}, Granularity, TimeRange, @@ -33,7 +35,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::Payment); let mut dimensions = dimensions.to_vec(); @@ -119,7 +121,7 @@ where )) }) .collect::, + HashSet<(PaymentMetricsBucketIdentifier, PaymentMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/refunds/metrics.rs b/crates/analytics/src/refunds/metrics.rs index 10cd035467..d8a59e5488 100644 --- a/crates/analytics/src/refunds/metrics.rs +++ b/crates/analytics/src/refunds/metrics.rs @@ -10,6 +10,8 @@ mod refund_count; mod refund_processed_amount; mod refund_success_count; mod refund_success_rate; +use std::collections::HashSet; + use refund_count::RefundCount; use refund_processed_amount::RefundProcessedAmount; use refund_success_count::RefundSuccessCount; @@ -19,7 +21,8 @@ use crate::{ query::{Aggregate, GroupByClause, ToSql, Window}, types::{AnalyticsCollection, AnalyticsDataSource, DBEnumWrapper, LoadRow, MetricsResult}, }; -#[derive(Debug, Eq, PartialEq, serde::Deserialize)] + +#[derive(Debug, Eq, PartialEq, serde::Deserialize, Hash)] pub struct RefundMetricRow { pub currency: Option>, pub refund_status: Option>, @@ -53,7 +56,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult>; + ) -> MetricsResult>; } #[async_trait::async_trait] @@ -74,7 +77,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { match self { Self::RefundSuccessRate => { RefundSuccessRate::default() diff --git a/crates/analytics/src/refunds/metrics/refund_count.rs b/crates/analytics/src/refunds/metrics/refund_count.rs index cf3c7a5092..14240ff8e1 100644 --- a/crates/analytics/src/refunds/metrics/refund_count.rs +++ b/crates/analytics/src/refunds/metrics/refund_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ refunds::{RefundDimensions, RefundFilters, RefundMetricsBucketIdentifier}, Granularity, TimeRange, @@ -33,7 +35,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::Refund); for dim in dimensions.iter() { @@ -111,7 +113,7 @@ where i, )) }) - .collect::, crate::query::PostProcessingError>>() + .collect::, crate::query::PostProcessingError>>() .change_context(MetricsError::PostProcessingFailure) } } diff --git a/crates/analytics/src/refunds/metrics/refund_processed_amount.rs b/crates/analytics/src/refunds/metrics/refund_processed_amount.rs index 661fca57b2..829b11b082 100644 --- a/crates/analytics/src/refunds/metrics/refund_processed_amount.rs +++ b/crates/analytics/src/refunds/metrics/refund_processed_amount.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ refunds::{RefundDimensions, RefundFilters, RefundMetricsBucketIdentifier}, Granularity, TimeRange, @@ -33,7 +35,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> + ) -> MetricsResult> where T: AnalyticsDataSource + super::RefundMetricAnalytics, { @@ -117,7 +119,7 @@ where i, )) }) - .collect::, crate::query::PostProcessingError>>() + .collect::, crate::query::PostProcessingError>>() .change_context(MetricsError::PostProcessingFailure) } } diff --git a/crates/analytics/src/refunds/metrics/refund_success_count.rs b/crates/analytics/src/refunds/metrics/refund_success_count.rs index bc09d8b7ab..0219340b40 100644 --- a/crates/analytics/src/refunds/metrics/refund_success_count.rs +++ b/crates/analytics/src/refunds/metrics/refund_success_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ refunds::{RefundDimensions, RefundFilters, RefundMetricsBucketIdentifier}, Granularity, TimeRange, @@ -34,7 +36,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> + ) -> MetricsResult> where T: AnalyticsDataSource + super::RefundMetricAnalytics, { @@ -115,7 +117,7 @@ where )) }) .collect::, + HashSet<(RefundMetricsBucketIdentifier, RefundMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/refunds/metrics/refund_success_rate.rs b/crates/analytics/src/refunds/metrics/refund_success_rate.rs index 29b73b885d..36d82385b3 100644 --- a/crates/analytics/src/refunds/metrics/refund_success_rate.rs +++ b/crates/analytics/src/refunds/metrics/refund_success_rate.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ refunds::{RefundDimensions, RefundFilters, RefundMetricsBucketIdentifier}, Granularity, TimeRange, @@ -32,7 +34,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> + ) -> MetricsResult> where T: AnalyticsDataSource + super::RefundMetricAnalytics, { @@ -110,7 +112,7 @@ where )) }) .collect::, + HashSet<(RefundMetricsBucketIdentifier, RefundMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/sdk_events/metrics.rs b/crates/analytics/src/sdk_events/metrics.rs index 50481084e4..7d5ad0c53d 100644 --- a/crates/analytics/src/sdk_events/metrics.rs +++ b/crates/analytics/src/sdk_events/metrics.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetrics, SdkEventMetricsBucketIdentifier, @@ -29,7 +31,7 @@ use payment_methods_call_count::PaymentMethodsCallCount; use sdk_initiated_count::SdkInitiatedCount; use sdk_rendered_count::SdkRenderedCount; -#[derive(Debug, PartialEq, Eq, serde::Deserialize)] +#[derive(Debug, PartialEq, Eq, serde::Deserialize, Hash)] pub struct SdkEventMetricRow { pub total: Option, pub count: Option, @@ -57,7 +59,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult>; + ) -> MetricsResult>; } #[async_trait::async_trait] @@ -78,7 +80,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { match self { Self::PaymentAttempts => { PaymentAttempts diff --git a/crates/analytics/src/sdk_events/metrics/average_payment_time.rs b/crates/analytics/src/sdk_events/metrics/average_payment_time.rs index 88c96d33ef..c7f6bca988 100644 --- a/crates/analytics/src/sdk_events/metrics/average_payment_time.rs +++ b/crates/analytics/src/sdk_events/metrics/average_payment_time.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetricsBucketIdentifier, SdkEventNames, @@ -35,7 +37,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); let dimensions = dimensions.to_vec(); @@ -116,7 +118,7 @@ where )) }) .collect::, + HashSet<(SdkEventMetricsBucketIdentifier, SdkEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/sdk_events/metrics/load_time.rs b/crates/analytics/src/sdk_events/metrics/load_time.rs index 4624f30429..73cc693c50 100644 --- a/crates/analytics/src/sdk_events/metrics/load_time.rs +++ b/crates/analytics/src/sdk_events/metrics/load_time.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetricsBucketIdentifier, SdkEventNames, @@ -35,7 +37,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); let dimensions = dimensions.to_vec(); @@ -116,7 +118,7 @@ where )) }) .collect::, + HashSet<(SdkEventMetricsBucketIdentifier, SdkEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/sdk_events/metrics/payment_attempts.rs b/crates/analytics/src/sdk_events/metrics/payment_attempts.rs index 7cbe93056a..4d949d9fb8 100644 --- a/crates/analytics/src/sdk_events/metrics/payment_attempts.rs +++ b/crates/analytics/src/sdk_events/metrics/payment_attempts.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetricsBucketIdentifier, SdkEventNames, @@ -35,7 +37,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); let dimensions = dimensions.to_vec(); @@ -111,7 +113,7 @@ where )) }) .collect::, + HashSet<(SdkEventMetricsBucketIdentifier, SdkEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/sdk_events/metrics/payment_data_filled_count.rs b/crates/analytics/src/sdk_events/metrics/payment_data_filled_count.rs index aff78808d1..37eb967b38 100644 --- a/crates/analytics/src/sdk_events/metrics/payment_data_filled_count.rs +++ b/crates/analytics/src/sdk_events/metrics/payment_data_filled_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetricsBucketIdentifier, SdkEventNames, @@ -35,7 +37,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); let dimensions = dimensions.to_vec(); @@ -111,7 +113,7 @@ where )) }) .collect::, + HashSet<(SdkEventMetricsBucketIdentifier, SdkEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/sdk_events/metrics/payment_method_selected_count.rs b/crates/analytics/src/sdk_events/metrics/payment_method_selected_count.rs index 284519441a..d524d0021c 100644 --- a/crates/analytics/src/sdk_events/metrics/payment_method_selected_count.rs +++ b/crates/analytics/src/sdk_events/metrics/payment_method_selected_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetricsBucketIdentifier, SdkEventNames, @@ -35,7 +37,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); let dimensions = dimensions.to_vec(); @@ -111,7 +113,7 @@ where )) }) .collect::, + HashSet<(SdkEventMetricsBucketIdentifier, SdkEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/sdk_events/metrics/payment_methods_call_count.rs b/crates/analytics/src/sdk_events/metrics/payment_methods_call_count.rs index e7dc650403..081c4968c5 100644 --- a/crates/analytics/src/sdk_events/metrics/payment_methods_call_count.rs +++ b/crates/analytics/src/sdk_events/metrics/payment_methods_call_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetricsBucketIdentifier, SdkEventNames, @@ -35,7 +37,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); let dimensions = dimensions.to_vec(); @@ -119,7 +121,7 @@ where )) }) .collect::, + HashSet<(SdkEventMetricsBucketIdentifier, SdkEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/sdk_events/metrics/sdk_initiated_count.rs b/crates/analytics/src/sdk_events/metrics/sdk_initiated_count.rs index 82c2096a2e..92308acac6 100644 --- a/crates/analytics/src/sdk_events/metrics/sdk_initiated_count.rs +++ b/crates/analytics/src/sdk_events/metrics/sdk_initiated_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetricsBucketIdentifier, SdkEventNames, @@ -35,7 +37,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); let dimensions = dimensions.to_vec(); @@ -111,7 +113,7 @@ where )) }) .collect::, + HashSet<(SdkEventMetricsBucketIdentifier, SdkEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/sdk_events/metrics/sdk_rendered_count.rs b/crates/analytics/src/sdk_events/metrics/sdk_rendered_count.rs index eba94f0d9a..6f03008e0c 100644 --- a/crates/analytics/src/sdk_events/metrics/sdk_rendered_count.rs +++ b/crates/analytics/src/sdk_events/metrics/sdk_rendered_count.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use api_models::analytics::{ sdk_events::{ SdkEventDimensions, SdkEventFilters, SdkEventMetricsBucketIdentifier, SdkEventNames, @@ -35,7 +37,7 @@ where granularity: &Option, time_range: &TimeRange, pool: &T, - ) -> MetricsResult> { + ) -> MetricsResult> { let mut query_builder: QueryBuilder = QueryBuilder::new(AnalyticsCollection::SdkEventsAnalytics); let dimensions = dimensions.to_vec(); @@ -111,7 +113,7 @@ where )) }) .collect::, + HashSet<(SdkEventMetricsBucketIdentifier, SdkEventMetricRow)>, crate::query::PostProcessingError, >>() .change_context(MetricsError::PostProcessingFailure) diff --git a/crates/analytics/src/types.rs b/crates/analytics/src/types.rs index 12a82801d5..d2d3604661 100644 --- a/crates/analytics/src/types.rs +++ b/crates/analytics/src/types.rs @@ -46,7 +46,7 @@ pub enum TableEngine { BasicTree, } -#[derive(Debug, serde::Serialize, serde::Deserialize, Eq, PartialEq)] +#[derive(Debug, serde::Serialize, serde::Deserialize, Eq, PartialEq, Hash)] #[serde(transparent)] pub struct DBEnumWrapper(pub T); diff --git a/crates/api_models/src/analytics/refunds.rs b/crates/api_models/src/analytics/refunds.rs index 5ecdf1cecb..32e3abaf37 100644 --- a/crates/api_models/src/analytics/refunds.rs +++ b/crates/api_models/src/analytics/refunds.rs @@ -10,6 +10,7 @@ use crate::{enums::Currency, refunds::RefundStatus}; Copy, Debug, Default, + Hash, Eq, PartialEq, serde::Serialize, diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs index 87b436ca92..08b13b1a5b 100644 --- a/crates/common_enums/src/enums.rs +++ b/crates/common_enums/src/enums.rs @@ -26,6 +26,7 @@ pub mod diesel_exports { Copy, Debug, Default, + Hash, Eq, PartialEq, serde::Deserialize,