rss-news/backend
Oliver G de1d62c6f7
feat(admin): Freigabe-Seite und Aufraeumen der Status-Altlasten
Die Freigabe ist jetzt der taegliche Arbeitsschritt und bekommt eine
eigene Seite: /admin/freigabe listet alle wartenden Artikel mit Bild,
Score, Tags und dem umgeschriebenen Text lesbar gerendert, dazu die drei
Aktionen Freigeben, Neu schreiben, Verwerfen. Nach jeder Aktion geht es
zurueck in die Liste, damit sich eine Warteschlange am Stueck abarbeiten
laesst.

Der Vorschautext ist Modell-Ausgabe ueber fremde Webseiten und laeuft
deshalb durch einen Tag-Whitelist-Filter statt roh ins Template.

Aufgeraeumt:
- Artikelliste zeigte interne Kuerzel statt Klartext
- Status `review` (Relevanz-Warnzone) wurde als "Rewrite" ausgegeben
- `Rewrite -> Freigegeben` entfernt: zweiter Weg an der Freigabe vorbei
- `Freigegeben -> Veroeffentlicht` entfernt: das macht der WP-Sync
- API-Statusliste wird abgeleitet statt handgepflegt, sie kannte den
  neuen Status nicht und lehnte den Wechsel mit 422 ab

Behoben: list_articles las content_rewritten nicht mit, die neue Seite
haette nie einen Text angezeigt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 16:32:48 +02:00
..
app feat(admin): Freigabe-Seite und Aufraeumen der Status-Altlasten 2026-08-24 16:32:48 +02:00
data chore: finalize current state and prepare next wordpress-focused roadmap 2026-02-18 11:11:49 +01:00
static feat(admin): add feed/source management, rewrite editor, reopen flow, and WP block output 2026-02-21 14:03:49 +01:00
templates feat(admin): Freigabe-Seite und Aufraeumen der Status-Altlasten 2026-08-24 16:32:48 +02:00
tests feat(admin): Freigabe-Seite und Aufraeumen der Status-Altlasten 2026-08-24 16:32:48 +02:00
.env.example feat(pipeline): redaktionelle Freigabe vor der Veroeffentlichung 2026-08-24 10:35:49 +02:00
__init__.py feat: rebuild rss-news backend, admin ui, and legal extraction pipeline 2026-02-18 09:52:36 +01:00
README.md feat: rebuild rss-news backend, admin ui, and legal extraction pipeline 2026-02-18 09:52:36 +01:00
requirements-test.txt feat: rebuild rss-news backend, admin ui, and legal extraction pipeline 2026-02-18 09:52:36 +01:00
requirements.txt feat: rebuild rss-news backend, admin ui, and legal extraction pipeline 2026-02-18 09:52:36 +01:00

Backend Skeleton (FastAPI)

Dieses Verzeichnis enthaelt das technische Grundgeruest fuer den Rebuild von rss-news.

Start (lokal)

python -m venv .venv
source .venv/bin/activate
pip install -r backend/requirements.txt
uvicorn backend.app.main:app --reload --port 8501

Admin UI

  • Login: http://127.0.0.1:8501/admin/login
  • Dashboard: http://127.0.0.1:8501/admin/dashboard

Environment

  • Datei: backend/.env
  • Vorlage: backend/.env.example

Endpoints

  • GET /health - Healthcheck
  • POST /auth/login - Login mit Admin-User
  • POST /auth/logout - Logout
  • GET /auth/me - Aktiver User
  • GET /api/protected - Geschuetzter Test-Endpoint
  • GET /api/pipeline/status - Basisstatus inkl. Datensatzzaehler
  • GET /api/sources - Quellenliste
  • POST /api/sources - Quelle anlegen
  • GET /api/sources/{source_id}/policy-check - Policy-Pruefung fuer Quelle
  • GET /api/feeds - Feedliste
  • POST /api/feeds - Feed anlegen
  • GET /api/feeds/{feed_id}/policy-check - Policy-Pruefung fuer Feed
  • GET /api/runs - Import-/Job-Runs anzeigen
  • GET /api/runs/{run_id} - Detailansicht eines Runs
  • POST /api/runs - Run starten
  • POST /api/runs/{run_id}/finish - Run abschliessen
  • GET /api/articles - Artikel anzeigen
  • GET /api/articles/{article_id} - Artikeldetail
  • POST /api/articles/upsert - Artikel idempotent anlegen/aktualisieren
  • POST /api/articles/{article_id}/transition - Statuswechsel nach Workflow-Regeln
  • POST /api/articles/{article_id}/review - Review-Entscheidung (approve/reject)
  • POST /api/ingestion/run - Feed-Ingestion starten (optional pro Feed)

Datenbank

  • SQLite-Datei unter backend/data/rss_news.db
  • Tabellen werden beim App-Start initialisiert.
  • Tabellen: sources, feeds, runs, articles
  • Dedupe-Strategie Artikel: source_url -> (feed_id, source_article_id) -> source_hash

Policy-Enforcement

  • Ingestion blockiert Feeds automatisch, wenn die zugeordnete Quelle nicht policy-konform ist.
  • Mindestanforderungen: risk_level=green, terms_url, license_name, last_reviewed_at, is_enabled=1.
  • Pro importiertem Artikel wird ein attribution-Block in meta_json gespeichert.

Review-Workflow

  • Statuskette: new -> review -> approved -> published
  • Ablehnung im Review setzt auf rewrite
  • Ungueltige Statuswechsel werden per API blockiert

Verifikation

python -m unittest backend.tests.test_db_repositories
python -m unittest backend.tests.test_ingestion
python -m unittest backend.tests.test_api_auth

CI / Online-Auswertung

  • GitHub Actions Workflow: .github/workflows/test.yml
  • Fuehrt Tests inkl. Coverage auf Push/PR gegen main aus.

Hetzner Smoketest

BASE_URL="https://news.vanityontour.de" \
APP_ADMIN_USERNAME="admin" \
APP_ADMIN_PASSWORD="..." \
bash scripts/smoke_backend.sh

Hinweis

Passwort-Hashing und CSRF/Rate-Limit sind als naechste Ausbaustufe vorgesehen.