lizerk 91342d199d feat: миграция на ChatMembership.is_active, удаление дублирования participants
АРХИТЕКТУРНЫЙ РЕФАКТОРИНГ:
✅ Убрано дублирование логики Chat.participants vs ChatMembership.is_active
✅ Теперь единственный источник истины - ChatMembership.is_active
✅ Исправлен баг с изменением ролей (роли не отображались после изменения)

ИЗМЕНЕНИЯ:

Backend (viewsets.py):
- get_queryset: мигрировано на memberships__is_active=True
- create: убрано participants.add, только memberships
- leave/remove_member: только is_active=False + left_at
- add_member: восстанавливает is_active=True если был False
- change_role: явно устанавливает is_active=True + left_at=None

Backend (serializers.py):
- Убрано поле participants из ChatDetailSerializer
- get_participant_details: через memberships.filter(is_active=True)
- get_participant_names: через memberships

Backend (models.py):
- get_participants(): только через ChatMembership.is_active=True
- __str__(): получаем участников через memberships
- participants помечен как устаревший (в комментариях)

Backend (rules.py):
- is_member_of_chat: только ChatMembership.is_active=True
- has_send_messages_permission: убран fallback на participants

Миграции:
- Создана 0038: убирает 'owner' из choices, очищает help_text
- Исправлены зависимости в requests_app/documents/feed 0010/0014/0006
  (заменили __latest__ на конкретную версию 0037)
- Создан management command migrate_participants_to_memberships
  (перенос данных participants → memberships)

Frontend:
- Добавлено оптимистичное обновление UI при изменении ролей
- Детальное логирование для диагностики

Тесты:
- test_change_role_improved.py: проверка изменения ролей с задержкой
- Обновлен test_chat_roles.py

Удаление устаревшей документации:
- Удалены старые отчеты из docs/ (73 файла)
- Сохранены актуальные руководства

ИСПРАВЛЕННЫЙ БАГ:
До: При изменении роли is_active оставался False → membership не попадал в filter(is_active=True) → исчезал с фронтенда
После: Явно устанавливаем is_active=True при любом действии с членством
2026-03-12 15:58:49 +03:00
..

Backend Documentation

Техническая документация по backend части проекта EUSRR.

📁 Структура

guides/

Руководства разработчика - инструкции по работе с различными модулями

  • CONTEXT_MENU_GUIDE.md - работа с контекстными меню
  • REACTIONS_GUIDE.md - система реакций

troubleshooting/

Отладка и исправления - диагностика проблем

  • CONTEXT_MENU_DEBUG.md - отладка контекстного меню
  • MESSAGE_DELETE_DEBUG.md - отладка удаления сообщений
  • MESSAGE_DELETE_FIX.md - исправление проблем удаления

architecture/

Архитектурная документация - устройство систем

  • API_ANALYSIS.md - анализ API
  • API_REFACTORING_SUMMARY.md - результаты рефакторинга API
  • VIEWSET_ANALYSIS.md - анализ ViewSet

testing/

Тестирование - планы и результаты тестирования

  • POSITION_PERMISSIONS_TESTING.md - тестирование прав должностей
  • REQUESTS_API_TESTING_PLAN.md - план тестирования API заявок
  • TEST_IMAGE_SCRIPTS.md - скрипты тестирования изображений

reports/

Отчеты и аудиты - результаты проверок и реорганизаций

  • BACKEND_CLEANUP_AUDIT.md - аудит очистки backend/
  • REQUESTS_API_TESTING_PLAN.md - план тестирования API заявок
  • TEST_IMAGE_SCRIPTS.md - скрипты тестирования изображений

🔍 Навигация

По типу задачи:

Связанная документация:

  • /docs/ - общая документация проекта
  • backend/scripts/ - вспомогательные скрипты

📝 Правила

Добавление новой документации:

  1. Guides - постоянные инструкции, reference материалы
  2. Troubleshooting - временные документы, после решения → удалить
  3. Architecture - долгосрочная документация, обновлять при изменениях
  4. Testing - планы тестирования, после завершения → архивировать

Формат файлов:

# Заголовок

**Дата:** DD.MM.YYYY  
**Автор:** Имя  
**Статус:** Актуально / Устарело / В процессе

## Описание
...

## Использование
...

## Примеры
...

🔄 Жизненный цикл

  1. Создание - документируйте новую фичу/проблему
  2. Актуализация - обновляйте при изменениях
  3. Архивация - после завершения/решения
  4. Удаление - если больше не актуально

Поддерживайте документацию актуальной! 📚