Files
BSN-Livesystem/docs/alicia-aufgaben-phase3.md
T
2026-06-22 18:21:55 +02:00

3.5 KiB
Raw Blame History

Alicia — Aufgaben 2125: Integration & Pipeline

Repo: git@git.datenhimmel.work:danielkrause/BSN-Livesystem.git Branch: main Qualität: ruff check . && ruff format . && mypy --config-file pyproject.toml . && pytest -v vor JEDEM Commit Fehler? Korrigieren, erneut prüfen. Nicht aufgeben.


Aufgabe 21 — WhatsApp-Webhook Queue-Integration

Datei: src/routes/whatsapp.py

# Aktuell ist nur ein Platzhalter:
#   # Hier würde die Submission in die Queue eingereiht werden
#   return jsonify({"status": "accepted"}), 200
#
# → Muss wie Telegram-Webhook funktionieren:
#   1. WhatsApp-Payload parsen (entry[0].changes[0].value.messages[0])
#   2. Submission bauen (message_id, plattform="whatsapp", absender, text)
#   3. current_app.queue_handler.enqueue(submission)

Test-Datei: tests/routes/test_whatsapp_queue.py

3 Tests: Enqueue, Invalid Body→400, Missing Text→400

Commit: feat: WhatsApp-Webhook reiht Submissions in Queue ein


Aufgabe 22 — Intake-Kommando-Engine ausbauen

Datei: src/services/intake.py

# erkenne_kommando() erweitern:
#   "suche/finde <spiel>" → SPIEL_SUCHEN
#   "bewerte <spiel> mit <note>" → SPIEL_BEWERTEN
#   "neuheiten", "/neu" → SPIEL_NEUHEITEN
#   "hilfe", "/help", "/start" → HILFE
#   sonst → UNBEKANNT

# NEU: extrahiere_spielname(text) → str | None
# NEU: extrahiere_bewertung(text) → int | None (110)

Test-Datei: tests/services/test_intake_extended.py

6 Tests: Kommando-Varianten, Spielname-Extraktion, Bewertungsextraktion

Commit: feat: Intake-Engine mit Regex-Patterns und Spielnamen-Extraktion


Aufgabe 23 — Worker mit Intake-Pipeline verbinden

Datei: src/queue/worker.py

# verarbeite_submission() ersetzen:
#   1. erkenne_kommando(submission.text)
#   2. Je nach Kommando: Spielname/Bewertung extrahieren
#   3. Game-Service aufrufen (game_service.suche_spiel / bewerte_spiel)
#   4. Ergebnis in submission.ergebnis speichern
#   5. Status auf "erledigt" oder bei Fehler "fehler"

# Submission-Modell: +ergebnis: dict | None

Test-Datei: tests/queue/test_worker_pipeline.py

4 Tests: Suche, Hilfe, Unbekannt, Fehlerfall

Commit: feat: Worker durchläuft Intake-Pipeline mit Kommando-Erkennung


Aufgabe 24 — Admin-Stats mit echten Daten

Datei: src/routes/admin.py

# queue_status(): +processed_total, +processed_errors, +oldest_pending
# stats(): +echte uptime (startzeit in app.config), +version, +error_rate

Datei: src/queue/handler.py

# +processed_total Property
# +processed_errors Property
# +oldest_pending() → datetime | None

Datei: src/config.py

# VERSION: str = "0.2.0"  # In Settings-Klasse

Test-Datei: tests/routes/test_admin_stats.py

3 Tests: Metriken, Uptime/Version, Error-Rate

Commit: feat: Admin-Stats mit Uptime, Error-Rate und Worker-Status


Aufgabe 25 — E2E-Integrationstest

Datei: tests/integration/test_e2e_whatsapp_pipeline.py

# 1. Flask-Test-Client (App-Factory)
# 2. WhatsApp-POST → Queue → Worker (eine Submission) → erledigt
# 3. Admin-Stats prüfen (processed_total=1)

Refactoring: src/queue/worker.py

# verarbeite_eine_submission(qh) extrahieren (KEIN Loop)
# worker_loop() ruft dann verarbeite_eine_submission() auf

3 Tests: Suche-Catan, Hilfe, Admin-Stats nach Verarbeitung

Commit: test: E2E-Integrationstest WhatsApp→Queue→Worker→Intake