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

114 lines
3.5 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.
# 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`
```python
# 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`
```python
# 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`
```python
# 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`
```python
# queue_status(): +processed_total, +processed_errors, +oldest_pending
# stats(): +echte uptime (startzeit in app.config), +version, +error_rate
```
### Datei: `src/queue/handler.py`
```python
# +processed_total Property
# +processed_errors Property
# +oldest_pending() → datetime | None
```
### Datei: `src/config.py`
```python
# 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`
```python
# 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`
```python
# 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`