mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
52 lines
2.4 KiB
Markdown
52 lines
2.4 KiB
Markdown
# Design: rewrite-as-author
|
||
|
||
## 1. candidates.html (блок пересказа)
|
||
|
||
```diff
|
||
{% if selected.rewritten_text %}
|
||
<div class="mt-2">
|
||
- <label ...>✍️ Черновик пересказа (редактируйте и копируйте):</label>
|
||
- <textarea class="form-control form-control-sm" rows="4" readonly>{{ selected.rewritten_text }}</textarea>
|
||
+ <label ...>✍️ Пересказ (редактируйте и сохраните — он пойдёт в канал от вашего имени):</label>
|
||
+ <form method="post" action="/posts/{{ selected.id }}/rewrite-save" class="row g-1">
|
||
+ {{ hid }}
|
||
+ <textarea class="form-control form-control-sm" name="rewritten_text" rows="5">{{ selected.rewritten_text }}</textarea>
|
||
+ <div class="col-auto mt-1"><button class="btn btn-sm btn-outline-primary" type="submit">💾 Сохранить пересказ</button></div>
|
||
+ </form>
|
||
</div>
|
||
{% endif %}
|
||
```
|
||
|
||
## 2. app.py — новый эндпоинт
|
||
|
||
```python
|
||
@app.post("/posts/{post_id}/rewrite-save")
|
||
async def post_rewrite_save(post_id, request, group_by="", direction="", own="", q=""):
|
||
_require_auth(request)
|
||
conn = _db()
|
||
p = conn.execute("SELECT id FROM posts WHERE id=?", (post_id,)).fetchone()
|
||
if not p: return RedirectResponse(..., status_code=302)
|
||
form = await request.form()
|
||
draft = str(form.get("rewritten_text") or "").strip()
|
||
conn.execute("UPDATE posts SET rewritten_text=? WHERE id=?", (draft or None, post_id))
|
||
conn.commit(); conn.close()
|
||
return RedirectResponse(..., status_code=302)
|
||
```
|
||
|
||
## 3. card.py — тело и подпись
|
||
|
||
```python
|
||
body = (post.get("rewritten_text") or post.get("text") or "").strip()
|
||
rewritten = bool((post.get("rewritten_text") or "").strip())
|
||
...
|
||
if rewritten:
|
||
tail = "✍️ Дед в АйТи (@dedinit)" + (f" · Источник: {orig}" if orig else "")
|
||
elif is_own: ... # как было
|
||
elif orig: tail = f"🔗 Оригинал: {orig}"
|
||
```
|
||
|
||
## Верификация
|
||
|
||
- `py_compile web/app.py publisher/card.py`
|
||
- Реальный кандидат с rewritten_text (id=4): GET /candidates?selected=4 → textarea без readonly, есть «Сохранить пересказ».
|
||
- `make_card` (read-only БД) с постом id=4 → текст начинается с пересказа, содержит «Дед в АйТи», не содержит «🔗 Оригинал»; media сохраняется (если есть). |