import logging import requests from django.core.exceptions import ImproperlyConfigured from rest_framework import status from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from apps.core.utils import capture_and_log from apps.core.utils.cloudflare import get_direct_upload_url 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: capture_and_log(e, 'Generate upload URL - configuration error', source='api') return Response({"detail": "Server configuration error."}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) except requests.RequestException as e: capture_and_log(e, 'Generate upload URL - Cloudflare API error', source='api') return Response({"detail": "Failed to generate upload URL."}, status=status.HTTP_502_BAD_GATEWAY) except Exception as e: capture_and_log(e, 'Generate upload URL - unexpected error', source='api') return Response({"detail": "An unexpected error occurred."}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)