feat(chalice): changed save record logic
feat(chalice): fixed update record
This commit is contained in:
parent
7052668924
commit
3d5355ef52
3 changed files with 38 additions and 12 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue