Rust DDD の presentation layer として `api` crate をこのリポジトリの規約で追加・修正する。Use when: `api/` 配下で Axum router、handler、extractor、OIDC claims/auth、AppRegistry 配線、ApiError 変換、OpenAPI 出力を実装または拡張するとき。`ApiRouter`, `State` による AppRegistry 注入, `OidcUserInfo`, `ApiError`, `build_router`, `get_with`, `post_with` の既存パターンに合わせたいとき。
このリポジトリではプレゼンテーション層は api クレートが担う。
Axum/Aide を使った HTTP 境界、認証 extractors、registry 経由の use case 呼び出し、API エラー変換を既存パターンで追加・修正する。
$application-layer を使う。$infrastructure-layer を使う。$domain-layer も使う。AppRegistry から use case を取得し、DTO を受け渡すだけに留める。prepare_actor / prepare_optional_actor を通す。ApiError に集約し、HTTP ステータスとレスポンス形をここで決める。ApiRouter と Aide の *_with API に揃える。OidcUserInfoOption<OidcUserInfo>actor が必要なら registry 経由で準備し、handler では認証ロジックを複製しない。
State(AppRegistry) を受ける。Path, Query, Json を Axum extractor で受ける。execute(...) を呼ぶ。Json<T>、空レスポンスは NoContent を使う。StatusCode::CREATED と Json<EntityCreationDTO> の組み合わせを優先する。#[tracing::instrument(...)] を既存の粒度で付ける。ApiRouter::new().nest(...) を使う。get_with, post_with, put_with, delete_with で operation metadata を足す。tag(...) と response::<...>() を必要に応じて設定する。api/src/router.rs の build_api_router() に merge する。auth/extractor.rs に寄せる。TryFrom で扱う。ApiError / OidcAuthError に閉じる。AppRegistry で公開する。ApplicationError / OidcAuthError からの変換を ApiError にまとめる。IntoResponse の出力形式を壊さない。build_openapi_schema に寄せる。try_into() や actor 準備以上の分岐が増えたら application へ寄せられないか確認する。api crate に domain repository や SeaORM を持ち込まない。BadRequest だけ、という既存ルールを意識する。#[cfg(debug_assertions)] を守る。cargo test -p apicargo check -p api具体例は references/presentation-patterns.md を読む。