Skip to content

Ajouter un nouveau domaine ​

Une checklist pour ajouter un nouveau domaine en suivant le même schéma que Note, Tag et Comment.

Checklist ​

1. Créer le package du domaine ​

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

2. Créer chaque fichier ​

FichierContenu
entity.pyEntité sous forme de @dataclass(frozen=True, slots=True)
repository.pyXxxRepositoryInterface(ABC) + InMemoryXxxRepository
exceptions.pyXxxNotFoundException + XxxNotFoundExceptionHandler
use_case.py5 UseCases (List / Get / Create / Update / Delete) + DTOs Input/Output
handler.pymake_xxx_router() — parse → use-case → response
sqlalchemy_repository.pyImplémentation du backend SQL

3. Ajouter la table dans schema.py ​

Ajoutez un appel CREATE TABLE à ensure_schema() dans src/example/schema.py.

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. Câbler dans app.py ​

Mettez à jour _build_repositories() et create_app() dans src/example/app.py.

python
# Ajouter au tuple de retour de _build_repositories()
your_repo = SqlAlchemyYourRepository(executor)

# Enregistrer le router dans create_app()
app.include_router(make_your_router(
    list_use_case=ListYourUseCase(your_repo),
    ...
))

5. Écrire les tests ​

tests/example/<domain>/
  __init__.py
  test_<domain>_use_case.py     # Tests unitaires UseCase (sans DB)
  test_<domain>_repository.py   # Tests de contrat du repository (InMemory + SQLAlchemy)
  test_<domain>_http.py         # Tests d'intégration HTTP (TestClient)

6. Enregistrer les outils MCP (optionnel) ​

Ajoutez les enregistrements de UseCase à create_mcp_server() dans src/example/mcp.py.

7. Passer toutes les vérifications ​

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

Conventions de nommage ​

CibleConventionExemple
Classe d'entitéPascalCaseNote, Tag, Comment
DTO d'entrée UseCaseXxxInputCreateNoteInput
ExceptionXxxNotFoundExceptionNoteNotFoundException
Factory de handlermake_xxx_router()make_note_router()

Implémentations de référence ​

  • src/example/note/ — domaine CRUD basique
  • src/example/comment/ — domaine imbriqué avec clé étrangère (note_id)

Publié sous la licence MIT.