diff --git a/api/chalicelib/core/alerts_processor.py b/api/chalicelib/core/alerts_processor.py index 56fde11da..ece75bfe5 100644 --- a/api/chalicelib/core/alerts_processor.py +++ b/api/chalicelib/core/alerts_processor.py @@ -99,10 +99,10 @@ def Build(a): j_s = True if a["seriesId"] is not None: a["filter"]["sort"] = "session_id" - a["filter"]["order"] = "DESC" + a["filter"]["order"] = schemas.SortOrderType.desc a["filter"]["startDate"] = -1 a["filter"]["endDate"] = TimeUTC.now() - full_args, query_part= sessions.search_query_parts( + full_args, query_part = sessions.search_query_parts( data=schemas.SessionsSearchPayloadSchema.parse_obj(a["filter"]), error_status=None, errors_only=False, issue=None, project_id=a["projectId"], user_id=None, favorite_only=False) subQ = f"""SELECT COUNT(session_id) AS value diff --git a/api/chalicelib/core/errors.py b/api/chalicelib/core/errors.py index a7f863e79..983d091f8 100644 --- a/api/chalicelib/core/errors.py +++ b/api/chalicelib/core/errors.py @@ -463,7 +463,7 @@ def search(data: schemas.SearchErrorsSchema, project_id, user_id, flows=False): sort = __get_sort_key('datetime') if data.sort is not None: sort = __get_sort_key(data.sort) - order = "DESC" + order = schemas.SortOrderType.desc if data.order is not None: order = data.order extra_join = "" diff --git a/api/chalicelib/core/sessions.py b/api/chalicelib/core/sessions.py index adc549d1e..e717f1d07 100644 --- a/api/chalicelib/core/sessions.py +++ b/api/chalicelib/core/sessions.py @@ -201,12 +201,12 @@ def search2_pg(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, e elif data.group_by_user: g_sort = "count(full_sessions)" if data.order is None: - data.order = "DESC" + data.order = schemas.SortOrderType.desc else: data.order = data.order.upper() if data.sort is not None and data.sort != 'sessionsCount': sort = helper.key_to_snake_case(data.sort) - g_sort = f"{'MIN' if data.order == 'DESC' else 'MAX'}({sort})" + g_sort = f"{'MIN' if data.order == schemas.SortOrderType.desc else 'MAX'}({sort})" else: sort = 'start_ts' @@ -230,7 +230,7 @@ def search2_pg(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, e full_args) else: if data.order is None: - data.order = "DESC" + data.order = schemas.SortOrderType.desc sort = 'session_id' if data.sort is not None and data.sort != "session_id": # sort += " " + data.order + "," + helper.key_to_snake_case(data.sort) diff --git a/api/schemas.py b/api/schemas.py index 1d92f5fce..ae3720624 100644 --- a/api/schemas.py +++ b/api/schemas.py @@ -618,17 +618,27 @@ class _PaginatedSchema(BaseModel): page: int = Field(default=1, gt=0) +class SortOrderType(str, Enum): + asc = "ASC" + desc = "DESC" + + class SessionsSearchPayloadSchema(_PaginatedSchema): events: List[_SessionSearchEventSchema] = Field([]) filters: List[SessionSearchFilterSchema] = Field([]) startDate: int = Field(None) endDate: int = Field(None) sort: str = Field(default="startTs") - order: Literal["asc", "desc"] = Field(default="desc") + order: Literal[SortOrderType] = Field(default=SortOrderType.desc) events_order: Optional[SearchEventOrder] = Field(default=SearchEventOrder._then) group_by_user: bool = Field(default=False) bookmarked: bool = Field(default=False) + @root_validator(pre=True) + def transform_order(cls, values): + if values.get("order") is not None: + values["order"] = values["order"].upper() + class Config: alias_generator = attribute_to_camel_case