Skip to content

Neue Domain hinzufügen

Eine Checkliste für das Hinzufügen einer neuen Domain nach demselben Muster wie Note, Tag und Comment.

Checkliste

1. Domain-Paket erstellen

bash
mkdir -p src/example/<domain>
touch src/example/<domain>/__init__.py

2. Jede Datei erstellen

DateiInhalt
entity.pyEntity als @dataclass(frozen=True, slots=True)
repository.pyXxxRepositoryInterface(ABC) + InMemoryXxxRepository
exceptions.pyXxxNotFoundException + XxxNotFoundExceptionHandler
use_case.py5 UseCases (List / Get / Create / Update / Delete) + Input/Output-DTOs
handler.pymake_xxx_router() — parse → use-case → response
sqlalchemy_repository.pySQL-Backend-Implementierung

3. Tabelle zu schema.py hinzufügen

Fügen Sie einen CREATE TABLE-Aufruf zu ensure_schema() in src/example/schema.py hinzu.

python
executor.write(
    "CREATE TABLE IF NOT EXISTS your_domain ("
    "id INTEGER PRIMARY KEY AUTOINCREMENT,"
    "name TEXT NOT NULL,"
    "created_at DATETIME DEFAULT CURRENT_TIMESTAMP"
    ")"
)

4. In app.py einbinden

Aktualisieren Sie _build_repositories() und create_app() in src/example/app.py.

python
# Zum Rückgabe-Tupel von _build_repositories() hinzufügen
your_repo = SqlAlchemyYourRepository(executor)

# Router in create_app() registrieren
app.include_router(make_your_router(
    list_use_case=ListYourUseCase(your_repo),
    ...
))

5. Tests schreiben

tests/example/<domain>/
  __init__.py
  test_<domain>_use_case.py     # UseCase-Unit-Tests (ohne DB)
  test_<domain>_repository.py   # Repository-Contract-Tests (InMemory + SQLAlchemy)
  test_<domain>_http.py         # HTTP-Integrationstests (TestClient)

6. MCP-Tools registrieren (optional)

Fügen Sie UseCase-Registrierungen zu create_mcp_server() in src/example/mcp.py hinzu.

7. Alle Prüfungen bestehen

bash
uv run pytest && \
uv run mypy src/ && \
uv run ruff check src/ tests/ && \
uv run ruff format --check src/ tests/

Namenskonventionen

ZielKonventionBeispiel
Entity-KlassePascalCaseNote, Tag, Comment
UseCase-Input-DTOXxxInputCreateNoteInput
AusnahmeXxxNotFoundExceptionNoteNotFoundException
Handler-Factorymake_xxx_router()make_note_router()

Referenzimplementierungen

  • src/example/note/ — einfache CRUD-Domain
  • src/example/comment/ — verschachtelte Domain mit Fremdschlüssel (note_id)

Veröffentlicht unter der MIT-Lizenz.