feat(api): search bookmarked sessions
This commit is contained in:
parent
0c3e2cb68d
commit
b4de14423d
5 changed files with 21 additions and 19 deletions
|
|
@ -103,10 +103,8 @@ def Build(a):
|
||||||
a["filter"]["startDate"] = -1
|
a["filter"]["startDate"] = -1
|
||||||
a["filter"]["endDate"] = TimeUTC.now()
|
a["filter"]["endDate"] = TimeUTC.now()
|
||||||
full_args, query_part, sort = sessions.search_query_parts(
|
full_args, query_part, sort = sessions.search_query_parts(
|
||||||
data=schemas.SessionsSearchPayloadSchema.parse_obj(a["filter"]),
|
data=schemas.SessionsSearchPayloadSchema.parse_obj(a["filter"]), error_status=None, errors_only=False,
|
||||||
error_status=None, errors_only=False,
|
issue=None, project_id=a["projectId"], user_id=None)
|
||||||
favorite_only=False, issue=None, project_id=a["projectId"],
|
|
||||||
user_id=None)
|
|
||||||
subQ = f"""SELECT COUNT(session_id) AS value
|
subQ = f"""SELECT COUNT(session_id) AS value
|
||||||
{query_part}"""
|
{query_part}"""
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -439,7 +439,7 @@ def search(data, project_id, user_id, flows=False, status="ALL", favorite_only=F
|
||||||
data["endDate"] = TimeUTC.now(1)
|
data["endDate"] = TimeUTC.now(1)
|
||||||
if len(data.get("events", [])) > 0 or len(data.get("filters", [])) > 0 or status != "ALL" or favorite_only:
|
if len(data.get("events", [])) > 0 or len(data.get("filters", [])) > 0 or status != "ALL" or favorite_only:
|
||||||
statuses = sessions.search2_pg(data=data, project_id=project_id, user_id=user_id, errors_only=True,
|
statuses = sessions.search2_pg(data=data, project_id=project_id, user_id=user_id, errors_only=True,
|
||||||
error_status=status, favorite_only=favorite_only)
|
error_status=status)
|
||||||
if len(statuses) == 0:
|
if len(statuses) == 0:
|
||||||
return {"data": {
|
return {"data": {
|
||||||
'total': 0,
|
'total': 0,
|
||||||
|
|
|
||||||
|
|
@ -168,10 +168,9 @@ def _isUndefined_operator(op: schemas.SearchEventOperator):
|
||||||
|
|
||||||
|
|
||||||
@dev.timed
|
@dev.timed
|
||||||
def search2_pg(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, favorite_only=False, errors_only=False,
|
def search2_pg(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, errors_only=False,
|
||||||
error_status="ALL", count_only=False, issue=None):
|
error_status="ALL", count_only=False, issue=None):
|
||||||
full_args, query_part, sort = search_query_parts(data, error_status, errors_only, favorite_only, issue, project_id,
|
full_args, query_part, sort = search_query_parts(data, error_status, errors_only, issue, project_id, user_id)
|
||||||
user_id)
|
|
||||||
if data.limit is not None and data.page is not None:
|
if data.limit is not None and data.page is not None:
|
||||||
full_args["sessions_limit_s"] = (data.page - 1) * data.limit
|
full_args["sessions_limit_s"] = (data.page - 1) * data.limit
|
||||||
full_args["sessions_limit_e"] = data.page * data.limit
|
full_args["sessions_limit_e"] = data.page * data.limit
|
||||||
|
|
@ -229,9 +228,9 @@ def search2_pg(data: schemas.SessionsSearchPayloadSchema, project_id, user_id, f
|
||||||
ORDER BY favorite DESC, issue_score DESC, {sort} {data.order}) AS full_sessions;""",
|
ORDER BY favorite DESC, issue_score DESC, {sort} {data.order}) AS full_sessions;""",
|
||||||
full_args)
|
full_args)
|
||||||
|
|
||||||
# print("--------------------")
|
print("--------------------")
|
||||||
# print(main_query)
|
print(main_query)
|
||||||
# print("--------------------")
|
print("--------------------")
|
||||||
cur.execute(main_query)
|
cur.execute(main_query)
|
||||||
|
|
||||||
if count_only:
|
if count_only:
|
||||||
|
|
@ -282,7 +281,7 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d
|
||||||
data.filters.append(schemas.SessionSearchFilterSchema(value=metric_value, type=schemas.FilterType.issue,
|
data.filters.append(schemas.SessionSearchFilterSchema(value=metric_value, type=schemas.FilterType.issue,
|
||||||
operator=schemas.SearchEventOperator._is))
|
operator=schemas.SearchEventOperator._is))
|
||||||
full_args, query_part, sort = search_query_parts(data=data, error_status=None, errors_only=False,
|
full_args, query_part, sort = search_query_parts(data=data, error_status=None, errors_only=False,
|
||||||
favorite_only=False, issue=None, project_id=project_id,
|
issue=None, project_id=project_id,
|
||||||
user_id=None, extra_event=extra_event)
|
user_id=None, extra_event=extra_event)
|
||||||
full_args["step_size"] = step_size
|
full_args["step_size"] = step_size
|
||||||
sessions = []
|
sessions = []
|
||||||
|
|
@ -366,7 +365,7 @@ def search2_series(data: schemas.SessionsSearchPayloadSchema, project_id: int, d
|
||||||
return sessions
|
return sessions
|
||||||
|
|
||||||
|
|
||||||
def search_query_parts(data, error_status, errors_only, favorite_only, issue, project_id, user_id, extra_event=None):
|
def search_query_parts(data, error_status, errors_only, issue, project_id, user_id, extra_event=None):
|
||||||
ss_constraints = []
|
ss_constraints = []
|
||||||
full_args = {"project_id": project_id, "startDate": data.startDate, "endDate": data.endDate,
|
full_args = {"project_id": project_id, "startDate": data.startDate, "endDate": data.endDate,
|
||||||
"projectId": project_id, "userId": user_id}
|
"projectId": project_id, "userId": user_id}
|
||||||
|
|
@ -376,10 +375,9 @@ def search_query_parts(data, error_status, errors_only, favorite_only, issue, pr
|
||||||
]
|
]
|
||||||
extra_from = ""
|
extra_from = ""
|
||||||
fav_only_join = ""
|
fav_only_join = ""
|
||||||
if favorite_only and not errors_only:
|
if data.bookmarked and not errors_only:
|
||||||
fav_only_join = "LEFT JOIN public.user_favorite_sessions AS fs ON fs.session_id = s.session_id"
|
fav_only_join = "LEFT JOIN public.user_favorite_sessions AS fs ON fs.session_id = s.session_id"
|
||||||
extra_constraints.append("fs.user_id = %(userId)s")
|
# extra_constraints.append("fs.user_id = %(userId)s")
|
||||||
full_args["userId"] = user_id
|
|
||||||
events_query_part = ""
|
events_query_part = ""
|
||||||
if len(data.filters) > 0:
|
if len(data.filters) > 0:
|
||||||
meta_keys = None
|
meta_keys = None
|
||||||
|
|
@ -971,11 +969,16 @@ def search_query_parts(data, error_status, errors_only, favorite_only, issue, pr
|
||||||
if error_status != "ALL":
|
if error_status != "ALL":
|
||||||
extra_constraints.append("ser.status = %(error_status)s")
|
extra_constraints.append("ser.status = %(error_status)s")
|
||||||
full_args["status"] = error_status.lower()
|
full_args["status"] = error_status.lower()
|
||||||
if favorite_only:
|
if data.bookmarked:
|
||||||
extra_from += " INNER JOIN public.user_favorite_errors AS ufe USING (error_id)"
|
extra_from += " INNER JOIN public.user_favorite_errors AS ufe USING (error_id)"
|
||||||
extra_constraints.append("ufe.user_id = %(user_id)s")
|
extra_constraints.append("ufe.user_id = %(user_id)s")
|
||||||
# extra_constraints = [extra.decode('UTF-8') + "\n" for extra in extra_constraints]
|
# extra_constraints = [extra.decode('UTF-8') + "\n" for extra in extra_constraints]
|
||||||
if not favorite_only and not errors_only and user_id is not None:
|
if data.bookmarked and not errors_only and user_id is not None:
|
||||||
|
extra_from += """INNER JOIN (SELECT user_id, session_id
|
||||||
|
FROM public.user_favorite_sessions
|
||||||
|
WHERE user_id = %(userId)s) AS favorite_sessions
|
||||||
|
USING (session_id)"""
|
||||||
|
elif not data.bookmarked and not errors_only and user_id is not None:
|
||||||
extra_from += """LEFT JOIN (SELECT user_id, session_id
|
extra_from += """LEFT JOIN (SELECT user_id, session_id
|
||||||
FROM public.user_favorite_sessions
|
FROM public.user_favorite_sessions
|
||||||
WHERE user_id = %(userId)s) AS favorite_sessions
|
WHERE user_id = %(userId)s) AS favorite_sessions
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ def events_search(projectId: int, q: str,
|
||||||
@app.post('/{projectId}/sessions/search2', tags=["sessions"])
|
@app.post('/{projectId}/sessions/search2', tags=["sessions"])
|
||||||
def sessions_search2(projectId: int, data: schemas.FlatSessionsSearchPayloadSchema = Body(...),
|
def sessions_search2(projectId: int, data: schemas.FlatSessionsSearchPayloadSchema = Body(...),
|
||||||
context: schemas.CurrentContext = Depends(OR_context)):
|
context: schemas.CurrentContext = Depends(OR_context)):
|
||||||
data = sessions.search2_pg(data, projectId, user_id=context.user_id)
|
data = sessions.search2_pg(data=data, project_id=projectId, user_id=context.user_id)
|
||||||
return {'data': data}
|
return {'data': data}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -614,6 +614,7 @@ class SessionsSearchPayloadSchema(BaseModel):
|
||||||
group_by_user: bool = Field(default=False)
|
group_by_user: bool = Field(default=False)
|
||||||
limit: int = Field(default=200, gt=0, le=200)
|
limit: int = Field(default=200, gt=0, le=200)
|
||||||
page: int = Field(default=1, gt=0)
|
page: int = Field(default=1, gt=0)
|
||||||
|
bookmarked: bool = Field(default=False)
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
alias_generator = attribute_to_camel_case
|
alias_generator = attribute_to_camel_case
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue