@@ -173,28 +173,47 @@ async def get_comments(
173173 offset : int = 0 ,
174174 lecturer_id : int | None = None ,
175175 user_id : int | None = None ,
176- order_by : list [Literal ["create_ts" ]] = Query (default = []),
176+ order_by : str = Query (
177+ enum = ["create_ts" , "mark_kindness" , "mark_freebie" , "mark_clarity" , "mark_general" ],
178+ default = "create_ts" ,
179+ ),
177180 unreviewed : bool = False ,
178- user = Depends (UnionAuth (scopes = ["rating.comment.review" ], auto_error = False , allow_none = True )),
181+ asc_order : bool = False ,
182+ user = Depends (UnionAuth (scopes = ["rating.comment.review" ], auto_error = False , allow_none = False )),
179183) -> CommentGetAll :
180184 """
181- Scopes: `["rating.comment.review"]`
185+ Scopes: `["rating.comment.review"]`
186+
187+ `limit` - максимальное количество возвращаемых комментариев
182188
183- `limit` - максимальное количество возвращаемых комментариев
189+ `offset` - смещение, определяющее, с какого по порядку комментария начинать выборку.
190+ Если без смещения возвращается комментарий с условным номером N,
191+ то при значении offset = X будет возвращаться комментарий с номером N + X
184192
185- `offset ` - смещение, определяющее, с какого по порядку комментария начинать выборку .
186- Если без смещения возвращается комментарий с условным номером N,
187- то при значении offset = X будет возвращаться комментарий с номером N + X
193+ `order_by ` - возможные значения `"create_ts", "mark_kindness", "mark_freebie", "mark_clarity", "mark_general"` .
194+ Если передано `'create_ts'` - возвращается список комментариев отсортированных по времени
195+ Если передано `'mark_...'` - возвращается список комментариев отсортированных по конкретной оценке
188196
189- `order_by ` - возможное значение `'create_ts'` - возвращается список комментариев отсортированных по времени создания
197+ `lecturer_id ` - вернет все комментарии для преподавателя с конкретным id, по дефолту возвращает вообще все аппрувнутые комментарии.
190198
191- `lecturer_id ` - вернет все комментарии для преподавателя с конкретным id, по дефолту возвращает вообще все аппрувнутые комментарии.
199+ `user_id ` - вернет все комментарии пользователя с конкретным id
192200
193- `user_id ` - вернет все комментарии пользователя с конкретным id
201+ `unreviewed ` - вернет все непроверенные комментарии, если True. По дефолту False.
194202
195- `unreviewed ` - вернет все непроверенные комментарии, если True. По дефолту False.
203+ `asc_order ` -Если передано true, сортировать в порядке возрастания. Иначе - в порядке убывания
196204 """
197- comments = Comment .query (session = db .session ).all ()
205+ comments_query = (
206+ Comment .query (session = db .session )
207+ .filter (Comment .search_by_lectorer_id (lecturer_id ))
208+ .filter (Comment .search_by_user_id (user_id ))
209+ .order_by (
210+ Comment .order_by_mark (order_by , asc_order )
211+ if "mark" in order_by
212+ else Comment .order_by_create_ts (order_by , asc_order )
213+ )
214+ )
215+
216+ comments = comments_query .limit (limit ).offset (offset ).all ()
198217 if not comments :
199218 raise ObjectNotFound (Comment , 'all' )
200219 if user and "rating.comment.review" in [scope ['name' ] for scope in user .get ('session_scopes' )]:
@@ -206,12 +225,8 @@ async def get_comments(
206225 else :
207226 result = CommentGetAll (limit = limit , offset = offset , total = len (comments ))
208227 comment_validator = CommentGet
209- result .comments = comments
210- if user_id is not None :
211- result .comments = [comment for comment in result .comments if comment .user_id == user_id ]
212228
213- if lecturer_id is not None :
214- result .comments = [comment for comment in result .comments if comment .lecturer_id == lecturer_id ]
229+ result .comments = comments
215230
216231 if unreviewed :
217232 if not user :
@@ -223,13 +238,9 @@ async def get_comments(
223238 else :
224239 result .comments = [comment for comment in result .comments if comment .review_status is ReviewStatus .APPROVED ]
225240
226- result .comments = result .comments [offset : limit + offset ]
227-
228- if "create_ts" in order_by :
229- result .comments .sort (key = lambda comment : comment .create_ts , reverse = True )
230241 result .total = len (result .comments )
231242 result .comments = [comment_validator .model_validate (comment ) for comment in result .comments ]
232- result . comments . sort ( key = lambda comment : comment . create_ts , reverse = True )
243+
233244 return result
234245
235246
0 commit comments