# Changelog Все значимые изменения в проекте документируются в этом файле. Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/). --- ## [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