feat(chalice): changed save record logic

feat(chalice): fixed update record
This commit is contained in:
Taha Yassine Kraiem 2022-11-18 12:22:45 +01:00
parent 7052668924
commit 3d5355ef52
3 changed files with 38 additions and 12 deletions

View file

@ -6,18 +6,29 @@ from chalicelib.utils import s3, pg_client, helper
from chalicelib.utils.TimeUTC import TimeUTC
def presign_records(project_id, data: schemas_ee.AssistRecordPayloadSchema, context: schemas_ee.CurrentContext):
params = {"user_id": context.user_id, "project_id": project_id, **data.dict()}
def presign_record(project_id, data: schemas_ee.AssistRecordPayloadSchema, context: schemas_ee.CurrentContext):
key = s3.generate_file_key(project_id=project_id, key=f"{TimeUTC.now()}-{data.name}")
presigned_url = s3.get_presigned_url_for_upload(bucket=config('ASSIST_RECORDS_BUCKET'), expires_in=1800, key=key)
params["key"] = key
return {"URL": presigned_url, "key": presigned_url}
def save_record(project_id, data: schemas_ee.AssistRecordSavePayloadSchema, context: schemas_ee.CurrentContext):
params = {"user_id": context.user_id, "project_id": project_id, **data.dict()}
with pg_client.PostgresClient() as cur:
query = cur.mogrify(f"""INSERT INTO assist_records(project_id, user_id, name, file_key, duration, session_id)
VALUES (%(project_id)s, %(user_id)s, %(name)s, %(key)s,
%(duration)s, %(session_id)s);""", params)
query = cur.mogrify(
f"""INSERT INTO assist_records(project_id, user_id, name, file_key, duration, session_id)
VALUES (%(project_id)s, %(user_id)s, %(name)s, %(key)s,%(duration)s, %(session_id)s)
RETURNING record_id, user_id, session_id, created_at, name, duration,
(SELECT name FROM users WHERE users.user_id = %(user_id)s LIMIT 1) AS created_by, file_key;""",
params)
cur.execute(query)
return presigned_url
result = helper.dict_to_camel_case(cur.fetchone())
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 search_records(project_id, data: schemas_ee.AssistRecordSearchPayloadSchema, context: schemas_ee.CurrentContext):
@ -84,10 +95,14 @@ def update_record(project_id, record_id, data: schemas_ee.AssistRecordUpdatePayl
with pg_client.PostgresClient() as cur:
query = cur.mogrify(f"""UPDATE assist_records
SET name= %(name)s
FROM (SELECT users.name AS created_by
FROM assist_records INNER JOIN users USING (user_id)
WHERE record_id = %(record_id)s
AND assist_records.deleted_at ISNULL
LIMIT 1) AS users
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)
assist_records.name, duration, created_by, file_key;""", params)
cur.execute(query)
result = helper.dict_to_camel_case(cur.fetchone())
if not result:

View file

@ -74,13 +74,20 @@ def get_available_trail_actions(context: schemas_ee.CurrentContext = Depends(OR_
return {'data': traces.get_available_actions(tenant_id=context.tenant_id)}
@app.put('/{projectId}/assist/save/', tags=["assist"])
@app.put('/{projectId}/assist/save', tags=["assist"])
def sign_record_for_upload(projectId: int, data: schemas_ee.AssistRecordPayloadSchema = Body(...),
context: schemas_ee.CurrentContext = Depends(OR_context)):
if not sessions.session_exists(project_id=projectId, session_id=data.session_id):
return {"errors": ["Session not found"]}
return {"data": {"URL": assist_records.presign_records(project_id=projectId, data=data, context=context)}}
return {"data": assist_records.presign_record(project_id=projectId, data=data, context=context)}
@app.put('/{projectId}/assist/save/done', tags=["assist"])
def save_record_after_upload(projectId: int, data: schemas_ee.AssistRecordSavePayloadSchema = Body(...),
context: schemas_ee.CurrentContext = Depends(OR_context)):
if not sessions.session_exists(project_id=projectId, session_id=data.session_id):
return {"errors": ["Session not found"]}
return {"data": {"URL": assist_records.save_record(project_id=projectId, data=data, context=context)}}
@app.post('/{projectId}/assist/records', tags=["assist"])

View file

@ -95,6 +95,10 @@ class AssistRecordPayloadSchema(AssistRecordUpdatePayloadSchema):
alias_generator = schemas.attribute_to_camel_case
class AssistRecordSavePayloadSchema(AssistRecordPayloadSchema):
key: str = Field(...)
class AssistRecordSearchPayloadSchema(schemas._PaginatedSchema):
limit: int = Field(default=200, gt=0)
startDate: int = Field(default=TimeUTC.now(-7))