from django.http import HttpResponse from rest_framework import status from rest_framework.views import APIView from apps.reports.serializers import ReportGenerateSerializer from apps.reports.services.excel import build_report_workbook from apps.reports.services.orchestrator import ReportOrchestrator class GenerateReportView(APIView): authentication_classes = [] permission_classes = [] def post(self, request): serializer = ReportGenerateSerializer(data=request.data) serializer.is_valid(raise_exception=True) orchestrator = ReportOrchestrator() report_data = orchestrator.generate(serializer.validated_data) workbook = build_report_workbook( title=report_data["title"], columns=report_data["columns"], rows=report_data["rows"], ) response = HttpResponse( workbook, content_type=( "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ), status=status.HTTP_200_OK, ) response["Content-Disposition"] = ( f'attachment; filename="{report_data["filename"]}"' ) return response