From 3aef731ce0a4782ca5d09197c68b711c6f427c1d Mon Sep 17 00:00:00 2001 From: Nikhil Sinha Date: Mon, 1 Jul 2024 09:12:18 +0530 Subject: [PATCH] saved filters enhancement code cleanup and optimization --- server/src/handlers/http/users/filters.rs | 71 +++++++++++++---------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/server/src/handlers/http/users/filters.rs b/server/src/handlers/http/users/filters.rs index 458004125..c6776840d 100644 --- a/server/src/handlers/http/users/filters.rs +++ b/server/src/handlers/http/users/filters.rs @@ -24,8 +24,8 @@ use crate::{ }; use actix_web::{http::header::ContentType, web, HttpRequest, HttpResponse, Responder}; use bytes::Bytes; +use chrono::Utc; use http::StatusCode; -use rand::distributions::DistString; use serde_json::Error as SerdeError; pub async fn list(req: HttpRequest) -> Result { @@ -48,26 +48,32 @@ pub async fn get(req: HttpRequest) -> Result { return Ok((web::Json(filter), StatusCode::OK)); } - Err(FiltersError::Metadata("Filter Not Found")) + Err(FiltersError::Metadata("Filter does not exist")) } pub async fn post(body: Bytes) -> Result { - let filter: Filter = serde_json::from_slice(&body)?; - let filter_id = rand::distributions::Alphanumeric.sample_string(&mut rand::thread_rng(), 10); - let user_id = &filter.user_id; - let stream_name = &filter.stream_name; - let mut cloned_filter = filter.clone(); - cloned_filter.filter_id = Some(filter_id.clone()); - cloned_filter.version = Some(CURRENT_FILTER_VERSION.to_string()); - FILTERS.update(&cloned_filter); - - let path = filter_path(user_id, stream_name, &format!("{}.json", filter_id)); + let mut filter: Filter = serde_json::from_slice(&body)?; + let filter_id = format!( + "{}.{}.{}", + &filter.user_id, + &filter.stream_name, + Utc::now().timestamp_millis() + ); + filter.filter_id = Some(filter_id.clone()); + filter.version = Some(CURRENT_FILTER_VERSION.to_string()); + FILTERS.update(&filter); + + let path = filter_path( + &filter.user_id, + &filter.stream_name, + &format!("{}.json", filter_id), + ); let store = CONFIG.storage().get_object_store(); - let filter_bytes = serde_json::to_vec(&cloned_filter)?; + let filter_bytes = serde_json::to_vec(&filter)?; store.put_object(&path, Bytes::from(filter_bytes)).await?; - Ok((web::Json(cloned_filter), StatusCode::OK)) + Ok((web::Json(filter), StatusCode::OK)) } pub async fn update(req: HttpRequest, body: Bytes) -> Result { @@ -75,21 +81,24 @@ pub async fn update(req: HttpRequest, body: Bytes) -> Result Result { .ok_or(FiltersError::Metadata("No Filter Id Provided"))?; let filter = FILTERS .get_filter(filter_id) - .ok_or(FiltersError::Metadata("Filter Not Found"))?; - let stream_name = &filter.stream_name; - let user_id = &filter.user_id; + .ok_or(FiltersError::Metadata("Filter does not exist"))?; - let path = filter_path(user_id, stream_name, &format!("{}.json", filter_id)); + let path = filter_path( + &filter.user_id, + &filter.stream_name, + &format!("{}.json", filter_id), + ); let store = CONFIG.storage().get_object_store(); store.delete_object(&path).await?;