Skip to content

Commit 5e39580

Browse files
authored
Merge pull request #19 from DurianPy-Davao-Python-User-Group/feat/fix-presigned-url-api
refactor: remove s3 sdk and use presigned URL from API
2 parents 6fb2b9e + f10e42c commit 5e39580

File tree

17 files changed

+4837
-4485
lines changed

17 files changed

+4837
-4485
lines changed

backend/constants/common_constants.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class CommonConstants:
3030
REGISTRATION_ID = 'registrationId'
3131
PREREGISTRATION_ID = 'preRegistrationId'
3232

33+
OBJECT_KEY = 'objectKey'
34+
3335
# Exclude to Comparison Keys
3436
EXCLUDE_COMPARISON_KEYS = [
3537
CLS,

backend/controller/event_router.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from model.common import Message
88
from model.events.event import EventAdminOut, EventIn, EventOut
99
from model.events.events_constants import EventUploadType
10-
from model.file_uploads.file_upload import FileUploadIn, FileUploadOut
10+
from model.file_uploads.file_upload import FileDownloadOut, FileUploadIn, FileUploadOut
1111
from model.file_uploads.file_upload_constants import FileUploadConstants
1212
from usecase.event_usecase import EventUsecase
1313
from usecase.file_s3_usecase import FileS3Usecase
@@ -298,3 +298,32 @@ def get_presigned_url(
298298
"""
299299
file_s3_uc = FileS3Usecase()
300300
return file_s3_uc.create_presigned_url(f'events/{entry_id}/{upload_type.value}/{upload_in.fileName}')
301+
302+
303+
@event_router.get(
304+
'/{entryId}/download',
305+
response_model=FileDownloadOut,
306+
responses={500: {'model': Message, 'description': 'Interal server error'}},
307+
summary='Get download URL',
308+
)
309+
@event_router.get(
310+
'/{entryId}/download/',
311+
response_model=FileDownloadOut,
312+
response_model_exclude_none=True,
313+
response_model_exclude_unset=True,
314+
include_in_schema=False,
315+
)
316+
def get_download_url(
317+
object_key: str = Query(..., title='Object key', alias=CommonConstants.OBJECT_KEY),
318+
):
319+
"""Get download URL
320+
321+
:param object_key: The key of the object. Defaults to Query(None, title='Object key', alias=CommonConstants.OBJECT_KEY).
322+
:type admin_id: str
323+
324+
:return: FileDownloadOut object.
325+
:rtype: FileDownloadOut
326+
327+
"""
328+
file_s3_uc = FileS3Usecase()
329+
return file_s3_uc.create_download_url(object_key=object_key)

backend/usecase/file_s3_usecase.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from http import HTTPStatus
23
from typing import Tuple
34

45
from boto3 import client as boto3_client
@@ -65,7 +66,9 @@ def create_download_url(self, object_key) -> FileDownloadOut:
6566
return FileDownloadOut(**url_data)
6667
except ClientError as e:
6768
logger.error('Error creating presigned url: %s', e)
68-
return None
69+
return JSONResponse(
70+
status_code=HTTPStatus.INTERNAL_SERVER_ERROR, content={'message': 'Error fetching download url'}
71+
)
6972

7073
def upload_file(self, file_name: str, object_name: str = None, verbose: bool = True) -> bool:
7174
# If S3 object_name was not specified, use file_name

0 commit comments

Comments
 (0)