🛣️ Location routes
Location route は SDK composer であり、Express ミドルウェアではありません。読み取りは公開されています;変更操作は isAuthenticated() と checkIdentityType(['admin']) を要求します。
目録
| ルート | メソッド / プロトコル | パス | スキーマ | バリデータ | 成功ステータス |
|---|---|---|---|---|---|
createLocationRoute | POST / HTTP | /locations | createLocationSchema | isAuthenticated()、checkIdentityType(['admin']) | 201 |
getLocationRoute | GET / HTTP | /locations/:locationId | getLocationSchema | なし | 200 |
updateLocationRoute | PATCH / HTTP | /locations/:locationId | updateLocationSchema | isAuthenticated()、checkIdentityType(['admin']) | 200 |
deleteLocationRoute | DELETE / HTTP | /locations/:locationId | deleteLocationSchema | isAuthenticated()、checkIdentityType(['admin']) | 204 |
findLocationsRoute | GET / HTTP | /locations | findLocationsSchema | なし | 200 |
詳細
createLocationRoute
実装
エンドポイント: POST /locations
POST /locations は認証済み管理者のためにルートまたは子の位置情報を作成し、作成された位置情報を 201 で返します;親が欠落している場合 404 です。
アクセス: 管理者。ファクトリは isAuthenticated() を実行し、次に checkIdentityType(['admin']) を実行します。
リクエスト: 必須の厳密な application/json ボディ(createLocationSchema 由来):文字列の name、code、type、 plus オプションの文字列 parentId;パスまたはクエリパラメータはありません。デフォルト/未設定の Bearer モードでは、Authorization: Bearer <access-token> を送信します;authMode: 'cookie' の場合、代わりに accessToken クッキーを送信します。真理値の parentId は階層作成前に読み込まれます。
パイプライン: 親がある場合のみ getLocationById と buildAncestorsFromParent → buildLocationToCreate → createLocation → getLocationById → orThrow。
成功: 作成された位置情報を含む明示的な 201:Mongo _id は投影除外され、normalizeLocation が合成されていないため parentId と ancestors は残ります。
失敗: 親ルックアップまたは作成後ルックアップからの LocationNotFoundBlockError は 404 にマッピングされます;作成/読み取りデータベースエラーは 500 にマッピングされます。リンクされた��リデータが最初に実行され、文書化された認証、セットアップ、または認可エラーで失敗する可能性があります。完全なソースを表示
getLocationRoute
実装
エンドポイント: GET /locations/:locationId
GET /locations/:locationId は 1 つの公開位置情報を取得し、200 で返します;不明な ID は 404 です。
アクセス: 公開。
リクエスト: getLocationSchema はパスの locationId を要求します;ボディまたはクエリはありません。
パイプライン: getLocationById → orThrow。
成功: Mongo _id が投影除外された明示的な 200;normalizeLocation が合成されていないため parentId と ancestors は残ります。
失敗: 位置情報欠落の 404 またはデータベースエラーの 500。完全なソースを表示
updateLocationRoute
実装
エンドポイント: PATCH /locations/:locationId
PATCH /locations/:locationId は管理者が選択した位置情報を更新し、再読み込みされた公開投影を 200 で返します;不明な ID は 404 です。
アクセス: 管理者;isAuthenticated() 次に checkIdentityType(['admin'])。
リクエスト: updateLocationSchema は文字列のパス locationId と必須の厳密な application/json ボディを要求します。オプションのボディフィールドは文字列の code、name、type のみ(空オブジェクトはスキーマ有効);parentId は受け付けられません。クエリパラメータはありません。デフォルトでは Authorization: Bearer <access-token> を使用し、またはクッキーモードで accessToken クッキーを使用します。
パイプライン: updateLocation → getLocationById → orThrow。
成功: 再読み込みされた getLocationById 投影を含む明示的な 200:Mongo _id は省略されますが、parentId と ancestors は残ります。
失敗: 更新または再読み込みからの LocationNotFoundBlockError は 404 にマッピングされます;更新/読み取りデータベースエラーは 500 にマッピングされます。リンクされたバリデータが最初に実行され、文書化された認証、セットアップ、または認可エラーで失敗する可能性があります。完全なソースを表示
deleteLocationRoute
実装
エンドポイント: DELETE /locations/:locationId
DELETE /locations/:locationId は子孫がない場合にのみ管理者が選択した位置情報を削除し、204 を返します;子孫がある場合 409 になります。
アクセス: 管理者;isAuthenticated() 次に checkIdentityType(['admin'])。
リクエスト: deleteLocationSchema は文字列のパス locationId を要求します;ボディまたはクエリはありません。デフォルトでは Authorization: Bearer <access-token> を使用し、またはクッキーモードで accessToken クッキーを使用します。
パイプライン: buildDescendantsFilter → findLocations → assertNoDescendantLocations → deleteLocation → 空のボディ → orThrow。
成功: ターミネーターは明示的に { data: {}, statusCode: 204 } 記述子を返します;Express サービスは res.status(204).json({}) を呼び出し、HTTP 204 応答にはボディがありません。
失敗: assertNoDescendantLocations からの LocationConflictError は 409 にマッピングされます;クエリ/削除データベースエラーは 500 にマッピングされます。ターミネーターが LocationNotFoundBlockError を 404 にマッピングしますが、このパイプラインは当該エラーを生成する block を呼び出しません:ターゲットが欠落すると deleteLocation は LocationUnexpectedDBError を返すため 500 になります。リンクされたバリデータが最初に実行され、文書化された認証、セットアップ、または認可エラーで失敗する可能性があります。完全なソースを表示
findLocationsRoute
実装
エンドポイント: GET /locations
GET /locations はページネーション付きの公開位置を一覧表示し、200 を返します;データベースクエリ失敗は 500 です。
アクセス: 公開。
リクエスト: findLocationsSchema はオプションの整数クエリ page(1–1000)と limit(1–50)を受け入れます;ボディまたはパスパラメータはありません。withPagination は欠落値をページ 1 と制限 10 にデフォルトし、残りのクエリフィルターを findLocations に渡す前にそれら 2 つのキーを削除します。
パイプライン: findLocations 周りの withPagination → applySpec 応答ビルダー → orThrow。
成功: { data, metadata: { pagination } } を含む明示的な 200。各位置情報は Mongo _id が投影除外されています;ページネーションは { hasNext, hasPrev, limit, page, total, totalPages } です。
失敗: 位置情報クエリからの LocationUnexpectedDBError は 500 にマッピングされます。ソースは LocationNotFoundBlockError → 404 マッピングもリストしていますが、findLocations は当該エラーではなく空の配列を返すため、このルートは空の結果に対して 404 を生成しません。完全なソースを表示