16
16
*
17
17
*/
18
18
19
+ use std:: collections:: HashMap ;
20
+
19
21
use actix_web:: { web, HttpRequest , Responder } ;
20
22
21
23
use crate :: {
22
- prism:: home:: { generate_home_response, PrismHomeError } ,
24
+ prism:: home:: { generate_home_response, generate_home_search_response , PrismHomeError } ,
23
25
utils:: actix:: extract_session_key_from_req,
24
26
} ;
25
27
28
+ const HOME_SEARCH_QUERY_PARAM : & str = "key" ;
29
+
26
30
/// Fetches the data to populate Prism's home
27
31
///
28
32
///
@@ -37,3 +41,24 @@ pub async fn home_api(req: HttpRequest) -> Result<impl Responder, PrismHomeError
37
41
38
42
Ok ( web:: Json ( res) )
39
43
}
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