Files

3.9 KiB
Raw Permalink Blame History

Why

При переключении группировки списка кандидатов на «дата» (/candidates?group_by=date) статусные бейджи групп и правая панель вводят в заблуждение: часть групп (например, «Ранее на этой неделе», 52 поста) не получает бейджа статуса, а выбранный пост в правой панели может выглядеть как уже «опубликованный» (кнопка «Опубликовать» скрыта), хотя это — обычный кандидат.

Причина: в _fetch_candidates статус группы вычисляется как items[0]["status"] — статус ПЕРВОГО (свежайшего) поста в группе. При группировке по дате первым в группе оказывается самый свежий пост, который может быть уже опубликованным или отклонённым, хотя вся остальная группа — новые кандидаты. Шаблон candidates.html рисует бейдж только для new/rejected, поэтому группа с первым published-постом выглядит «без статуса» (как опубликованная), а у selected-published поста скрыта кнопка «Опубликовать».

Наблюдаемый симптом пользователя: «при переключении на сортировку по дате все кандидаты становятся отмеченными опубликовано и источник „Дед в АйТи“».

What Changes

  • В web/app.py (_fetch_candidates): статус группы считать не по первому посту, а как ДОМИНИРУЮЩИЙ статус внутри группы:
    • если в группе есть new → статус группы new;
    • иначе если есть rejected → rejected;
    • иначе если есть published → published;
    • иначе — статус первого поста (запасной вариант).
  • Шаблон candidates.html остаётся без изменений (для published бейдж не рисуется — это корректно: опубликованные не показываются в кандидатах как активные). Исправление логики устраняет и ложный «published»-вид группы, и неправильный вид правой панели для не-публикованных постов.
  • При group_by=date группа «Ранее на этой неделе» с 52 постами (51 new + 1 published) теперь получит бейдж «новые».

Why Not

  • Не менять сортировку постов внутри группы на статус: это сломает ожидание «свежие сверху» для группировки по дате.
  • Не прятать published-посты из date-группировки полностью: пользователь должен видеть, что именно опубликовано в этот период.
  • Минимальная правка в одном месте (_fetch_candidates) — не трогаем шаблон и не меняем схему БД.

Impact

  • Файл: web/app.py, функция _fetch_candidates, блок вычисления "status" группы.
  • Данные: без миграций БД.
  • Сервис: vesti-web (:8400) — требуется перезапуск.
  • Rollback: откатить правку в _fetch_candidates и перезапустить сервис.