From eacb1527c442d76fafd842d643bd061f473ca3a0 Mon Sep 17 00:00:00 2001 From: Aleksandr Meshchriakov Date: Sun, 1 Feb 2026 14:49:18 +0100 Subject: [PATCH] =?UTF-8?q?refactor(fns):=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=B8=D1=82=D1=8C=20=D1=80=D0=BE=D1=83=D1=82?= =?UTF-8?q?=D1=8B=20/api/v1/parsers/fns=20=E2=86=92=20/api/v1/fns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Упростить URL: /api/v1/fns/reports/, /api/v1/fns/upload/ - Добавить swagger теги для группировки в документации --- CHANGELOG.md | 7 ++++--- src/apps/parsers/urls.py | 13 ++++++++----- src/apps/parsers/views.py | 12 ++++++++++++ src/config/api_v1_urls.py | 3 ++- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42cf350..942147a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,9 +35,10 @@ - Перемещение файлов в `processed/` или `failed/` - **API endpoints** (`views.py`, `urls.py`): - - `POST /api/v1/parsers/fns/upload/` — пакетная загрузка файлов - - `GET /api/v1/parsers/fns/reports/` — список отчетов с фильтрацией - - `GET /api/v1/parsers/fns/reports/{id}/` — детали отчета со строками + - `POST /api/v1/fns/upload/` — пакетная загрузка файлов + - `GET /api/v1/fns/reports/` — список отчетов с фильтрацией + - `GET /api/v1/fns/reports/{id}/` — детали отчета со строками + - Swagger теги для группировки в документации - **Админка** (`admin.py`): - `FinancialReportAdmin` с inline для строк diff --git a/src/apps/parsers/urls.py b/src/apps/parsers/urls.py index 341611b..04002d6 100644 --- a/src/apps/parsers/urls.py +++ b/src/apps/parsers/urls.py @@ -4,10 +4,13 @@ from rest_framework.routers import DefaultRouter app_name = "parsers" -router = DefaultRouter() -router.register(r"fns/reports", FinancialReportViewSet, basename="fns-reports") +# FNS router +fns_router = DefaultRouter() +fns_router.register(r"reports", FinancialReportViewSet, basename="fns-reports") -urlpatterns = [ - path("fns/upload/", FNSReportUploadView.as_view(), name="fns-upload"), - path("", include(router.urls)), +fns_urlpatterns = [ + path("upload/", FNSReportUploadView.as_view(), name="fns-upload"), + path("", include(fns_router.urls)), ] + +urlpatterns = [] diff --git a/src/apps/parsers/views.py b/src/apps/parsers/views.py index 9cbec8b..1170911 100644 --- a/src/apps/parsers/views.py +++ b/src/apps/parsers/views.py @@ -13,12 +13,15 @@ from apps.parsers.serializers import ( ) from apps.parsers.tasks import process_fns_file from django.conf import settings +from drf_yasg.utils import swagger_auto_schema from rest_framework import status from rest_framework.parsers import MultiPartParser from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.viewsets import ReadOnlyModelViewSet +FNS_TAG = "ФНС - Бухгалтерская отчетность" + class FinancialReportViewSet(ReadOnlyModelViewSet): """ @@ -40,6 +43,14 @@ class FinancialReportViewSet(ReadOnlyModelViewSet): return FinancialReportDetailSerializer return FinancialReportSerializer + @swagger_auto_schema(tags=[FNS_TAG]) + def list(self, request, *args, **kwargs): + return super().list(request, *args, **kwargs) + + @swagger_auto_schema(tags=[FNS_TAG]) + def retrieve(self, request, *args, **kwargs): + return super().retrieve(request, *args, **kwargs) + class FNSReportUploadView(APIView): """ @@ -63,6 +74,7 @@ class FNSReportUploadView(APIView): parser_classes = [MultiPartParser] + @swagger_auto_schema(tags=[FNS_TAG], request_body=FNSFileUploadSerializer) def post(self, request): serializer = FNSFileUploadSerializer(data=request.data) serializer.is_valid(raise_exception=True) diff --git a/src/config/api_v1_urls.py b/src/config/api_v1_urls.py index cdf8730..2c325c3 100644 --- a/src/config/api_v1_urls.py +++ b/src/config/api_v1_urls.py @@ -5,6 +5,7 @@ All API endpoints are versioned under /api/v1/ """ from apps.core.views import BackgroundJobListView, BackgroundJobStatusView +from apps.parsers.urls import fns_urlpatterns from django.urls import include, path app_name = "api_v1" @@ -16,6 +17,6 @@ jobs_urlpatterns = [ urlpatterns = [ path("users/", include("apps.user.urls")), - path("parsers/", include("apps.parsers.urls")), + path("fns/", include((fns_urlpatterns, "fns"))), path("jobs/", include((jobs_urlpatterns, "jobs"))), ]