mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
openspec: архив 14 завершённых change-ов (веб-фиксы, crawler-queue, own-content-hub, publisher-service); спеки влиты в openspec/specs
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
schema: spec-driven
|
||||
created: 2026-09-16
|
||||
skip_specs: true
|
||||
@@ -0,0 +1,55 @@
|
||||
# fix-sources-add-channel
|
||||
|
||||
## Дизайн
|
||||
|
||||
### 1. Форма добавления — поле channel (web/templates/sources.html)
|
||||
|
||||
Вставить после поля `url` (перед `crawler`), чтобы telegram-поля шли вместе:
|
||||
|
||||
```html
|
||||
<div class="col-auto">
|
||||
<label class="form-label mb-0 small">channel (telegram)</label>
|
||||
<input type="text" name="channel" class="form-control form-control-sm"
|
||||
placeholder="@handle или t.me/..." id="add_channel">
|
||||
</div>
|
||||
```
|
||||
|
||||
Поле обязательное только для telegram: маленький inline-скрипт в конце формы
|
||||
переключает атрибут `required` при смене `select[name=crawler]`:
|
||||
|
||||
```html
|
||||
<script>
|
||||
const addCrawler = document.querySelector('form[action="/sources/add"] select[name="crawler"]');
|
||||
const addChannel = document.getElementById('add_channel');
|
||||
function toggleChannelRequired() {
|
||||
addChannel.required = addCrawler.value === 'telegram';
|
||||
}
|
||||
addCrawler.addEventListener('change', toggleChannelRequired);
|
||||
toggleChannelRequired();
|
||||
</script>
|
||||
```
|
||||
|
||||
### 2. Таблица — показ channel у telegram (web/templates/sources.html)
|
||||
|
||||
В колонке crawler (строки 91-93) добавить вывод channel для telegram,
|
||||
по аналогии с feed_url для rss:
|
||||
|
||||
```html
|
||||
<td><span class="badge text-bg-secondary">{{ s['crawler'] }}</span>
|
||||
{% if s['crawler'] == 'rss' and s['feed_url'] %}<br><small class="text-muted">{{ s['feed_url'] }}</small>{% endif %}
|
||||
{% if s['crawler'] == 'telegram' and s['channel'] %}<br><small class="text-muted">{{ s['channel'] }}</small>{% endif %}
|
||||
</td>
|
||||
```
|
||||
|
||||
### 3. Backend — без изменений
|
||||
|
||||
`web/app.py::_form_source` уже собирает `channel` (строка 877),
|
||||
`sources/sources.py::_validate_source` уже проверяет (строка 218),
|
||||
`db_source_to_yaml` уже пишет в yaml (строка 181). Правки только в шаблоне.
|
||||
|
||||
## Проверка
|
||||
|
||||
1. `openspec validate fix-sources-add-channel` — чисто.
|
||||
2. Ручной тест через веб: добавить telegram-источник с channel → success;
|
||||
без channel → браузер подсветит поле, серверная ошибка не нужна.
|
||||
3. Рестарт `vesti-web`, проверить страницу /sources.
|
||||
@@ -0,0 +1,34 @@
|
||||
# fix-sources-add-channel
|
||||
|
||||
Добавление telegram-источника из веб-модерации падало с ошибкой
|
||||
«telegram-источнику нужен channel», хотя пользователь заполнял slug и название.
|
||||
|
||||
## Why
|
||||
|
||||
В форме добавления источника (`web/templates/sources.html`) поле `channel`
|
||||
отсутствовало. `_form_source()` в `web/app.py` читает `channel` из формы,
|
||||
`_validate_source()` в `sources/sources.py:218` требует его для `crawler=telegram`
|
||||
— поэтому любой telegram-источник, добавленный через веб, отклонялся,
|
||||
а rss-источник — нет (feed_url в форме есть).
|
||||
|
||||
## What Changes
|
||||
|
||||
- **web/templates/sources.html (форма добавления)**: добавлено поле `channel`
|
||||
с подсказкой «@handle или t.me/... для telegram»; для `crawler=telegram`
|
||||
становится `required` (маленький inline-скрипт переключает).
|
||||
- **web/templates/sources.html (таблица)**: у telegram-источников под crawler
|
||||
показывается `channel` (аналогично feed_url у rss), чтобы было видно,
|
||||
какой канал привязан.
|
||||
|
||||
## Why Not
|
||||
|
||||
- Не трогаем backend: `_form_source`, `_validate_source`, `add_or_update_source`
|
||||
уже корректно работают с полем `channel` — не хватало только UI.
|
||||
- Не делаем авто-подстановку channel из url — разные форматы
|
||||
(@handle, t.me/name, https://t.me/s/name), подстановка ненадёжна.
|
||||
|
||||
## Impact
|
||||
|
||||
- Telegram-источники снова можно добавлять из веб-модерации.
|
||||
- В таблице виден привязанный канал — легче отлаживать нерабочие источники.
|
||||
- Никаких изменений БД и БД-миграций — только шаблон.
|
||||
@@ -0,0 +1,15 @@
|
||||
# fix-sources-add-channel
|
||||
|
||||
## Problem
|
||||
|
||||
Форма добавления источника не имеет поля `channel`, хотя валидатор
|
||||
(`_validate_source`) требует его для telegram-источников → добавление
|
||||
telegram-источника из веб падает с «telegram-источнику нужен channel».
|
||||
|
||||
## Tasks
|
||||
|
||||
- [x] sources.html (add-форма): поле `channel` после url, required для telegram
|
||||
- [x] sources.html (таблица): показ channel у telegram-источников
|
||||
- [x] openspec validate clean
|
||||
- [x] рестарт vesti-web; ручная проверка /sources (добавление telegram-источника)
|
||||
- [x] STATUS.md актуализирован; commit + push gitverse
|
||||
Reference in New Issue
Block a user