Files
vesti/openspec/changes/selected-list/design.md
T
kpa39l ae8af8de9c feat(candidates): список отобранных между кандидатами и опубликованными
- новый статус selected; в кандидатах только «⭐ Отобрать» (single+bulk)
- /selected — отдельный список: вся обработка (классификация/переписывание/комментарий/публикация)
- классификация только по кнопке (токены на кандидатов не тратятся)
- рядом с оригиналом — поле «✍️ Мой пост» (rewritten_text всегда виден), туда ложится черновик «Переписать»
- все обработчики учитывают src (candidates|selected) для редиректов
2026-09-15 17:37:11 +00:00

3.0 KiB
Raw Blame History

selected-list

Design

БД

  • Статус selected — новое значение posts.status, миграция не нужна (status — TEXT без CHECK).
  • Колонка is_read уже есть. Новых колонок нет.

Маршруты веб (web/app.py)

  • GET /candidates — без изменений (кандидаты = new). Из шаблона убираем approve/comment/reject/reclassify/rewrite кнопки, добавляем «⭐ Отобрать».
  • POST /candidates/select — теперь «отобрать»: UPDATE posts SET status='selected' WHERE id=? AND is_own=0 AND status='new'. Удалить из старого черновика прежний смысл (выбор поста для просмотра) — он больше для «выбора карточки» не нужен (клик по карточке — GET ссылка, выборка кнопкой «Отобрать»).
  • GET /selected — главный новый: список отобранных (status=selected, is_own=0), двухпанельный как /candidates, но с полным функционалом. Копия логики /candidates с параметром status='selected'.
  • POST /selected/select — выбор карточки в отобранных (аналог старого candidates/select, но GET-переход по ссылке, form не нужна).
  • POST /posts/{id}/reject — уже есть, редиректит на /candidates; добавить back с параметром (чтобы из selected вести обратно в selected).
  • impl_approve — уже публикует rewritten_text если он есть; ok.
  • Bulk в selected: action=select (для кандидатов), approve/reject/process/reject-old — там же, где в candidates.

Шаблоны

  • candidates.html — правый блок: только статус/бейджи + «⭐ Отобрать» (single) + bulk. Убрать approve-form/comment/reclassify/rewrite/reject.
  • selected.html — НОВЫЙ (клон candidates.html) с полным функционалом + поле rewritten_text ВСЕГДА рядом с оригиналом + кнопки.
  • base.html — навбар: ссылка «Отобранные» (со счётчиком) между «Кандидаты» и «Опубликовано».

Открытые решения

  • GET /candidates рендерит и левую панель; в кандидатах больше нет «выбора для просмотра» — клик по карточке открывает пост (selected) — оставим клик по ссылке на правосторонний просмотр (тот же механизм ?selected=), но сам статус «отобрать» — отдельной кнопкой.
  • В /selected — «🚫 Отклонить» отобранного → status=rejected, редирект на /selected.