125 lines
3.2 KiB
Markdown
125 lines
3.2 KiB
Markdown
# 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
|