diff --git a/api/chalicelib/core/jobs.py b/api/chalicelib/core/jobs.py index 8ca556fdf..3c812ad33 100644 --- a/api/chalicelib/core/jobs.py +++ b/api/chalicelib/core/jobs.py @@ -47,13 +47,14 @@ def get_all(project_id): return helper.list_to_camel_case(data) -def create(project_id, data): +def create(project_id, user_id): with pg_client.PostgresClient() as cur: - job = { - "status": "scheduled", - "project_id": project_id, - **data - } + job = {"status": "scheduled", + "project_id": project_id, + "action": Actions.DELETE_USER_DATA, + "reference_id": user_id, + "description": f"Delete user sessions of userId = {user_id}", + "start_at": TimeUTC.to_human_readable(TimeUTC.midnight(1))} query = cur.mogrify( """INSERT INTO public.jobs(project_id, description, status, action,reference_id, start_at) @@ -109,7 +110,8 @@ def __get_session_ids_by_user_ids(project_id, user_ids): """SELECT session_id FROM public.sessions WHERE project_id = %(project_id)s - AND user_id IN %(userId)s;""", + AND user_id IN %(userId)s + LIMIT 1000;""", {"project_id": project_id, "userId": tuple(user_ids)}) cur.execute(query=query) ids = cur.fetchall() @@ -120,14 +122,11 @@ def __delete_sessions_by_session_ids(session_ids): with pg_client.PostgresClient(unlimited_query=True) as cur: query = cur.mogrify( """DELETE FROM public.sessions - WHERE session_id IN %(session_ids)s - LIMIT 1000;""", + WHERE session_id IN %(session_ids)s""", {"session_ids": tuple(session_ids)} ) cur.execute(query=query) - return True - def get_scheduled_jobs(): with pg_client.PostgresClient() as cur: diff --git a/api/routers/subs/v1_api.py b/api/routers/subs/v1_api.py index 0759d0c31..ca98aaf5f 100644 --- a/api/routers/subs/v1_api.py +++ b/api/routers/subs/v1_api.py @@ -2,7 +2,6 @@ from fastapi import Depends, Body import schemas from chalicelib.core import sessions, events, jobs, projects -from chalicelib.utils.TimeUTC import TimeUTC from or_dependencies import OR_context from routers.base import get_routers @@ -15,7 +14,7 @@ async def get_user_sessions(projectKey: str, userId: str, start_date: int = None if projectId is None: return {"errors": ["invalid projectKey"]} return { - 'data': sessions.get_user_sessions( + "data": sessions.get_user_sessions( project_id=projectId, user_id=userId, start_date=start_date, @@ -30,7 +29,7 @@ async def get_session_events(projectKey: str, sessionId: int): if projectId is None: return {"errors": ["invalid projectKey"]} return { - 'data': events.get_by_session_id( + "data": events.get_by_session_id( project_id=projectId, session_id=sessionId ) @@ -43,7 +42,7 @@ async def get_user_details(projectKey: str, userId: str): if projectId is None: return {"errors": ["invalid projectKey"]} return { - 'data': sessions.get_session_user( + "data": sessions.get_session_user( project_id=projectId, user_id=userId ) @@ -55,14 +54,8 @@ async def schedule_to_delete_user_data(projectKey: str, userId: str): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} - data = {"action": "delete_user_data", - "reference_id": userId, - "description": f"Delete user sessions of userId = {userId}", - "start_at": TimeUTC.to_human_readable(TimeUTC.midnight(1))} - record = jobs.create(project_id=projectId, data=data) - return { - 'data': record - } + record = jobs.create(project_id=projectId, user_id=userId) + return {"data": record} @app_apikey.get('/v1/{projectKey}/jobs', tags=["api"]) @@ -70,16 +63,12 @@ async def get_jobs(projectKey: str): projectId = projects.get_internal_project_id(projectKey) if projectId is None: return {"errors": ["invalid projectKey"]} - return { - 'data': jobs.get_all(project_id=projectId) - } + return {"data": jobs.get_all(project_id=projectId)} @app_apikey.get('/v1/{projectKey}/jobs/{jobId}', tags=["api"]) async def get_job(projectKey: str, jobId: int): - return { - 'data': jobs.get(job_id=jobId) - } + return {"data": jobs.get(job_id=jobId)} @app_apikey.delete('/v1/{projectKey}/jobs/{jobId}', tags=["api"]) @@ -93,9 +82,7 @@ async def cancel_job(projectKey: str, jobId: int): return {"errors": ["The request job has already been canceled/completed."]} job["status"] = "cancelled" - return { - 'data': jobs.update(job_id=jobId, job=job) - } + return {"data": jobs.update(job_id=jobId, job=job)} @app_apikey.get('/v1/projects', tags=["api"]) @@ -104,15 +91,13 @@ async def get_projects(context: schemas.CurrentContext = Depends(OR_context)): for record in records: del record['projectId'] - return { - 'data': records - } + return {"data": records} @app_apikey.get('/v1/projects/{projectKey}', tags=["api"]) async def get_project(projectKey: str, context: schemas.CurrentContext = Depends(OR_context)): return { - 'data': projects.get_project_by_key(tenant_id=context.tenant_id, project_key=projectKey) + "data": projects.get_project_by_key(tenant_id=context.tenant_id, project_key=projectKey) } @@ -125,5 +110,5 @@ async def create_project(data: schemas.CreateProjectSchema = Body(...), data=data, skip_authorization=True ) - del record['data']['projectId'] + del record["data"]['projectId'] return record