feat(forms): unify F2-F6 upload contracts and add shared serializers

This commit is contained in:
2026-04-14 10:56:29 +02:00
parent ec913888a4
commit 903312670c
13 changed files with 606 additions and 262 deletions

View File

@@ -8,6 +8,11 @@ API формы Ф-2.
import logging
from apps.core.upload_contracts import (
build_upload_error_response,
build_upload_success_payload,
build_upload_validation_response,
)
from apps.core.viewsets import ReadOnlyViewSet
from apps.form_2.models import FormF2Record
from apps.form_2.serializers import (
@@ -42,7 +47,9 @@ class FormF2UploadView(APIView):
def post(self, request):
"""Загрузка и обработка файла."""
serializer = FormF2UploadSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
if not serializer.is_valid():
return build_upload_validation_response(serializer.errors)
file = serializer.validated_data["file"]
report_year = serializer.validated_data["report_year"]
@@ -59,11 +66,13 @@ class FormF2UploadView(APIView):
)
return Response(
{
"success": True,
"message": "Файл поставлен в очередь на обработку",
"task_id": task.id,
},
build_upload_success_payload(
form="f2",
report_year=report_year,
report_quarter=report_quarter,
status="queued",
job_id=task.id,
),
status=status.HTTP_202_ACCEPTED,
)
@@ -77,20 +86,21 @@ class FormF2UploadView(APIView):
result_serializer = FormF2ParseResultSerializer(result)
return Response(
{
"success": True,
"data": result_serializer.data,
},
build_upload_success_payload(
form="f2",
report_year=report_year,
report_quarter=report_quarter,
status="done",
result=result_serializer.data,
),
status=status.HTTP_200_OK,
)
except Exception as e:
logger.exception("Ошибка обработки файла Ф-2")
return Response(
{
"success": False,
"error": str(e),
},
status=status.HTTP_400_BAD_REQUEST,
return build_upload_error_response(
error_code="processing_error",
error_message=str(e),
status_code=status.HTTP_400_BAD_REQUEST,
)