Skip to content

Commit 4837a9d

Browse files
committed
primitives - sentry - AnalyticsResponse
1 parent 849f2f3 commit 4837a9d

File tree

5 files changed

+92
-43
lines changed

5 files changed

+92
-43
lines changed

primitives/src/sentry.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,12 @@ pub struct FetchedAnalytics {
319319
pub segment: Option<String>,
320320
}
321321

322+
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
323+
#[serde(rename_all = "camelCase")]
324+
pub struct AnalyticsResponse {
325+
pub analytics: Vec<FetchedAnalytics>,
326+
}
327+
322328
/// The value of the requested analytics [`crate::analytics::Metric`].
323329
#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
324330
#[serde(untagged)]

sentry/src/routes.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@
290290
//!
291291
//! Allowed keys: [`AllowedKey::Country`][primitives::analytics::query::AllowedKey::Country], [`AllowedKey::AdSlotType`][primitives::analytics::query::AllowedKey::AdSlotType]
292292
//!
293+
//! Request query parameters: [`AnalyticsQuery`][primitives::analytics::AnalyticsQuery]
294+
//!
295+
//! Response: [`AnalyticsResponse`]
296+
//!
293297
//! #### GET `/v5/analytics/for-publisher` (auth required)
294298
//!
295299
//! Returns all analytics where the currently authenticated address [`Auth.uid`](crate::Auth::uid) is a **publisher**.
@@ -298,6 +302,10 @@
298302
//!
299303
//! The route is handled by [`get_analytics()`].
300304
//!
305+
//! Request query parameters: [`AnalyticsQuery`][primitives::analytics::AnalyticsQuery]
306+
//!
307+
//! Response: [`AnalyticsResponse`]
308+
//!
301309
//! #### GET `/v5/analytics/for-advertiser` (auth required)
302310
//!
303311
//! Returns all analytics where the currently authenticated address [`Auth.uid`](crate::Auth::uid) is an **advertiser**.
@@ -306,6 +314,10 @@
306314
//!
307315
//! The route is handled by [`get_analytics()`].
308316
//!
317+
//! Request query parameters: [`AnalyticsQuery`][primitives::analytics::AnalyticsQuery]
318+
//!
319+
//! Response: [`AnalyticsResponse`]
320+
//!
309321
//! #### GET `/v5/analytics/for-admin` (auth required)
310322
//!
311323
//! Admin access to the analytics with no restrictions on the keys for filtering.
@@ -316,6 +328,10 @@
316328
//!
317329
//! The route is handled by [`get_analytics()`].
318330
//!
331+
//! Request query parameters: [`AnalyticsQuery`][primitives::analytics::AnalyticsQuery]
332+
//!
333+
//! Response: [`AnalyticsResponse`]
334+
//!
319335
//! [`Adapter`]: adapter::Adapter
320336
//! [`Address`]: primitives::Address
321337
//! [`AllowedKey`]: primitives::analytics::query::AllowedKey
@@ -334,6 +350,8 @@
334350
//! [`check_access()`]: crate::access::check_access
335351
//! [`SuccessResponse`]: primitives::sentry::SuccessResponse
336352
//! [`ValidatorId`]: primitives::ValidatorId
353+
//! [`AnalyticsResponse`]: primitives::sentry::AnalyticsResponse
354+
//! [`AnalyticsQuery`]: primitives::analytics::AnalyticsQuery
337355
338356
pub use analytics::analytics as get_analytics;
339357

sentry/src/routes/analytics.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,19 @@ use crate::{
1010
};
1111
use adapter::client::Locked;
1212
use hyper::{Body, Request, Response};
13-
use primitives::analytics::{
14-
query::{AllowedKey, ALLOWED_KEYS},
15-
AnalyticsQuery, AuthenticateAs,
13+
use primitives::{
14+
analytics::{
15+
query::{AllowedKey, ALLOWED_KEYS},
16+
AnalyticsQuery, AuthenticateAs,
17+
},
18+
sentry::AnalyticsResponse,
1619
};
1720

1821
/// GET `/v5/analytics` routes
1922
/// with query parameters: [`primitives::analytics::AnalyticsQuery`].
2023
///
21-
/// Returns `Vec<[FetchedAnalytics](primitives::sentry::FethedAnalytics)>`
24+
/// Response: [`primitives::sentry::AnalyticsResponse`]
25+
///
2226
/// Analytics routes:
2327
/// - GET `/v5/analytics`
2428
/// - GET `/v5/analytics/for-publisher`
@@ -84,7 +88,7 @@ pub async fn analytics<C: Locked + 'static>(
8488
)
8589
.await
8690
{
87-
Ok(Ok(analytics)) => analytics,
91+
Ok(Ok(analytics)) => AnalyticsResponse { analytics },
8892
// Error getting the analytics
8993
Ok(Err(err)) => return Err(err.into()),
9094
// Timeout error

sentry/src/routes/routers.rs

Lines changed: 55 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,10 @@ mod analytics_router_test {
404404
query::{AllowedKey, Time},
405405
AnalyticsQuery, Metric, OperatingSystem, Timeframe,
406406
},
407-
sentry::{DateHour, FetchedAnalytics, FetchedMetric, UpdateAnalytics, CLICK, IMPRESSION},
407+
sentry::{
408+
AnalyticsResponse, DateHour, FetchedAnalytics, FetchedMetric, UpdateAnalytics, CLICK,
409+
IMPRESSION,
410+
},
408411
test_util::{ADVERTISER, DUMMY_CAMPAIGN, DUMMY_IPFS, IDS, LEADER, PUBLISHER, PUBLISHER_2},
409412
UnifiedNum,
410413
};
@@ -691,8 +694,9 @@ mod analytics_router_test {
691694
.await
692695
.expect("Should get json");
693696

694-
let fetched_analytics: Vec<FetchedAnalytics> =
695-
serde_json::from_slice(&json).expect("Should get analytics response");
697+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
698+
.expect("Should get analytics response")
699+
.analytics;
696700

697701
assert_eq!(
698702
vec![
@@ -749,8 +753,9 @@ mod analytics_router_test {
749753
.await
750754
.expect("Should get json");
751755

752-
let fetched_analytics: Vec<FetchedAnalytics> =
753-
serde_json::from_slice(&json).expect("Should get analytics response");
756+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
757+
.expect("Should get analytics response")
758+
.analytics;
754759
assert_eq!(
755760
vec![FetchedMetric::Count(2)],
756761
fetched_analytics
@@ -796,8 +801,9 @@ mod analytics_router_test {
796801
.await
797802
.expect("Should get json");
798803

799-
let fetched_analytics: Vec<FetchedAnalytics> =
800-
serde_json::from_slice(&json).expect("Should get analytics response");
804+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
805+
.expect("Should get analytics response")
806+
.analytics;
801807

802808
assert_eq!(
803809
vec![FetchedMetric::Count(1), FetchedMetric::Count(1)],
@@ -846,8 +852,9 @@ mod analytics_router_test {
846852
.await
847853
.expect("Should get json");
848854

849-
let fetched_analytics: Vec<FetchedAnalytics> =
850-
serde_json::from_slice(&json).expect("Should get analytics response");
855+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
856+
.expect("Should get analytics response")
857+
.analytics;
851858

852859
assert_eq!(
853860
vec![
@@ -899,8 +906,9 @@ mod analytics_router_test {
899906
.await
900907
.expect("Should get json");
901908

902-
let fetched_analytics: Vec<FetchedAnalytics> =
903-
serde_json::from_slice(&json).expect("Should get analytics response");
909+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
910+
.expect("Should get analytics response")
911+
.analytics;
904912

905913
assert_eq!(
906914
vec![
@@ -974,8 +982,9 @@ mod analytics_router_test {
974982
.await
975983
.expect("Should get json");
976984

977-
let fetched_analytics: Vec<FetchedAnalytics> =
978-
serde_json::from_slice(&json).expect("Should get analytics response");
985+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
986+
.expect("Should get analytics response")
987+
.analytics;
979988

980989
assert_eq!(
981990
vec![
@@ -1009,8 +1018,9 @@ mod analytics_router_test {
10091018
.await
10101019
.expect("Should get json");
10111020

1012-
let fetched_analytics: Vec<FetchedAnalytics> =
1013-
serde_json::from_slice(&json).expect("Should get analytics response");
1021+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1022+
.expect("Should get analytics response")
1023+
.analytics;
10141024

10151025
assert_eq!(
10161026
vec![
@@ -1046,8 +1056,9 @@ mod analytics_router_test {
10461056
.await
10471057
.expect("Should get json");
10481058

1049-
let fetched_analytics: Vec<FetchedAnalytics> =
1050-
serde_json::from_slice(&json).expect("Should get analytics response");
1059+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1060+
.expect("Should get analytics response")
1061+
.analytics;
10511062

10521063
assert_eq!(
10531064
// Limit is 2
@@ -1082,8 +1093,9 @@ mod analytics_router_test {
10821093
.await
10831094
.expect("Should get json");
10841095

1085-
let fetched_analytics: Vec<FetchedAnalytics> =
1086-
serde_json::from_slice(&json).expect("Should get analytics response");
1096+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1097+
.expect("Should get analytics response")
1098+
.analytics;
10871099

10881100
assert_eq!(
10891101
vec![
@@ -1115,8 +1127,9 @@ mod analytics_router_test {
11151127
.await
11161128
.expect("Should get json");
11171129

1118-
let fetched_analytics: Vec<FetchedAnalytics> =
1119-
serde_json::from_slice(&json).expect("Should get analytics response");
1130+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1131+
.expect("Should get analytics response")
1132+
.analytics;
11201133

11211134
assert_eq!(
11221135
vec![FetchedMetric::Count(100)],
@@ -1167,8 +1180,9 @@ mod analytics_router_test {
11671180
.await
11681181
.expect("Should get json");
11691182

1170-
let fetched_analytics: Vec<FetchedAnalytics> =
1171-
serde_json::from_slice(&json).expect("Should get analytics response");
1183+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1184+
.expect("Should get analytics response")
1185+
.analytics;
11721186

11731187
assert_eq!(
11741188
vec![
@@ -1221,8 +1235,9 @@ mod analytics_router_test {
12211235
.await
12221236
.expect("Should get json");
12231237

1224-
let fetched_analytics: Vec<FetchedAnalytics> =
1225-
serde_json::from_slice(&json).expect("Should get analytics response");
1238+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1239+
.expect("Should get analytics response")
1240+
.analytics;
12261241
assert_eq!(
12271242
vec![FetchedMetric::Count(69)],
12281243
fetched_analytics
@@ -1468,8 +1483,9 @@ mod analytics_router_test {
14681483
.await
14691484
.expect("Should get json");
14701485

1471-
let fetched_analytics: Vec<FetchedAnalytics> =
1472-
serde_json::from_slice(&json).expect("Should get analytics response");
1486+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1487+
.expect("Should get analytics response")
1488+
.analytics;
14731489

14741490
assert_eq!(
14751491
vec![FetchedMetric::Count(1), FetchedMetric::Count(3)],
@@ -1497,8 +1513,9 @@ mod analytics_router_test {
14971513
.await
14981514
.expect("Should get json");
14991515

1500-
let fetched_analytics: Vec<FetchedAnalytics> =
1501-
serde_json::from_slice(&json).expect("Should get analytics response");
1516+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1517+
.expect("Should get analytics response")
1518+
.analytics;
15021519

15031520
assert_eq!(
15041521
vec![FetchedMetric::Count(1), FetchedMetric::Count(5)],
@@ -1526,8 +1543,9 @@ mod analytics_router_test {
15261543
.await
15271544
.expect("Should get json");
15281545

1529-
let fetched_analytics: Vec<FetchedAnalytics> =
1530-
serde_json::from_slice(&json).expect("Should get analytics response");
1546+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1547+
.expect("Should get analytics response")
1548+
.analytics;
15311549
assert_eq!(
15321550
vec![FetchedMetric::Count(1), FetchedMetric::Count(5)],
15331551
fetched_analytics
@@ -1576,8 +1594,9 @@ mod analytics_router_test {
15761594
.await
15771595
.expect("Should get json");
15781596

1579-
let fetched_analytics: Vec<FetchedAnalytics> =
1580-
serde_json::from_slice(&json).expect("Should get analytics response");
1597+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1598+
.expect("Should get analytics response")
1599+
.analytics;
15811600
assert_eq!(1, fetched_analytics.len());
15821601
assert_eq!(
15831602
FetchedMetric::Count(1),
@@ -1603,8 +1622,9 @@ mod analytics_router_test {
16031622
.await
16041623
.expect("Should get json");
16051624

1606-
let fetched_analytics: Vec<FetchedAnalytics> =
1607-
serde_json::from_slice(&json).expect("Should get analytics response");
1625+
let fetched_analytics = serde_json::from_slice::<AnalyticsResponse>(&json)
1626+
.expect("Should get analytics response")
1627+
.analytics;
16081628
assert_eq!(
16091629
vec![FetchedMetric::Count(69)],
16101630
fetched_analytics

test_harness/src/lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,8 @@ mod tests {
232232
analytics::{query::Time, AnalyticsQuery, Metric, Timeframe},
233233
balances::CheckedState,
234234
sentry::{
235-
campaign_create::CreateCampaign, AccountingResponse, DateHour, Event, EventType,
236-
FetchedAnalytics, FetchedMetric, SuccessResponse, CLICK, IMPRESSION,
235+
campaign_create::CreateCampaign, AccountingResponse, AnalyticsResponse, DateHour,
236+
Event, EventType, FetchedAnalytics, FetchedMetric, SuccessResponse, CLICK, IMPRESSION,
237237
},
238238
spender::Spender,
239239
test_util::{
@@ -2751,8 +2751,9 @@ mod tests {
27512751
.send()
27522752
.await
27532753
.context("failed to get analytics")?
2754-
.json::<Vec<FetchedAnalytics>>()
2754+
.json::<AnalyticsResponse>()
27552755
.await
2756+
.map(|response| response.analytics)
27562757
.context("failed to deserialize json")
27572758
}
27582759
}

0 commit comments

Comments
 (0)