Skip to content

PROD: добавить статистику участников - #757

Merged
TThanos3000 merged 1 commit into
masterfrom
release/prod-member-statistics
Sep 27, 2026
Merged

TThanos3000 merged 1 commit into
masterfrom
release/prod-member-statistics

Conversation

@TThanos3000

Copy link
Copy Markdown
Collaborator

Добавлен публичный GET /auth/public-users/stats/: четыре глобальных агрегата каталога участников. Пустой каталог возвращает нули; параметры поиска, фильтров и пагинации не влияют на результат.

Ограничение проверки: полный PostgreSQL suite остаётся не зелёным из-за WebSocket timeout в неизменённом тесте чатов. Подробности и сравнение с base приведены ниже.

Основа и объём переноса

  • Base master: 1b2087787a1554733768a1984da12b0070c1ee05.
  • Head: 49b894ba2247b971e3b3757a32115b74ed321b5c.
  • Источник: DEV #756, merge 11f1e66a85e266d57fc6b0f8c080ee8cd0683f19.
  • Селективный перенос: сериализатор, сервис агрегатов, GET view, URL и тесты. Merge DEV → master и cherry-pick merge-коммита не выполнялись.
  • Изменены пять Python-файлов и русскоязычный отчёт. Миграций, изменений зависимостей или workflows нет. DEV и React не изменены, React domain не используется.

Контракт и определения

{
  "total": 1248,
  "in_projects": 684,
  "in_programs": 214,
  "new_last_30_days": 63
}

Все показатели считают только активных legacy CustomUser с user_type=MEMBER:

Поле Определение
total Все активные MEMBER
in_projects Уникальные люди, являющиеся Project.leader или Collaborator.user проекта с draft=false и is_public=true
in_programs Уникальные люди с PartnerProgramUserProfile для программы с draft=false
new_last_30_days datetime_created >= timezone.now() - 30 days, граница включительна

Роли и несколько связей не удваивают человека. AllowAny сохранён из DEV #756; POST возвращает 405. Ответ содержит только четыре целых числа — без ID, email, phone, birthday, данных проектов и программ.

Производительность

Exists/Count выполняют один агрегирующий SQL-запрос без обхода пользователей в Python и без N+1. Через полный анонимный HTTP GET проверено:

Активных MEMBER SQL queries
10 1
100 1
1000 1

Отдельный тест подтверждает один запрос при множественных связях с проектами и программами.

Проверки

Python 3.11.15, PostgreSQL 18.1, изолированная тестовая БД; SQLite не использовался.

  • Targeted PostgreSQL: 14/14 — empty, active/roles, leader/collaborator, дедупликация, draft/private, programs, включительная 30-day boundary, только четыре числа, независимость от фильтров, constant query count.
  • Production surface (NEXTGEN_SURFACE_ENABLED=False): 30 тестов, OK, 2 ожидаемых skip — статистика, quarantine и уведомления.
  • Full PostgreSQL: 1596 тестов: 1592 прошли, 1 TimeoutError, 3 skip; full suite не зелёный.
  • Django check: пройден, 0 ошибок.
  • Migration check: пройден, изменений нет.
  • Black пяти изменённых Python-файлов: пройден.
  • Flake8 всех отслеживаемых Python-файлов и двух новых модулей: пройден.
  • git diff --check: пройден.

Полный suite не зелёный: в последнем запуске TimeoutError возник в неизменённом chats.tests.test_direct.DirectTests.test_edit_other_message_in_other_chat при ожидании WebSocket-ответа. Первый полный запуск завершился двумя такими таймаутами в chats.tests.test_project.DirectTests.test_delete_message_in_other_project_other_message и test_edit_message_in_my_project_my_message, а удалению тестовой БД помешали оставшиеся соединения. Повтор выполнялся со штатным для CI --keepdb.

Все три упавших теста затем прошли отдельно 3/3 на exact master и 3/3 на head; код chats/ совпадает с base. Это указывает на нестабильность полного локального прогона, но не заменяет его зелёный результат. Все тесты статистики прошли в обоих full runs. Изменения чатов и таймаутов в перенос не включены.

Согласованный интерфейс и скриншоты

Angular draft #382 селективно переносит DEV #381. Desktop sidebar 157 px, карточка 157 × 280 px, max-width:157px, min-width:0, box-sizing:border-box. На compact/mobile тот же компонент занимает ширину списка и показывает метрики 2×2 после controls, перед участниками. X-позиция и ширина сетки до/после совпадают; overflow 0 на 1440/1280/1024/768/414/390/375 px.

Desktop · Mobile · Все 20 скриншотов и измерения.

Draft для самостоятельного review и merge. Merge и deploy не выполнялись.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 27, 2026 20:38
@TThanos3000
TThanos3000 merged commit 2fbc722 into master Sep 27, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants