ADR 0008: Lightweight-Migration ohne Package-Split
- ports/llm_bewerter.py: Protocol + LlmRequest-Dataclass
- adapters/qwen_bewerter.py: Qwen/DashScope-Adapter mit Retry-Loop
- repositories/{antrag,bewertung,abonnement}_repository.py: Protocol + Sqlite-Impl + InMemory-Fake
- analyzer.py refactored: nimmt Optional[LlmBewerter], AsyncOpenAI-Import raus
- models.py: 5 Domain-Methoden auf Bewertung/MatrixEntry
(ist_ablehnung, hat_fundamental_kritisches_feld, verletzt_score_cap, ...)
- analyzer loggt WARNING wenn LLM Score-Cap-Invariante verletzt
Folge-PR: Callsite-Migration in main.py (~21 direkte database.*-Aufrufe)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
"""Repository-Pattern für Persistenz-Zugriff (ADR 0008).
|
|
|
|
Die Repositories kapseln direkte ``database.py``-Aufrufe hinter Protocols,
|
|
sodass Tests `InMemory*Repository` verwenden können und Callsites nicht
|
|
mehr jedes Schema-Detail kennen müssen.
|
|
|
|
Die konkreten `Sqlite*Repository`-Implementierungen delegieren heute noch
|
|
an die bestehenden Funktionen in ``database.py`` — kein Big-Bang-Rewrite.
|
|
Schritt für Schritt wandern die direkten DB-Aufrufe in die Repositories.
|
|
"""
|
|
|
|
from .antrag_repository import (
|
|
AntragRepository,
|
|
SqliteAntragRepository,
|
|
InMemoryAntragRepository,
|
|
get_antrag_repository,
|
|
)
|
|
from .bewertung_repository import (
|
|
BewertungRepository,
|
|
SqliteBewertungRepository,
|
|
InMemoryBewertungRepository,
|
|
get_bewertung_repository,
|
|
)
|
|
from .abonnement_repository import (
|
|
AbonnementRepository,
|
|
SqliteAbonnementRepository,
|
|
InMemoryAbonnementRepository,
|
|
get_abonnement_repository,
|
|
)
|
|
|
|
__all__ = [
|
|
"AntragRepository",
|
|
"SqliteAntragRepository",
|
|
"InMemoryAntragRepository",
|
|
"get_antrag_repository",
|
|
"BewertungRepository",
|
|
"SqliteBewertungRepository",
|
|
"InMemoryBewertungRepository",
|
|
"get_bewertung_repository",
|
|
"AbonnementRepository",
|
|
"SqliteAbonnementRepository",
|
|
"InMemoryAbonnementRepository",
|
|
"get_abonnement_repository",
|
|
]
|