@@ -4,6 +4,7 @@ use crate::api::models::GroupInfo;
44use crate :: db:: operations;
55use crate :: db:: operations:: models:: GroupUpdate ;
66use crate :: db:: operations:: models:: NewGroup ;
7+ use crate :: db:: operations:: models:: SortGroupsBy ;
78use crate :: db:: types:: * ;
89use crate :: db:: Pool ;
910use crate :: utils:: valid_group_name;
@@ -16,11 +17,34 @@ use actix_web::Responder;
1617use cis_client:: CisClient ;
1718use dino_park_gate:: scope:: ScopeAndUser ;
1819use log:: info;
20+ use serde_derive:: Deserialize ;
1921use std:: sync:: Arc ;
2022
23+ #[ derive( Deserialize ) ]
24+ struct ListGroupsQuery {
25+ f : Option < String > ,
26+ #[ serde( default ) ]
27+ n : i64 ,
28+ #[ serde( default = "default_groups_list_size" ) ]
29+ s : i64 ,
30+ #[ serde( default ) ]
31+ by : SortGroupsBy ,
32+ }
33+
34+ fn default_groups_list_size ( ) -> i64 {
35+ 20
36+ }
37+
38+ #[ guard( Authenticated ) ]
2139async fn get_group ( pool : web:: Data < Pool > , group_name : web:: Path < String > ) -> impl Responder {
22- operations:: groups:: get_group ( & pool, & group_name)
23- . map ( |group| HttpResponse :: Ok ( ) . json ( group) )
40+ operations:: groups:: get_group ( & pool, & group_name) . map ( |group| HttpResponse :: Ok ( ) . json ( group) )
41+ }
42+
43+ #[ guard( Authenticated ) ]
44+ async fn list_groups ( pool : web:: Data < Pool > , query : web:: Query < ListGroupsQuery > ) -> impl Responder {
45+ let query = query. into_inner ( ) ;
46+ operations:: groups:: list_groups ( & pool, query. f , query. by , query. s , query. n )
47+ . map ( |groups| HttpResponse :: Ok ( ) . json ( groups) )
2448 . map_err ( ApiError :: GenericBadRequest )
2549}
2650
@@ -142,7 +166,11 @@ pub fn groups_app() -> impl HttpServiceFactory {
142166 . max_age ( 3600 )
143167 . finish ( ) ,
144168 )
145- . service ( web:: resource ( "" ) . route ( web:: post ( ) . to ( add_group) ) )
169+ . service (
170+ web:: resource ( "" )
171+ . route ( web:: post ( ) . to ( add_group) )
172+ . route ( web:: get ( ) . to ( list_groups) ) ,
173+ )
146174 . service (
147175 web:: resource ( "/{group_name}" )
148176 . route ( web:: get ( ) . to ( get_group) )
0 commit comments