3.9 KiB
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и перезапустить сервис.