diff --git a/api/chalicelib/core/custom_metrics.py b/api/chalicelib/core/custom_metrics.py index 406dbd9b1..ba8ca8ff1 100644 --- a/api/chalicelib/core/custom_metrics.py +++ b/api/chalicelib/core/custom_metrics.py @@ -403,7 +403,7 @@ def update_card(metric_id, user_id, project_id, data: schemas.CardSchema): elif data.metric_type == schemas.MetricType.heat_map: if data.session_id is not None: params["session_data"] = json.dumps({"sessionId": data.session_id}) - elif metric.get("data"): + elif metric.get("data") and metric["data"].get("sessionId"): params["session_data"] = json.dumps({"sessionId": metric["data"]["sessionId"]}) with pg_client.PostgresClient() as cur: diff --git a/api/chalicelib/core/heatmaps.py b/api/chalicelib/core/heatmaps.py index 0b1011ce8..03d0a5864 100644 --- a/api/chalicelib/core/heatmaps.py +++ b/api/chalicelib/core/heatmaps.py @@ -9,7 +9,7 @@ from chalicelib.utils import pg_client, helper logger = logging.getLogger(__name__) -def get_by_url(project_id, data: schemas.GetHeatmapPayloadSchema): +def get_by_url(project_id, data: schemas.GetHeatMapPayloadSchema): args = {"startDate": data.startTimestamp, "endDate": data.endTimestamp, "project_id": project_id, "url": data.url} constraints = ["sessions.project_id = %(project_id)s", diff --git a/api/routers/core_dynamic.py b/api/routers/core_dynamic.py index 3e3a9a62d..dfee4218d 100644 --- a/api/routers/core_dynamic.py +++ b/api/routers/core_dynamic.py @@ -412,7 +412,7 @@ def get_live_session_devtools_file(projectId: int, sessionId: Union[int, str], @app.post('/{projectId}/heatmaps/url', tags=["heatmaps"]) -def get_heatmaps_by_url(projectId: int, data: schemas.GetHeatmapPayloadSchema = Body(...), +def get_heatmaps_by_url(projectId: int, data: schemas.GetHeatMapPayloadSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): return {"data": heatmaps.get_by_url(project_id=projectId, data=data)} diff --git a/api/schemas/schemas.py b/api/schemas/schemas.py index 295c7c9c2..bf6ca5674 100644 --- a/api/schemas/schemas.py +++ b/api/schemas/schemas.py @@ -1571,16 +1571,12 @@ class HeatMapFilterSchema(BaseModel): operator: Literal[SearchEventOperator._is, MathOperator._equal] = Field(...) -class GetHeatmapPayloadSchema(_TimedSchema): +class GetHeatMapPayloadSchema(_TimedSchema): url: str = Field(...) filters: List[HeatMapFilterSchema] = Field(default=[]) click_rage: bool = Field(default=False) -class GetHeatMapPayloadSchema(BaseModel): - url: str = Field(...) - - class GetClickMapPayloadSchema(GetHeatMapPayloadSchema): pass diff --git a/ee/api/chalicelib/core/custom_metrics.py b/ee/api/chalicelib/core/custom_metrics.py index 6b8e99619..10544382b 100644 --- a/ee/api/chalicelib/core/custom_metrics.py +++ b/ee/api/chalicelib/core/custom_metrics.py @@ -435,7 +435,7 @@ def update_card(metric_id, user_id, project_id, data: schemas.CardSchema): elif data.metric_type == schemas.MetricType.heat_map: if data.session_id is not None: params["session_data"] = json.dumps({"sessionId": data.session_id}) - elif metric.get("data"): + elif metric.get("data") and metric["data"].get("sessionId"): params["session_data"] = json.dumps({"sessionId": metric["data"]["sessionId"]}) with pg_client.PostgresClient() as cur: diff --git a/ee/api/chalicelib/core/heatmaps.py b/ee/api/chalicelib/core/heatmaps.py index c6e7c3169..2c213e763 100644 --- a/ee/api/chalicelib/core/heatmaps.py +++ b/ee/api/chalicelib/core/heatmaps.py @@ -17,7 +17,7 @@ from chalicelib.utils import pg_client, helper, ch_client, exp_ch_helper logger = logging.getLogger(__name__) -def get_by_url(project_id, data: schemas.GetHeatmapPayloadSchema): +def get_by_url(project_id, data: schemas.GetHeatMapPayloadSchema): args = {"startDate": data.startTimestamp, "endDate": data.endTimestamp, "project_id": project_id, "url": data.url} constraints = ["main_events.project_id = toUInt16(%(project_id)s)", @@ -90,7 +90,7 @@ def get_by_url(project_id, data: schemas.GetHeatmapPayloadSchema): return helper.list_to_camel_case(rows) -def get_x_y_by_url_and_session_id(project_id, session_id, data: schemas.GetHeatmapPayloadSchema): +def get_x_y_by_url_and_session_id(project_id, session_id, data: schemas.GetHeatMapPayloadSchema): args = {"project_id": project_id, "session_id": session_id, "url": data.url} constraints = ["main_events.project_id = toUInt16(%(project_id)s)", "main_events.session_id = %(session_id)s", @@ -120,7 +120,7 @@ def get_x_y_by_url_and_session_id(project_id, session_id, data: schemas.GetHeatm return helper.list_to_camel_case(rows) -def get_selectors_by_url_and_session_id(project_id, session_id, data: schemas.GetHeatmapPayloadSchema): +def get_selectors_by_url_and_session_id(project_id, session_id, data: schemas.GetHeatMapPayloadSchema): args = {"project_id": project_id, "session_id": session_id, "url": data.url} constraints = ["main_events.project_id = toUInt16(%(project_id)s)", "main_events.session_id = %(session_id)s", diff --git a/ee/api/routers/core_dynamic.py b/ee/api/routers/core_dynamic.py index 904cc689a..c61bb4970 100644 --- a/ee/api/routers/core_dynamic.py +++ b/ee/api/routers/core_dynamic.py @@ -441,7 +441,7 @@ def get_live_session_devtools_file(projectId: int, sessionId: Union[int, str], @app.post('/{projectId}/heatmaps/url', tags=["heatmaps"], dependencies=[OR_scope(Permissions.session_replay)]) -def get_heatmaps_by_url(projectId: int, data: schemas.GetHeatmapPayloadSchema = Body(...), +def get_heatmaps_by_url(projectId: int, data: schemas.GetHeatMapPayloadSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): return {"data": heatmaps.get_by_url(project_id=projectId, data=data)} @@ -449,13 +449,13 @@ def get_heatmaps_by_url(projectId: int, data: schemas.GetHeatmapPayloadSchema = @app.post('/{projectId}/sessions/{sessionId}/heatmaps', tags=["heatmaps"], dependencies=[OR_scope(Permissions.session_replay)]) def get_heatmaps_by_session_id_url(projectId: int, sessionId: int, - data: schemas.GetHeatmapPayloadSchema = Body(...), + data: schemas.GetHeatMapPayloadSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)): return {"data": heatmaps.get_x_y_by_url_and_session_id(project_id=projectId, session_id=sessionId, data=data)} @app.post('/{projectId}/sessions/{sessionId}/clickmaps', tags=["heatmaps"], - dependencies=[OR_scope(Permissions.session_replay)]) + dependencies=[OR_scope(Permissions.session_replay, ServicePermissions.session_replay)]) def get_clickmaps_by_session_id_url(projectId: int, sessionId: int, data: schemas.GetClickMapPayloadSchema = Body(...), context: schemas.CurrentContext = Depends(OR_context)):