From 531b8214c060815bb17a3ccae12994a4caaaf38f Mon Sep 17 00:00:00 2001 From: Wyatt Verchere Date: Sun, 24 Sep 2023 08:22:35 -0700 Subject: [PATCH] Analytics query (#716) --- src/routes/v2/analytics_get.rs | 74 ++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 17 deletions(-) diff --git a/src/routes/v2/analytics_get.rs b/src/routes/v2/analytics_get.rs index 833aa584..666259a1 100644 --- a/src/routes/v2/analytics_get.rs +++ b/src/routes/v2/analytics_get.rs @@ -38,8 +38,8 @@ pub fn config(cfg: &mut web::ServiceConfig) { pub struct GetData { // only one of project_ids or version_ids should be used // if neither are provided, all projects the user has access to will be used - pub project_ids: Option>, - pub version_ids: Option>, + pub project_ids: Option, + pub version_ids: Option, pub start_date: Option, // defaults to 2 weeks ago pub end_date: Option, // defaults to now @@ -68,7 +68,7 @@ pub struct FetchedPlaytime { pub async fn playtimes_get( req: HttpRequest, clickhouse: web::Data, - data: web::Json, + data: web::Query, session_queue: web::Data, pool: web::Data, redis: web::Data, @@ -84,8 +84,16 @@ pub async fn playtimes_get( .map(|x| x.1) .ok(); - let project_ids = data.project_ids.clone(); - let version_ids = data.version_ids.clone(); + let project_ids = data + .project_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; + let version_ids = data + .version_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; if project_ids.is_some() && version_ids.is_some() { return Err(ApiError::InvalidInput( @@ -143,7 +151,7 @@ pub async fn playtimes_get( pub async fn views_get( req: HttpRequest, clickhouse: web::Data, - data: web::Json, + data: web::Query, session_queue: web::Data, pool: web::Data, redis: web::Data, @@ -159,8 +167,16 @@ pub async fn views_get( .map(|x| x.1) .ok(); - let project_ids = data.project_ids.clone(); - let version_ids = data.version_ids.clone(); + let project_ids = data + .project_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; + let version_ids = data + .version_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; if project_ids.is_some() && version_ids.is_some() { return Err(ApiError::InvalidInput( @@ -218,7 +234,7 @@ pub async fn views_get( pub async fn downloads_get( req: HttpRequest, clickhouse: web::Data, - data: web::Json, + data: web::Query, session_queue: web::Data, pool: web::Data, redis: web::Data, @@ -234,8 +250,16 @@ pub async fn downloads_get( .map(|x| x.1) .ok(); - let project_ids = data.project_ids.clone(); - let version_ids = data.version_ids.clone(); + let project_ids = data + .project_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; + let version_ids = data + .version_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; if project_ids.is_some() && version_ids.is_some() { return Err(ApiError::InvalidInput( @@ -296,7 +320,7 @@ pub async fn downloads_get( pub async fn countries_downloads_get( req: HttpRequest, clickhouse: web::Data, - data: web::Json, + data: web::Query, session_queue: web::Data, pool: web::Data, redis: web::Data, @@ -312,8 +336,16 @@ pub async fn countries_downloads_get( .map(|x| x.1) .ok(); - let project_ids = data.project_ids.clone(); - let version_ids = data.version_ids.clone(); + let project_ids = data + .project_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; + let version_ids = data + .version_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; if project_ids.is_some() && version_ids.is_some() { return Err(ApiError::InvalidInput( @@ -372,7 +404,7 @@ pub async fn countries_downloads_get( pub async fn countries_views_get( req: HttpRequest, clickhouse: web::Data, - data: web::Json, + data: web::Query, session_queue: web::Data, pool: web::Data, redis: web::Data, @@ -388,8 +420,16 @@ pub async fn countries_views_get( .map(|x| x.1) .ok(); - let project_ids = data.project_ids.clone(); - let version_ids = data.version_ids.clone(); + let project_ids = data + .project_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; + let version_ids = data + .version_ids + .as_ref() + .map(|ids| serde_json::from_str::>(ids)) + .transpose()?; if project_ids.is_some() && version_ids.is_some() { return Err(ApiError::InvalidInput(