feat(core): add core module with mixins, services, and background jobs

- Add Model Mixins: TimestampMixin, SoftDeleteMixin, AuditMixin, etc.
- Add Base Services: BaseService, BulkOperationsMixin, QueryOptimizerMixin
- Add Base ViewSets with bulk operations
- Add BackgroundJob model for Celery task tracking
- Add BaseAppCommand for management commands
- Add permissions, pagination, filters, cache, logging
- Migrate tests to factory_boy + faker
- Add CHANGELOG.md
- 297 tests passing
This commit is contained in:
2026-01-21 11:47:26 +01:00
parent 06b30fca02
commit f121445313
72 changed files with 9258 additions and 594 deletions

91
CHANGELOG.md Normal file
View File

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