mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
fc6d725bd1
- БД: posts.comment TEXT, posts.rewritten_text TEXT (ALTER TABLE, миграция применена)
- GET /candidates: двухпанельный рендер — слева список с группировкой
(source/date/status, свертываемые <details>) + чекбоксы bulk,
справа детали поста (действия, комментарий, пересказ, оригинал с медиа)
- Роуты: POST /candidates/select, /candidates/bulk (approve/reject/reject-old),
/posts/{id}/comment, /posts/{id}/reclassify (qwen), /posts/{id}/rewrite (qwen)
- approve вынесен в impl_approve (переиспользуется bulk-approve: publisher + бандл)
- без JS (только формы); HTML: Jinja2 + Bootstrap 5.3
- Протестировано TestClient: группировка, bulk-reject, comment, reclassify
(реальный qwen), rewrite (реальный qwen), поиск, media, published — зелёные
- openspec: change candidates-mail-ui архивирован (2026-09-13-candidates-mail-ui),
spec влита в openspec/specs/candidates-mail-ui; validate — чисто
- docs: STATUS.md, WALKTHROUGH.md обновлены
3.8 KiB
3.8 KiB
Why
Пользователю неудобно работать с карточками кандидатов в текущем виде. Сейчас:
- Страница кандидатов — это лента карточек (каждая с апрув-кнопкой), нет списка слева, нет меню действий справа, нет группировки, нет bulk-операций.
- Пользователь описал целевой интерфейс: «схожий с почтовыми клиентами» — общий список сообщений в левой панели, конкретное сообщение справа.
- Отклонять/одобрять по группам (например, «все старые посты отклонить») сейчас нельзя: только по одному.
What Changes
Страница кандидатов candidates перерабатывается в двухпанельный интерфейс:
- Левая панель — список кандидатов (сообщений):
- элемент списка: аватар/иконка источника, заголовок (направление + краткий текст), мета (источник, дата поступления, views/reactions, статус).
- активный/выбранный элемент подсвечивается.
- группировка (сворачиваемые группы): по источнику, по дате поступления, по статусу (новые / одобренные / отклонённые).
- выбор нескольких элементов (чекбоксы) + bulk-действия над группой: «отклонить все выбранные», «одобрить все выбранные».
- Правая панель — детальный просмотр выбранного кандидата:
- меню действий: Опубликовать (approve), Отклонить (reject), Переклассифицировать, Переписать новость под себя (LLM-пересказ, ввод текста).
- блок «Мой комментарий» (textarea, сохраняется).
- оригинальный пост со всеми медиа (текст, картинки/видео, ссылки, мета источника).
- Хранение комментария — новое поле/таблица (comment в posts или отдельная post_comments), связь с пользователем.
- Статусы: у поста уже есть status (new/rejected/published?) — использовать его для группировки; добавить, если нет.
Why Not
- Не делаем drag&drop, не делаем виртуальную бесконечную прокрутку — достаточно пейджинга/группировки (минимум JS, стабильно).
- Не меняем существующие роуты approve/reject — только дополняем новыми (bulk, переклассификация, коммент).
Open Questions
- Комментарий: отдельная таблица или поле в posts? (предлагаю поле posts.comment TEXT)
- Переписывание: LLM (qwen) генерирует черновик, пользователь редактирует и публикует?
- «Переклассифицировать» — повторный запуск классификатора на посте?
- Группировка: одновременно несколько группировок или одна выбранная?