diff --git a/api/chalicelib/core/assist_stats.py b/api/chalicelib/core/assist_stats.py index d2bd6505c..8cc112e6b 100644 --- a/api/chalicelib/core/assist_stats.py +++ b/api/chalicelib/core/assist_stats.py @@ -1,9 +1,18 @@ import logging from datetime import datetime +from fastapi import HTTPException + from chalicelib.utils import pg_client, helper from schemas import AssistStatsSessionsRequest, AssistStatsSessionsResponse, AssistStatsTopMembersResponse +event_type_mapping = { + "sessionsAssisted": "assist", + "assistDuration": "assist", + "callDuration": "call", + "controlDuration": "control" +} + def insert_aggregated_data(): try: @@ -261,29 +270,25 @@ def get_top_members( sort_by: str, sort_order: str, user_id: int = None, + page: int = 0, + limit: int = 5, ) -> AssistStatsTopMembersResponse: - event_type_mapping = { - "sessionsAssisted": "assist", - "assistDuration": "assist", - "callDuration": "call", - "controlDuration": "control" - } - event_type = event_type_mapping.get(sort_by) if event_type is None: - raise ValueError("Invalid sortBy option") + raise HTTPException(status_code=400, detail="Invalid sort option provided. Supported options are: " + ", ".join( + event_type_mapping.keys())) constraints = [ "project_id = %(project_id)s", "timestamp BETWEEN %(start_timestamp)s AND %(end_timestamp)s", - "duration > 0", + # "duration > 0", # "event_type = %(event_type)s", ] params = { "project_id": project_id, - "limit": 5, - "offset": 0, + "limit": limit, + "offset": page, "sort_by": sort_by, "sort_order": sort_order.upper(), "start_timestamp": start_timestamp, @@ -352,6 +357,7 @@ def get_sessions( constraints.append("agent_id = %(agent_id)s") params["agent_id"] = data.userId + logging.info(f">>>>>>> {params}") sql = f""" SELECT COUNT(1) OVER () AS count, diff --git a/api/routers/core.py b/api/routers/core.py index 1b736a396..95c893ad9 100644 --- a/api/routers/core.py +++ b/api/routers/core.py @@ -1,8 +1,8 @@ import json from datetime import datetime, timedelta -from typing import Union, List, Dict +from typing import Union, List, Dict, Optional from decouple import config -from fastapi import Depends, Body, Query +from fastapi import Depends, Body, Query, HTTPException from starlette.responses import FileResponse import schemas @@ -889,15 +889,18 @@ def get_assist_stats_top_members( project_id: int, startTimestamp: int = None, endTimestamp: int = None, - sortyBy: str = "sessionsAssisted", - sortOder: str = "desc" + sort: Optional[str] = Query(default="sessionsAssisted", + description="Sort options: " + ", ".join(assist_stats.event_type_mapping)), + order: str = "desc", + userId: int = None ): return assist_stats.get_top_members( project_id=project_id, start_timestamp=startTimestamp, end_timestamp=endTimestamp, - sort_by=sortyBy, - sort_order=sortOder + sort_by=sort, + sort_order=order, + user_id=userId )