Skip to content

Commit 072c011

Browse files
saved filters enhancement (#838)
code cleanup and optimization
1 parent d6116e8 commit 072c011

File tree

1 file changed

+41
-30
lines changed

1 file changed

+41
-30
lines changed

server/src/handlers/http/users/filters.rs

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ use crate::{
2424
};
2525
use actix_web::{http::header::ContentType, web, HttpRequest, HttpResponse, Responder};
2626
use bytes::Bytes;
27+
use chrono::Utc;
2728
use http::StatusCode;
28-
use rand::distributions::DistString;
2929
use serde_json::Error as SerdeError;
3030

3131
pub async fn list(req: HttpRequest) -> Result<impl Responder, FiltersError> {
@@ -48,48 +48,57 @@ pub async fn get(req: HttpRequest) -> Result<impl Responder, FiltersError> {
4848
return Ok((web::Json(filter), StatusCode::OK));
4949
}
5050

51-
Err(FiltersError::Metadata("Filter Not Found"))
51+
Err(FiltersError::Metadata("Filter does not exist"))
5252
}
5353

5454
pub async fn post(body: Bytes) -> Result<impl Responder, PostError> {
55-
let filter: Filter = serde_json::from_slice(&body)?;
56-
let filter_id = rand::distributions::Alphanumeric.sample_string(&mut rand::thread_rng(), 10);
57-
let user_id = &filter.user_id;
58-
let stream_name = &filter.stream_name;
59-
let mut cloned_filter = filter.clone();
60-
cloned_filter.filter_id = Some(filter_id.clone());
61-
cloned_filter.version = Some(CURRENT_FILTER_VERSION.to_string());
62-
FILTERS.update(&cloned_filter);
63-
64-
let path = filter_path(user_id, stream_name, &format!("{}.json", filter_id));
55+
let mut filter: Filter = serde_json::from_slice(&body)?;
56+
let filter_id = format!(
57+
"{}.{}.{}",
58+
&filter.user_id,
59+
&filter.stream_name,
60+
Utc::now().timestamp_millis()
61+
);
62+
filter.filter_id = Some(filter_id.clone());
63+
filter.version = Some(CURRENT_FILTER_VERSION.to_string());
64+
FILTERS.update(&filter);
65+
66+
let path = filter_path(
67+
&filter.user_id,
68+
&filter.stream_name,
69+
&format!("{}.json", filter_id),
70+
);
6571

6672
let store = CONFIG.storage().get_object_store();
67-
let filter_bytes = serde_json::to_vec(&cloned_filter)?;
73+
let filter_bytes = serde_json::to_vec(&filter)?;
6874
store.put_object(&path, Bytes::from(filter_bytes)).await?;
6975

70-
Ok((web::Json(cloned_filter), StatusCode::OK))
76+
Ok((web::Json(filter), StatusCode::OK))
7177
}
7278

7379
pub async fn update(req: HttpRequest, body: Bytes) -> Result<HttpResponse, PostError> {
7480
let filter_id = req
7581
.match_info()
7682
.get("filter_id")
7783
.ok_or(FiltersError::Metadata("No Filter Id Provided"))?;
78-
let filter = FILTERS
79-
.get_filter(filter_id)
80-
.ok_or(FiltersError::Metadata("Filter Not Found"))?;
81-
let user_id = &filter.user_id;
82-
let stream_name = &filter.stream_name;
83-
84-
let mut cloned_filter: Filter = serde_json::from_slice(&body)?;
85-
cloned_filter.filter_id = Some(filter_id.to_string());
86-
cloned_filter.version = Some(CURRENT_FILTER_VERSION.to_string());
87-
FILTERS.update(&cloned_filter);
84+
if FILTERS.get_filter(filter_id).is_none() {
85+
return Err(PostError::FiltersError(FiltersError::Metadata(
86+
"Filter does not exist",
87+
)));
88+
}
89+
let mut filter: Filter = serde_json::from_slice(&body)?;
90+
filter.filter_id = Some(filter_id.to_string());
91+
filter.version = Some(CURRENT_FILTER_VERSION.to_string());
92+
FILTERS.update(&filter);
8893

89-
let path = filter_path(user_id, stream_name, &format!("{}.json", filter_id));
94+
let path = filter_path(
95+
&filter.user_id,
96+
&filter.stream_name,
97+
&format!("{}.json", filter_id),
98+
);
9099

91100
let store = CONFIG.storage().get_object_store();
92-
let filter_bytes = serde_json::to_vec(&cloned_filter)?;
101+
let filter_bytes = serde_json::to_vec(&filter)?;
93102
store.put_object(&path, Bytes::from(filter_bytes)).await?;
94103

95104
Ok(HttpResponse::Ok().finish())
@@ -102,11 +111,13 @@ pub async fn delete(req: HttpRequest) -> Result<HttpResponse, PostError> {
102111
.ok_or(FiltersError::Metadata("No Filter Id Provided"))?;
103112
let filter = FILTERS
104113
.get_filter(filter_id)
105-
.ok_or(FiltersError::Metadata("Filter Not Found"))?;
106-
let stream_name = &filter.stream_name;
107-
let user_id = &filter.user_id;
114+
.ok_or(FiltersError::Metadata("Filter does not exist"))?;
108115

109-
let path = filter_path(user_id, stream_name, &format!("{}.json", filter_id));
116+
let path = filter_path(
117+
&filter.user_id,
118+
&filter.stream_name,
119+
&format!("{}.json", filter_id),
120+
);
110121
let store = CONFIG.storage().get_object_store();
111122
store.delete_object(&path).await?;
112123

0 commit comments

Comments
 (0)