1616 *
1717 */
1818
19+ use std:: collections:: HashMap ;
20+
1921use actix_web:: { web, HttpRequest , Responder } ;
2022
2123use 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