from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from rest_framework import status from apps.core.utils.cloudflare import get_direct_upload_url from django.core.exceptions import ImproperlyConfigured import requests import logging logger = logging.getLogger(__name__) class GenerateUploadURLView(APIView): permission_classes = [IsAuthenticated] def post(self, request): try: # Pass user_id for metadata if needed result = get_direct_upload_url(user_id=str(request.user.id)) return Response(result, status=status.HTTP_200_OK) except ImproperlyConfigured as e: logger.error(f"Configuration Error: {e}") return Response( {"detail": "Server configuration error."}, status=status.HTTP_500_INTERNAL_SERVER_ERROR ) except requests.RequestException as e: logger.error(f"Cloudflare API Error: {e}") return Response( {"detail": "Failed to generate upload URL."}, status=status.HTTP_502_BAD_GATEWAY ) except Exception as e: logger.exception("Unexpected error generating upload URL") return Response( {"detail": "An unexpected error occurred."}, status=status.HTTP_500_INTERNAL_SERVER_ERROR )