Files
vesti/openspec/changes/archive/2026-09-16-candidates-read-flag/proposal.md
T

2.9 KiB

Why

Список кандидатов — «почтовый клиент»: слева список карточек, справа детали. Сейчас все карточки выглядят одинаково, не видно, какие посты уже смотрели, а какой пост выбран (открыт) — не выделен, кроме цвета текста ссылки.

Пользователь хочет как в почтовых клиентах:

  • непрочитанные посты — жирным шрифтом;
  • прочитанные — обычным (как сейчас);
  • выбранный (открытый) пост — светло-голубая заливка всей карточки.

Плюс: по умолчанию группировка должна быть ПО ДАТЕ (хронология получения), а не по источнику.

What Changes

  • БД: колонка posts.is_read INTEGER DEFAULT 0 (0 = не прочитан, 1 = прочитан).
  • Web:
    • выбор поста (GET /candidates?selected=N или POST /candidates/select) помечает его is_read=1;
    • карточка непрочитанного поста в списке — жирный текст (fw-bold на заголовке/тексте), прочитанного — обычный (как сейчас);
    • карточка выбранного поста — светло-голубая заливка всей карточки (вместо текущего fw-bold text-primary на ссылке);
    • дефолт group_by в GET /candidates и POST /candidates/select — date вместо source (хронологический порядок получения: сегодня → вчера → неделя → раньше).

Why Not

  • Не менять статус при публикации/отклонении: прочитанность — отдельный флаг просмотра, не связан со статусом.
  • Не делать авто-прочтение всех при заходе на страницу: только выбранный пост становится прочитанным (как в почте).
  • Группировка по дате — дефолт, но переключатель (источник/статус) остаётся.

Impact

  • Файлы: db/schema.sql (колонка), web/app.py (миграция при старте + дефолт группировки + прочтение при выборе), web/templates/candidates.html (классы карточек).
  • Данные: ALTER TABLE (новые посты is_read=0 — непрочитанные; старые после миграции тоже 0).
  • Сервис: vesti-web (:8400) — перезапуск.
  • Rollback: убрать колонку/правки и перезапустить.