diff --git a/ee/api/chalicelib/core/assist_records.py b/ee/api/chalicelib/core/assist_records.py index bdb6362f4..a858b7996 100644 --- a/ee/api/chalicelib/core/assist_records.py +++ b/ee/api/chalicelib/core/assist_records.py @@ -24,7 +24,8 @@ def search_records(project_id, data: schemas_ee.AssistRecordSearchPayloadSchema, conditions = ["projects.tenant_id=%(tenant_id)s", "projects.deleted_at ISNULL", "assist_records.created_at>=%(startDate)s", - "assist_records.created_at<=%(endDate)s"] + "assist_records.created_at<=%(endDate)s", + "assist_records.deleted_at ISNULL"] params = {"tenant_id": context.tenant_id, "project_id": project_id, "startDate": data.startDate, "endDate": data.endDate, "p_start": (data.page - 1) * data.limit, "p_limit": data.limit, @@ -53,12 +54,13 @@ def search_records(project_id, data: schemas_ee.AssistRecordSearchPayloadSchema, def get_record(project_id, record_id, context: schemas_ee.CurrentContext): conditions = ["projects.tenant_id=%(tenant_id)s", "projects.deleted_at ISNULL", - "assist_records.record_id=%(record_id)s"] + "assist_records.record_id=%(record_id)s", + "assist_records.deleted_at ISNULL"] params = {"tenant_id": context.tenant_id, "project_id": project_id, "record_id": record_id} with pg_client.PostgresClient() as cur: query = cur.mogrify(f"""SELECT record_id, user_id, session_id, assist_records.created_at, - assist_records.name, duration, users.name AS created_by, - file_key + assist_records.name, duration, users.name AS created_by, + file_key FROM assist_records INNER JOIN projects USING (project_id) LEFT JOIN users USING (user_id) @@ -73,3 +75,41 @@ def get_record(project_id, record_id, context: schemas_ee.CurrentContext): ExpiresIn=config("PRESIGNED_URL_EXPIRATION", cast=int, default=900) ) return result + + +def update_record(project_id, record_id, data: schema_ee.AssistRecordUpdatePayloadSchema, + context: schemas_ee.CurrentContext): + conditions = ["assist_records.record_id=%(record_id)s", "assist_records.deleted_at ISNULL"] + params = {"tenant_id": context.tenant_id, "project_id": project_id, "record_id": record_id, "name": data.name} + with pg_client.PostgresClient() as cur: + query = cur.mogrify(f"""UPDATE assist_records + SET name= %(name)s + WHERE {" AND ".join(conditions)} + RETURNING record_id, user_id, session_id, assist_records.created_at, + assist_records.name, duration, users.name AS created_by, + file_key;""", params) + cur.execute(query) + result = helper.dict_to_camel_case(cur.fetchone()) + if not result: + return {"errors": ["record not found"]} + result["URL"] = s3.client.generate_presigned_url( + 'get_object', + Params={'Bucket': config("ASSIST_RECORDS_BUCKET"), 'Key': result.pop("fileKey")}, + ExpiresIn=config("PRESIGNED_URL_EXPIRATION", cast=int, default=900) + ) + return result + + +def delete_record(project_id, record_id, context: schemas_ee.CurrentContext): + conditions = ["assist_records.record_id=%(record_id)s"] + params = {"tenant_id": context.tenant_id, "project_id": project_id, "record_id": record_id} + with pg_client.PostgresClient() as cur: + query = cur.mogrify(f"""UPDATE assist_records + SET deleted_at= (now() at time zone 'utc') + WHERE {" AND ".join(conditions)} + RETURNING 1;""", params) + cur.execute(query) + result = helper.dict_to_camel_case(cur.fetchone()) + if not result: + return {"errors": ["record not found"]} + return {"state": "success"} diff --git a/ee/api/routers/ee.py b/ee/api/routers/ee.py index 9748bd719..076f4fd36 100644 --- a/ee/api/routers/ee.py +++ b/ee/api/routers/ee.py @@ -92,3 +92,20 @@ def search_records(projectId: int, data: schemas_ee.AssistRecordSearchPayloadSch @app.get('/{projectId}/assist/records/{recordId}', tags=["assist"]) def get_record(projectId: int, recordId: int, context: schemas_ee.CurrentContext = Depends(OR_context)): return {"data": assist_records.get_record(project_id=projectId, record_id=recordId, context=context)} + + +@app.post('/{projectId}/assist/records/{recordId}', tags=["assist"]) +def update_record(projectId: int, recordId: int, data: schemas_ee.AssistRecordUpdatePayloadSchema = Body(...), + context: schemas_ee.CurrentContext = Depends(OR_context)): + result = assist_records.update_record(project_id=projectId, record_id=recordId, data=data, context=context) + if "errors" in result: + return result + return {"data": result} + + +@app.delete('/{projectId}/assist/records/{recordId}', tags=["assist"]) +def delete_record(projectId: int, recordId: int, context: schemas_ee.CurrentContext = Depends(OR_context)): + result = assist_records.delete_record(project_id=projectId, record_id=recordId, context=context) + if "errors" in result: + return result + return {"data": result} diff --git a/ee/api/schemas_ee.py b/ee/api/schemas_ee.py index 7f105c8ef..22712a29f 100644 --- a/ee/api/schemas_ee.py +++ b/ee/api/schemas_ee.py @@ -83,8 +83,11 @@ class SessionModel(BaseModel): metadata: dict = Field(default={}) -class AssistRecordPayloadSchema(BaseModel): - name: str = Field(...) +class AssistRecordUpdatePayloadSchema(BaseModel): + name: str = Field(..., min_length=1) + + +class AssistRecordPayloadSchema(AssistRecordUpdatePayloadSchema): duration: int = Field(...) session_id: int = Field(...)