vbv/server/vbv_lernwelt/files/views.py

43 lines
1.2 KiB
Python

import structlog
from rest_framework.decorators import api_view
from rest_framework.response import Response
from vbv_lernwelt.files.serializers import PresignInputSerializer
from vbv_lernwelt.files.services import FileDirectUploadService
logger = structlog.get_logger(__name__)
@api_view(["POST"])
def presign(request):
logger.debug(
"presign request",
file_type=request.data.get("file_type"),
file_name=request.data.get("file_name"),
label="file_upload",
)
if not request.user.is_authenticated:
return Response(status=401)
serializer = PresignInputSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
service = FileDirectUploadService(request.user)
upload_file, pre_signed_data = service.start(
file_name=serializer.validated_data["file_name"],
file_type=serializer.validated_data["file_type"],
)
return Response(
data={
"pre_sign": pre_signed_data,
"file_info": {
"id": upload_file.id,
"name": upload_file.original_file_name,
"url": upload_file.url,
},
}
)