Files
mostovik-backend/CHANGELOG.md
Aleksandr Meshchriakov c6483d8427 feat(parsers): добавлен парсер zakupki.gov.ru с SOAP API интеграцией
Реализована полная интеграция с ЕИС Закупки через SOAP API
(FTP доступ закрыт с 01.01.2025).

Добавлено:
- ZakupkiClient с поддержкой SOAP методов getDocsByOrgRegionRequest
  и getDocsByReestrNumberRequest
- Модель ProcurementRecord (18 полей, 3 индекса)
- ProcurementService и ParserLoadLogService для бизнес-логики
- Celery задачи parse_procurements и sync_procurements
- Админка с цветовой индикацией статусов и фильтрами
- 71 тест (unit + E2E с RUN_E2E_TESTS=1)

Требования: токен SOAP API через Госуслуги

🤖 Generated with [Qoder][https://qoder.com]
2026-01-27 16:01:28 +01:00

6.4 KiB
Raw Blame History

Changelog

Все значимые изменения в проекте документируются в этом файле.

Формат основан на Keep a Changelog.


[0.3.0] - 2026-01-27

Добавлено

Парсер zakupki.gov.ru (apps.parsers.clients.zakupki)

  • ZakupkiClient — клиент для получения данных о закупках:

    • Интеграция через SOAP API (FTP закрыт с 01.01.2025)
    • Методы: getDocsByOrgRegionRequest, getDocsByReestrNumberRequest
    • Парсинг XML/ZIP архивов с поддержкой множественных кодировок (UTF-8, Windows-1251)
    • Поддержка прокси-серверов
    • Маппинг 80+ регионов РФ
  • Модель ProcurementRecord (models.py):

    • 18 полей: номер закупки, ИНН/КПП/ОГРН заказчика, НМЦ, тип закона (44-ФЗ/223-ФЗ), статус
    • Поля региона, года, месяца для фильтрации
    • load_batch для отслеживания пакетной загрузки
    • 3 индекса для оптимизации запросов
  • Сервисный слой (services.py):

    • ProcurementService — сохранение, поиск, отслеживание загрузок
    • ParserLoadLogService — логирование результатов парсинга
    • Bulk-операции с chunking и обработкой дубликатов
  • Celery задачи (tasks.py):

    • parse_procurements — загрузка по региону/году/месяцу с BackgroundJob tracking
    • sync_procurements — синхронизация помесячно с автопродолжением
  • Админка (admin.py):

    • Цветовая индикация статусов
    • Поиск по номеру закупки, ИНН, ОГРН, названию заказчика
    • Фильтры: тип закона, статус, регион, batch, дата создания
    • Read-only режим

Тестирование

  • 71 тест (66 unit + 5 E2E)
  • ProcurementRecordFactory с Faker("ru_RU")
  • E2E тесты с реальными HTTP-запросами (активация: RUN_E2E_TESTS=1)
  • Покрытие: клиент, сервисы, задачи

Требования для работы

  • Токен SOAP API (получается через Госуслуги на https://zakupki.gov.ru/pmd/auth/welcome)

[0.2.0] - 2026-01-21

Добавлено

Core Module (apps.core)

  • Model Mixins (mixins.py):

    • TimestampMixin — автоматические created_at, updated_at
    • UUIDPrimaryKeyMixin — UUID вместо auto-increment ID
    • SoftDeleteMixin — мягкое удаление с is_deleted, deleted_at
    • AuditMixin — отслеживание created_by, updated_by
    • OrderableMixin — поле order для сортировки
    • StatusMixin — статусы draft/active/inactive/archived
    • SlugMixin — URL-friendly идентификаторы
  • Base Services (services.py):

    • BaseService — базовый CRUD сервис
    • BaseReadOnlyService — только чтение
    • TransactionMixin — управление транзакциями
    • BulkOperationsMixin — массовые операции (bulk_create_chunked, bulk_update_or_create, bulk_delete, bulk_update_fields)
    • QueryOptimizerMixin — декларативная оптимизация запросов (select_related, prefetch_related, only, defer)
    • BackgroundJobService — управление фоновыми задачами
  • Base ViewSets (viewsets.py):

    • BaseViewSet — базовый CRUD ViewSet с пагинацией, фильтрацией, логированием
    • ReadOnlyViewSet — только чтение
    • OwnerViewSet — фильтрация по владельцу
    • BulkMixin — массовые операции через API (bulk_create, bulk_update, bulk_delete)
  • Background Job Tracking (models.py):

    • Модель BackgroundJob для отслеживания Celery задач
    • API endpoints: GET /api/v1/jobs/, GET /api/v1/jobs/{task_id}/
    • Статусы: pending, started, success, failure, revoked, retry
    • Прогресс выполнения и результаты
  • Management Commands (management/commands/base.py):

    • BaseAppCommand — базовый класс для команд
    • Поддержка --dry-run, --silent
    • Прогресс-бар, измерение времени, логирование
  • Прочее:

    • exceptions.py — кастомные исключения API
    • permissions.py — базовые permissions (IsOwner, IsAdminOrReadOnly и др.)
    • pagination.py — CursorPagination
    • filters.py — BaseFilterSet
    • cache.py — декораторы кэширования
    • tasks.py — BaseTask для Celery
    • logging.py — структурированное логирование
    • middleware.py — RequestIDMiddleware
    • signals.py — SignalDispatcher
    • response.py — унифицированные API ответы
    • openapi.py — декоратор для документации

Тестирование

  • Переход на factory_boy + faker (вместо model_bakery + uuid)
  • Фабрики: UserFactory, ProfileFactory
  • 297 тестов

Конфигурация

  • API versioning: /api/v1/
  • Отдельный test.py для настроек тестов
  • Обновлён pyproject.toml
  • Правила разработки в .qoder/rules/main.md

Изменено

  • Структура тестов перенесена в /tests/apps/
  • Удалён conftest.py (pytest не используется)
  • Обновлены URLs с namespace

Удалено

  • ruff.toml (конфигурация перенесена в pyproject.toml)
  • CI_CD_SUMMARY.md
  • custom_test_runner.py

[0.1.0] - 2026-01-20

Добавлено

  • Начальная структура проекта
  • Приложение user с JWT аутентификацией
  • Базовые модели User и Profile
  • Docker конфигурация
  • Pre-commit hooks