Skip to content

Commit 12a2f2a

Browse files
authored
feat(analytics): Add currency as dimension and filter for disputes (#7006)
1 parent 8d8ebe9 commit 12a2f2a

File tree

12 files changed

+41
-2
lines changed

12 files changed

+41
-2
lines changed

crates/analytics/src/disputes/core.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ pub async fn get_filters(
204204
.filter_map(|fil: DisputeFilterRow| match dim {
205205
DisputeDimensions::DisputeStage => fil.dispute_stage,
206206
DisputeDimensions::Connector => fil.connector,
207+
DisputeDimensions::Currency => fil.currency.map(|i| i.as_ref().to_string()),
207208
})
208209
.collect::<Vec<String>>();
209210
res.query_data.push(DisputeFilterValue {

crates/analytics/src/disputes/filters.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
use api_models::analytics::{disputes::DisputeDimensions, Granularity, TimeRange};
22
use common_utils::errors::ReportSwitchExt;
3+
use diesel_models::enums::Currency;
34
use error_stack::ResultExt;
45
use time::PrimitiveDateTime;
56

67
use crate::{
78
enums::AuthInfo,
89
query::{Aggregate, GroupByClause, QueryBuilder, QueryFilter, ToSql, Window},
9-
types::{AnalyticsCollection, AnalyticsDataSource, FiltersError, FiltersResult, LoadRow},
10+
types::{
11+
AnalyticsCollection, AnalyticsDataSource, DBEnumWrapper, FiltersError, FiltersResult,
12+
LoadRow,
13+
},
1014
};
1115
pub trait DisputeFilterAnalytics: LoadRow<DisputeFilterRow> {}
1216

@@ -48,4 +52,5 @@ pub struct DisputeFilterRow {
4852
pub dispute_status: Option<String>,
4953
pub connector_status: Option<String>,
5054
pub dispute_stage: Option<String>,
55+
pub currency: Option<DBEnumWrapper<Currency>>,
5156
}

crates/analytics/src/disputes/metrics.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ pub struct DisputeMetricRow {
2727
pub dispute_stage: Option<DBEnumWrapper<storage_enums::DisputeStage>>,
2828
pub dispute_status: Option<DBEnumWrapper<storage_enums::DisputeStatus>>,
2929
pub connector: Option<String>,
30+
pub currency: Option<DBEnumWrapper<storage_enums::Currency>>,
3031
pub total: Option<bigdecimal::BigDecimal>,
3132
pub count: Option<i64>,
3233
#[serde(with = "common_utils::custom_serde::iso8601::option")]

crates/analytics/src/disputes/metrics/dispute_status_metric.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ where
9797
DisputeMetricsBucketIdentifier::new(
9898
i.dispute_stage.as_ref().map(|i| i.0),
9999
i.connector.clone(),
100+
i.currency.as_ref().map(|i| i.0),
100101
TimeRange {
101102
start_time: match (granularity, i.start_bucket) {
102103
(Some(g), Some(st)) => g.clip_to_start(st)?,

crates/analytics/src/disputes/metrics/sessionized_metrics/dispute_status_metric.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ where
9797
DisputeMetricsBucketIdentifier::new(
9898
i.dispute_stage.as_ref().map(|i| i.0),
9999
i.connector.clone(),
100+
i.currency.as_ref().map(|i| i.0),
100101
TimeRange {
101102
start_time: match (granularity, i.start_bucket) {
102103
(Some(g), Some(st)) => g.clip_to_start(st)?,

crates/analytics/src/disputes/metrics/sessionized_metrics/total_amount_disputed.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ where
9898
DisputeMetricsBucketIdentifier::new(
9999
i.dispute_stage.as_ref().map(|i| i.0),
100100
i.connector.clone(),
101+
i.currency.as_ref().map(|i| i.0),
101102
TimeRange {
102103
start_time: match (granularity, i.start_bucket) {
103104
(Some(g), Some(st)) => g.clip_to_start(st)?,

crates/analytics/src/disputes/metrics/sessionized_metrics/total_dispute_lost_amount.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ where
9999
DisputeMetricsBucketIdentifier::new(
100100
i.dispute_stage.as_ref().map(|i| i.0),
101101
i.connector.clone(),
102+
i.currency.as_ref().map(|i| i.0),
102103
TimeRange {
103104
start_time: match (granularity, i.start_bucket) {
104105
(Some(g), Some(st)) => g.clip_to_start(st)?,

crates/analytics/src/disputes/metrics/total_amount_disputed.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ where
9797
DisputeMetricsBucketIdentifier::new(
9898
i.dispute_stage.as_ref().map(|i| i.0),
9999
i.connector.clone(),
100+
i.currency.as_ref().map(|i| i.0),
100101
TimeRange {
101102
start_time: match (granularity, i.start_bucket) {
102103
(Some(g), Some(st)) => g.clip_to_start(st)?,

crates/analytics/src/disputes/metrics/total_dispute_lost_amount.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ where
9898
DisputeMetricsBucketIdentifier::new(
9999
i.dispute_stage.as_ref().map(|i| i.0),
100100
i.connector.clone(),
101+
i.currency.as_ref().map(|i| i.0),
101102
TimeRange {
102103
start_time: match (granularity, i.start_bucket) {
103104
(Some(g), Some(st)) => g.clip_to_start(st)?,

crates/analytics/src/disputes/types.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ where
2424
.attach_printable("Error adding dispute stage filter")?;
2525
}
2626

27+
if !self.currency.is_empty() {
28+
builder
29+
.add_filter_in_range_clause(DisputeDimensions::Currency, &self.currency)
30+
.attach_printable("Error adding currency filter")?;
31+
}
32+
2733
Ok(())
2834
}
2935
}

0 commit comments

Comments
 (0)