From 021cc561f1c50df0d7f656b0c305a00037c24d2a Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Mon, 22 Jun 2026 12:08:33 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20Phase=203=20=E2=80=94=20Aufgaben=2016-2?= =?UTF-8?q?0=20(Config,=20Errors,=20systemd,=20Health,=20DB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/alicia-aufgaben-phase3.md | 124 +++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 docs/alicia-aufgaben-phase3.md diff --git a/docs/alicia-aufgaben-phase3.md b/docs/alicia-aufgaben-phase3.md new file mode 100644 index 0000000..f6b7f17 --- /dev/null +++ b/docs/alicia-aufgaben-phase3.md @@ -0,0 +1,124 @@ +# Alicia — Aufgaben 16–20: BSN-Livesystem Phase 3 (Live-Vorbereitung) + +> **Repo:** `git@git.datenhimmel.work:danielkrause/BSN-Livesystem.git` +> **Stand:** 15 Aufgaben fertig. Phase 2 abgeschlossen. +> **Ziel:** Projekt live-fähig machen — Config, DB, Error-Handling, Service-Dateien. + +--- + +## Aufgabe 16 — Konfigurations-Management (pydantic-settings) + +Ersetze hartcodierte Werte durch eine zentrale Config-Klasse. + +### Datei 1: `src/config.py` + +```python +from __future__ import annotations +from pydantic_settings import BaseSettings + + +class Settings(BaseSettings): + """Zentrale Anwendungskonfiguration. Werte aus .env oder Environment.""" + + REDIS_HOST: str = "localhost" + REDIS_PORT: int = 6379 + WHATSAPP_APP_SECRET: str = "" + WHATSAPP_VERIFY_TOKEN: str = "bsn_verify_token" + TELEGRAM_BOT_TOKEN: str = "" + APP_HOST: str = "0.0.0.0" + APP_PORT: int = 5002 + APP_DEBUG: bool = False + + class Config: + env_file = ".env" + env_file_encoding = "utf-8" + + +settings = Settings() +``` + +### Datei 2: `.env.template` + +``` +REDIS_HOST=localhost +REDIS_PORT=6379 +WHATSAPP_APP_SECRET=dein_secret_hier +WHATSAPP_VERIFY_TOKEN=bsn_verify_token +TELEGRAM_BOT_TOKEN=dein_bot_token_hier +APP_DEBUG=false +``` + +### Integration: `src/app.py` umbauen + +`from src.config import settings` — ersetze alle Hart-Konfigurationen. + +### Test: `tests/test_config.py` — 4 Tests + +**Commit:** `feat: Pydantic-Settings Konfiguration mit .env-Support` + +--- + +## Aufgabe 17 — Einheitliche Fehlerbehandlung + +Zentrale JSON-Error-Responses via Flask errorhandler. + +### Datei: `src/error_handler.py` + +Handler für 400, 401, 404, 422 (ValidationError), 500. +Alle Responses im Format: `{"error": "...", "message": "...", "status": N}` + +### Integration: `register_error_handlers(app)` in `create_app()` + +### Test: `tests/test_error_handler.py` — 5 Tests + +**Commit:** `feat: Einheitliche JSON-Error-Responses` + +--- + +## Aufgabe 18 — systemd Service-Dateien + +### Dateien: +- `deploy/bsn-chatbot.service` — Flask-App als systemd-Service +- `deploy/bsn-worker.service` — Queue-Worker als systemd-Service +- `deploy/README.md` — Installationsanleitung + +### Kein Test nötig (Konfigurationsdateien) + +**Commit:** `feat: systemd-Service-Dateien für Chatbot + Queue-Worker` + +--- + +## Aufgabe 19 — Health-Check erweitern + +### Datei: `src/routes/health.py` + +Blueprint mit: +- `GET /health` — Status, queue_size, python_version, platform +- `GET /health/ready` — Readiness-Check (Redis-Verbindung) + +### Integration: `app.py`: inline `/health` entfernen, `health_bp` registrieren + +### Test: `tests/test_health.py` — 4 Tests + +**Commit:** `feat: Erweiterter Health-Check mit Readiness-Endpunkt` + +--- + +## Aufgabe 20 — SQLAlchemy-Persistenz + +### Dateien: +- `src/database.py` — Engine, Session, Base +- `src/models/spiel.py` — SpielDB (SQLAlchemy-Modell) +- `src/services/game_service.py` — Umbau auf DB-Sessions + +### Test: `tests/test_database.py` — 5 Tests + +**Commit:** `feat: SQLAlchemy-Datenbank mit SQLite-Persistenz` + +--- + +## ⚠️ Wichtig + +- `pip install pydantic-settings sqlalchemy` +- **Qualität:** `ruff check . && ruff format . && mypy --config-file pyproject.toml . && pytest -v` +- **Reihenfolge:** 16 → 17 → 18 → 19 → 20