feat: Add comprehensive Django user app with tests using model-bakery
- Implemented user authentication with JWT tokens - Added user and profile models with OneToOne relationship - Created service layer for business logic separation - Implemented DRF serializers and views - Added comprehensive test suite with model-bakery factories - Fixed ipdb/pdbpp dependency conflicts with custom test runner - Configured development and production environments - Added deployment configurations for Apache, systemd, and Docker
This commit is contained in:
268
.qoder/rules/main.md
Normal file
268
.qoder/rules/main.md
Normal file
@@ -0,0 +1,268 @@
|
||||
---
|
||||
trigger: always_on
|
||||
---
|
||||
---
|
||||
trigger: always_on
|
||||
---
|
||||
|
||||
## 0) Язык и стиль общения (СТРОГО)
|
||||
- ИИ-агент **ВСЕГДА отвечает на русском языке**
|
||||
- Английский допускается ТОЛЬКО для:
|
||||
- имён библиотек
|
||||
- имён классов, функций, переменных
|
||||
- CLI-команд
|
||||
- Тон: инженерный, практичный, без воды и маркетинга
|
||||
|
||||
---
|
||||
|
||||
## 1) Базовые принципы (НЕ ОБСУЖДАЮТСЯ)
|
||||
Проект разрабатывается строго по принципам:
|
||||
|
||||
- **SOLID**
|
||||
- **KISS**
|
||||
- **DRY**
|
||||
|
||||
Правила приоритета:
|
||||
- красиво vs просто → **простота**
|
||||
- умно vs поддерживаемо → **поддерживаемость**
|
||||
- магия vs явность → **явность**
|
||||
|
||||
---
|
||||
|
||||
## 2) Контекст проекта
|
||||
- ОС: **Astra Linux 1.8**
|
||||
- Python: **3.11.2**
|
||||
- Django: **3.x (указано 3.14)**
|
||||
- Django REST Framework (DRF)
|
||||
- Celery
|
||||
- PostgreSQL **15.10**
|
||||
- Apache **2.4.57**
|
||||
- mod_wsgi **4.9.4**
|
||||
|
||||
### Инструменты разработки
|
||||
- **uv**
|
||||
- **виртуальная среда**
|
||||
- **pre-commit**
|
||||
- **Gitea Actions (CI)**
|
||||
- Тесты: `django test`
|
||||
- Линтинг: `ruff`
|
||||
- **ЗАПРЕЩЕНО** создавать тестовые скрипты для демонстрации, все должно быть исправлено в рамках проекта
|
||||
|
||||
---
|
||||
|
||||
## 3) Окружение и команды (СТРОГО)
|
||||
Все команды:
|
||||
- выполняются **только внутри виртуальной среды**
|
||||
- используют **uv**
|
||||
- считаются выполняемыми из корня проекта
|
||||
|
||||
### ❌ Запрещено
|
||||
- `pip`, `python -m pip`
|
||||
- `poetry`, `pipenv`, `pipx`
|
||||
- системные команды вне venv
|
||||
|
||||
### ✅ Разрешено
|
||||
- `uv venv`
|
||||
- `source .venv/bin/activate`
|
||||
- `uv add / uv remove / uv sync`
|
||||
- `uv run <command>`
|
||||
|
||||
Пример:
|
||||
```bash
|
||||
uv run python manage.py test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4) Архитектура и слои ответственности (КРИТИЧНО)
|
||||
|
||||
### 4.1 View (DRF)
|
||||
View отвечает ТОЛЬКО за:
|
||||
- приём HTTP-запроса
|
||||
- проверку прав доступа
|
||||
- работу с serializer
|
||||
- вызов сервисного слоя
|
||||
|
||||
❌ Запрещено:
|
||||
- бизнес-логика
|
||||
- сложные условия
|
||||
- транзакции
|
||||
- сложная работа с ORM
|
||||
|
||||
---
|
||||
|
||||
### 4.2 Serializer
|
||||
Serializer отвечает за:
|
||||
- валидацию данных
|
||||
- преобразование вход/выход
|
||||
|
||||
Допускается:
|
||||
- field-level validation
|
||||
- object-level validation
|
||||
|
||||
❌ Запрещено:
|
||||
- бизнес-правила
|
||||
- side-effects
|
||||
- сложная логика в `save()`
|
||||
|
||||
---
|
||||
|
||||
### 4.3 Сервисный слой (Business Logic)
|
||||
- **ВСЯ бизнес-логика живёт здесь**
|
||||
- Сервисы:
|
||||
- не зависят от HTTP
|
||||
- легко тестируются
|
||||
- управляют транзакциями
|
||||
- Сервис определяет *что* делать, а не *как* отдать ответ
|
||||
|
||||
Рекомендуемый паттерн:
|
||||
```python
|
||||
class EntityService:
|
||||
@classmethod
|
||||
def do_something(cls, *, data):
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4.4 Модели (ORM)
|
||||
Модели должны быть:
|
||||
- простыми
|
||||
- декларативными
|
||||
|
||||
Допускается:
|
||||
- `__str__`
|
||||
- простые computed properties
|
||||
- минимальные helper-методы
|
||||
|
||||
❌ Запрещено:
|
||||
- бизнес-логика
|
||||
- workflow
|
||||
- сигналы как логика
|
||||
- условия, зависящие от сценариев
|
||||
|
||||
👉 **Любые исключения — ТОЛЬКО после обсуждения в чате.**
|
||||
|
||||
---
|
||||
|
||||
## 5) Celery
|
||||
- Task = **thin wrapper**
|
||||
- Task вызывает сервис, а не содержит логику
|
||||
- Таски:
|
||||
- идемпотентны
|
||||
- логируют начало и завершение
|
||||
- Ретраи:
|
||||
- только для временных ошибок
|
||||
- с backoff
|
||||
|
||||
---
|
||||
|
||||
## 6) База данных и миграции
|
||||
- Любое изменение моделей → миграции обязательны
|
||||
- Миграции:
|
||||
- детерминированные
|
||||
- без ручной магии без причины
|
||||
|
||||
Проверка перед коммитом:
|
||||
```bash
|
||||
uv run python manage.py makemigrations --check --dry-run
|
||||
```
|
||||
|
||||
PostgreSQL:
|
||||
- транзакции использовать осознанно
|
||||
- `select_for_update()` при гонках
|
||||
- Raw SQL — только с объяснением
|
||||
|
||||
---
|
||||
|
||||
## 7) Тестирование
|
||||
- Любая бизнес-логика → тесты
|
||||
- В первую очередь тестируется сервисный слой
|
||||
- API — happy path + edge cases
|
||||
|
||||
Запуск:
|
||||
```bash
|
||||
uv run python manage.py test
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8) pre-commit (обязателен)
|
||||
- Любой код обязан проходить pre-commit
|
||||
- Агент обязан учитывать проверки форматирования и линтинга
|
||||
|
||||
```bash
|
||||
pre-commit run --all-files
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9) CI (Gitea Actions)
|
||||
- Используется **Gitea Actions**
|
||||
- ❌ GitHub Actions запрещены
|
||||
- Любые изменения:
|
||||
- не должны ломать CI
|
||||
- Если меняются:
|
||||
- зависимости
|
||||
- команды тестов
|
||||
- миграции
|
||||
→ агент обязан указать необходимость правок workflow
|
||||
|
||||
---
|
||||
|
||||
## 10) Apache + mod_wsgi
|
||||
- Используется **ТОЛЬКО WSGI**
|
||||
- ASGI запрещён без отдельного обсуждения
|
||||
- Любые изменения в `wsgi.py`, путях, статике:
|
||||
- сопровождаются пояснением
|
||||
- требуют перезапуска Apache
|
||||
|
||||
```bash
|
||||
systemctl restart apache2
|
||||
```
|
||||
|
||||
Учитывать ограничения и права Astra Linux.
|
||||
|
||||
---
|
||||
|
||||
## 11) Работа с репозиторием
|
||||
- Минимальный diff — приоритет
|
||||
- ❌ Не коммитить:
|
||||
- `.venv`
|
||||
- артефакты
|
||||
- дампы БД
|
||||
- Массовый рефакторинг — только по явному запросу
|
||||
|
||||
---
|
||||
|
||||
## 12) Anti-patterns (ЗАПРЕЩЕНО)
|
||||
- Fat Models
|
||||
- God Views
|
||||
- Бизнес-логика в Serializers
|
||||
- Сигналы как workflow
|
||||
- Магия в `save()`
|
||||
- Прямые импорты моделей между apps
|
||||
- Сложная логика в queryset как бизнес-правило
|
||||
|
||||
---
|
||||
|
||||
## 13) Формат ответа ИИ-агента (ОБЯЗАТЕЛЬНЫЙ)
|
||||
Каждый ответ должен содержать:
|
||||
|
||||
1. **Что меняем**
|
||||
2. **Файлы / патч**
|
||||
3. **Команды (через uv)**
|
||||
4. **Проверки (tests / pre-commit / CI)**
|
||||
5. **Риски / замечания**
|
||||
|
||||
---
|
||||
|
||||
## 14) Исключения
|
||||
- ИИ-агент **НЕ внедряет исключения сам**
|
||||
- Агент:
|
||||
- описывает стандартное решение
|
||||
- объясняет, почему оно не подходит
|
||||
- запрашивает разрешение в чате
|
||||
|
||||
## 15) Структура проекта
|
||||
-
|
||||
Reference in New Issue
Block a user