From b0f9d84e815443ff7d667d6d1b922ce3cd0efca9 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Mon, 20 Dec 2021 13:14:24 +0100 Subject: [PATCH] feat(api): last_tracker_version as a parameter for GET /projects/{projectId} --- api/chalicelib/core/projects.py | 16 ++++++++++++++-- api/routers/core_dynamic.py | 5 +++-- ee/api/chalicelib/core/projects.py | 13 ++++++++++++- ee/api/routers/core_dynamic.py | 5 +++-- 4 files changed, 32 insertions(+), 7 deletions(-) diff --git a/api/chalicelib/core/projects.py b/api/chalicelib/core/projects.py index 5bd16dbea..2536ee956 100644 --- a/api/chalicelib/core/projects.py +++ b/api/chalicelib/core/projects.py @@ -46,7 +46,7 @@ def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, st last_tracker_version=None): with pg_client.PostgresClient() as cur: tracker_query = "" - if last_tracker_version is not None and len(last_tracker_version)>0: + if last_tracker_version is not None and len(last_tracker_version) > 0: tracker_query = cur.mogrify( """,(SELECT tracker_version FROM public.sessions WHERE sessions.project_id = s.project_id @@ -87,8 +87,19 @@ def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, st return helper.list_to_camel_case(rows) -def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None): +def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None, version=False, + last_tracker_version=None): with pg_client.PostgresClient() as cur: + tracker_query = "" + if last_tracker_version is not None and len(last_tracker_version) > 0: + tracker_query = cur.mogrify( + """,(SELECT tracker_version FROM public.sessions + WHERE sessions.project_id = s.project_id + AND tracker_version=%(version)s AND tracker_version IS NOT NULL LIMIT 1) AS tracker_version""", + {"version": last_tracker_version}).decode('UTF-8') + elif version: + tracker_query = ",(SELECT tracker_version FROM public.sessions WHERE sessions.project_id = s.project_id ORDER BY start_ts DESC LIMIT 1) AS tracker_version" + query = cur.mogrify(f"""\ SELECT s.project_id, @@ -96,6 +107,7 @@ def get_project(tenant_id, project_id, include_last_session=False, include_gdpr= s.name {",(SELECT max(ss.start_ts) FROM public.sessions AS ss WHERE ss.project_id = %(project_id)s) AS last_recorded_session_at" if include_last_session else ""} {',s.gdpr' if include_gdpr else ''} + {tracker_query} FROM public.projects AS s where s.project_id =%(project_id)s AND s.deleted_at IS NULL diff --git a/api/routers/core_dynamic.py b/api/routers/core_dynamic.py index bf8a66092..de9eb4da9 100644 --- a/api/routers/core_dynamic.py +++ b/api/routers/core_dynamic.py @@ -91,9 +91,10 @@ def get_projects_limit(context: schemas.CurrentContext = Depends(OR_context)): @app.get('/projects/{projectId}', tags=['projects']) -def get_project(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): +def get_project(projectId: int, last_tracker_version: Optional[str] = None, + context: schemas.CurrentContext = Depends(OR_context)): data = projects.get_project(tenant_id=context.tenant_id, project_id=projectId, include_last_session=True, - include_gdpr=True) + include_gdpr=True, last_tracker_version=last_tracker_version) if data is None: return {"errors": ["project not found"]} return {"data": data} diff --git a/ee/api/chalicelib/core/projects.py b/ee/api/chalicelib/core/projects.py index 15f766381..35fcaaf2b 100644 --- a/ee/api/chalicelib/core/projects.py +++ b/ee/api/chalicelib/core/projects.py @@ -88,8 +88,19 @@ def get_projects(tenant_id, recording_state=False, gdpr=None, recorded=False, st return helper.list_to_camel_case(rows) -def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None): +def get_project(tenant_id, project_id, include_last_session=False, include_gdpr=None, version=False, + last_tracker_version=None): with pg_client.PostgresClient() as cur: + tracker_query = "" + if last_tracker_version is not None and len(last_tracker_version) > 0: + tracker_query = cur.mogrify( + """,(SELECT tracker_version FROM public.sessions + WHERE sessions.project_id = s.project_id + AND tracker_version=%(version)s AND tracker_version IS NOT NULL LIMIT 1) AS tracker_version""", + {"version": last_tracker_version}).decode('UTF-8') + elif version: + tracker_query = ",(SELECT tracker_version FROM public.sessions WHERE sessions.project_id = s.project_id ORDER BY start_ts DESC LIMIT 1) AS tracker_version" + query = cur.mogrify(f"""\ SELECT s.project_id, diff --git a/ee/api/routers/core_dynamic.py b/ee/api/routers/core_dynamic.py index a882c091b..31bf77b81 100644 --- a/ee/api/routers/core_dynamic.py +++ b/ee/api/routers/core_dynamic.py @@ -92,9 +92,10 @@ def get_projects_limit(context: schemas.CurrentContext = Depends(OR_context)): @app.get('/projects/{projectId}', tags=['projects']) -def get_project(projectId: int, context: schemas.CurrentContext = Depends(OR_context)): +def get_project(projectId: int, last_tracker_version: Optional[str] = None, + context: schemas.CurrentContext = Depends(OR_context)): data = projects.get_project(tenant_id=context.tenant_id, project_id=projectId, include_last_session=True, - include_gdpr=True) + include_gdpr=True, last_tracker_version=last_tracker_version) if data is None: return {"errors": ["project not found"]} return {"data": data}