Skip to content

Commit 57587f6

Browse files
merge from main
1 parent 1ea935b commit 57587f6

File tree

3 files changed

+214
-136
lines changed

3 files changed

+214
-136
lines changed

src/handlers/http/modal/server.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,10 @@ impl ParseableServer for Server {
148148
}
149149

150150
impl Server {
151-
pub fn get_prism_home() -> Resource {
152-
web::resource("/home").route(web::get().to(http::prism_home::home_api))
151+
pub fn get_prism_home() -> Scope {
152+
web::scope("/home")
153+
.service(web::resource("").route(web::get().to(http::prism_home::home_api)))
154+
.service(web::resource("/search").route(web::get().to(http::prism_home::home_search)))
153155
}
154156

155157
pub fn get_prism_logstream() -> Scope {

src/handlers/http/prism_home.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616
*
1717
*/
1818

19+
use std::collections::HashMap;
20+
1921
use actix_web::{web, HttpRequest, Responder};
2022

2123
use crate::{
22-
prism::home::{generate_home_response, PrismHomeError},
24+
prism::home::{generate_home_response, generate_home_search_response, PrismHomeError},
2325
utils::actix::extract_session_key_from_req,
2426
};
2527

28+
const HOME_SEARCH_QUERY_PARAM: &str = "key";
29+
2630
/// Fetches the data to populate Prism's home
2731
///
2832
///
@@ -37,3 +41,24 @@ pub async fn home_api(req: HttpRequest) -> Result<impl Responder, PrismHomeError
3741

3842
Ok(web::Json(res))
3943
}
44+
45+
pub async fn home_search(req: HttpRequest) -> Result<impl Responder, PrismHomeError> {
46+
let key = extract_session_key_from_req(&req)
47+
.map_err(|err| PrismHomeError::Anyhow(anyhow::Error::msg(err.to_string())))?;
48+
let query_map = web::Query::<HashMap<String, String>>::from_query(req.query_string())
49+
.map_err(|_| PrismHomeError::InvalidQueryParameter(HOME_SEARCH_QUERY_PARAM.to_string()))?;
50+
51+
if query_map.is_empty() {
52+
return Ok(web::Json(serde_json::json!({})));
53+
}
54+
55+
let query_value = query_map
56+
.get(HOME_SEARCH_QUERY_PARAM)
57+
.ok_or_else(|| PrismHomeError::InvalidQueryParameter(HOME_SEARCH_QUERY_PARAM.to_string()))?
58+
.to_lowercase();
59+
let res = generate_home_search_response(&key, &query_value).await?;
60+
let json_res = serde_json::to_value(res)
61+
.map_err(|err| PrismHomeError::Anyhow(anyhow::Error::msg(err.to_string())))?;
62+
63+
Ok(web::Json(json_res))
64+
}

0 commit comments

Comments
 (0)