7
7
from typings .export import ExportFormat
8
8
from typings .group import Group
9
9
from bson import ObjectId
10
- from fastapi import APIRouter , HTTPException , Depends
10
+ from fastapi import APIRouter , HTTPException , Depends , Query
11
11
from database import db
12
12
from pydantic import BaseModel
13
13
@@ -48,10 +48,9 @@ async def create_group(payload: Group, user=Depends(get_current_user)):
48
48
49
49
@router .get ("" )
50
50
async def get_groups (
51
- page : int = 1 ,
52
- perpage : int = 10 ,
53
- type = "all" ,
54
- search = "" ,
51
+ page : int = Query (1 , ge = 1 , description = "Page number for pagination" ),
52
+ perpage : int = Query (10 , ge = 1 , le = 100 , description = "Number of items per page" ),
53
+ search : str = Query ("" , description = "Search term for group names" ),
55
54
user = Depends (get_current_user ),
56
55
):
57
56
"""
@@ -61,23 +60,13 @@ async def get_groups(
61
60
if len (user ["per" ]) == 0 :
62
61
raise HTTPException (status_code = 403 , detail = "Permission denied" )
63
62
64
- if type == "all" :
65
- target = ["permission" , "class" ]
66
- elif type == "permission" :
67
- target = ["permission" ]
68
- elif type == "class" :
69
- target = ["class" ]
70
- else :
71
- raise HTTPException (status_code = 400 , detail = "Invalid type" )
72
-
73
63
count = await db .zvms .groups .count_documents (
74
64
{"name" : {"$regex" : search , "$options" : "i" }}
75
65
)
76
66
77
67
pipeline = [
78
68
{
79
69
"$match" : {
80
- "type" : {"$in" : target },
81
70
"name" : {"$regex" : search , "$options" : "i" },
82
71
},
83
72
},
@@ -148,9 +137,9 @@ async def update_group_name(
148
137
@router .get ("/{group_id}/activities" )
149
138
async def get_class_activities (
150
139
group_id : str ,
151
- page : int = 1 ,
152
- perpage : int = 10 ,
153
- query : str = "" ,
140
+ page : int = Query ( 1 , ge = 1 , description = "Page number for pagination" ) ,
141
+ perpage : int = Query ( 10 , ge = 1 , le = 100 , description = "Number of items per page" ) ,
142
+ query : str = Query ( "" , description = "Search query for activities" ) ,
154
143
user = Depends (get_current_user ),
155
144
):
156
145
"""
@@ -190,10 +179,10 @@ async def get_class_activities(
190
179
@router .get ("/{group_id}/user" )
191
180
async def get_users_in_class (
192
181
group_id : str ,
193
- page : int = 1 ,
194
- perpage : int = 10 ,
195
- search : str = "" ,
196
- pwdm : bool = False ,
182
+ page : int = Query ( 1 , ge = 1 , description = "Page number for pagination" ) ,
183
+ perpage : int = Query ( 10 , ge = 1 , le = 100 , description = "Number of items per page" ) ,
184
+ search : str = Query ( "" , description = "Search term for user names" ) ,
185
+ pwdm : bool = Query ( False , description = "Include password mode information" ) ,
197
186
user = Depends (get_current_user ),
198
187
):
199
188
"""
@@ -238,14 +227,14 @@ async def get_users_in_class(
238
227
@router .get ("/{group_id}/time" )
239
228
async def get_user_times_in_class (
240
229
group_id : str ,
241
- page : int = 1 ,
242
- perpage : int = 10 ,
243
- exceeding : bool = True ,
244
- shortage : bool = False ,
245
- start : Optional [str ] = None ,
246
- end : Optional [str ] = None ,
247
- search : str = "" ,
248
- allow_cache : bool = True ,
230
+ page : int = Query ( 1 , ge = 1 , description = "Page number for pagination" ) ,
231
+ perpage : int = Query ( 10 , ge = 1 , le = 100 , description = "Number of items per page" ) ,
232
+ exceeding : bool = Query ( True , description = "Include exceeding time calculations" ) ,
233
+ shortage : bool = Query ( False , description = "Include shortage calculations" ) ,
234
+ start : Optional [str ] = Query ( None , description = "Start date filter" ) ,
235
+ end : Optional [str ] = Query ( None , description = "End date filter" ) ,
236
+ search : str = Query ( "" , description = "Search term for user names" ) ,
237
+ allow_cache : bool = Query ( True , description = "Allow cached time calculations" ) ,
249
238
user = Depends (get_current_user ),
250
239
):
251
240
"""
0 commit comments