Files

35 lines
2.7 KiB
Markdown
Raw Permalink 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.
# Tasks: sources-admin
## 1. sources.py — CRUD для БД + валидация
- [x] 1.1 `delete_source_db(slug)`: UPDATE posts/runs SET source_id=NULL, DELETE rss_state, DELETE sources.
Проверка: юнит-тест — после delete_source_db строки sources нет, rss_state нет, posts.source_id=NULL.
- [x] 1.2 `set_source_enabled(slug, enabled)`: обновить yaml (upsert с enabled) + sync_yaml_to_db_and_back.
Проверка: юнит — после toggle enabled в БД = 0/1, в yaml = false/true.
- [x] 1.3 `add_or_update_source(data)`: валидация (slug regex, crawler ∈ {telegram,rss}, priority ∈ P0..P3, rss→feed_url обязателен) → upsert yaml → sync.
Проверка: юнит — add 'opennet' (rss) → есть в yaml и БД; невалидный 400.
## 2. Веб-слой
- [x] 2.1 GET /sources — страница (таблица + форма). Шаблон sources.html.
Проверка: GET с auth → 200, в таблице все источники (10).
- [x] 2.2 POST /sources/add, /sources/update/<slug> — добавление/правка. Валидация, flash, редирект.
Проверка: POST add opennet → в БД/yaml появился; POST update — name изменился.
- [x] 2.3 POST /sources/{slug}/toggle — пауза (enabled 0) / снятие (enabled 1).
Проверка: toggle lwn → enabled=0 в БД и yaml; в /crawlers lwn помечен disabled.
- [x] 2.4 POST /sources/{slug}/delete — удаление с confirm. Каскад: posts/runs source_id=NULL, rss_state удалён.
Проверка: delete тестового источника → из yaml и БД исчез, посты не потеряны (source_id NULL).
- [x] 2.5 Навбар: ссылка «Источники» (была добавлена — проверена в base.html).
## 3. Интеграция, доки
- [x] 3.1 AGENT.MD / STATUS.md / TODO.md — /sources (добавлено/закрыто).
- [x] 3.2 Ссылка /sources в nav (проверка вёрстки).
- [x] 3.3 `openspec validate sources-admin` → valid.
- [x] 3.4 Рестарт vesti-web, ручная проверка GET /sources 200.
## Примечания
- sources.yaml — источник истины; каждое изменение пишется в yaml И БД.
- Удалённые посты НЕ удаляются (история), только source_id=NULL.
- Пауза не трогает уже собранные посты — только прекращает сбор (enabled=0).
- HTTP-тест: add→toggle(pause)→toggle(resume)→delete прошёл end-to-end (тест. источник test_tmp_src удалён, чисто).