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

31 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.