🛣️ 注文ルート
注文ルートは、Nodeblocksアプリケーションで注文管理操作用の事前設定されたHTTPエンドポイントを提供します。これらのルートはハンドラー、バリデーター、ミドルウェアを組み合わせて、適切な認証、認可、エラーハンドリングを含む完全なAPIエンドポイントを作成します。
🎯 概要
注文ルートは以下の目的で設計されています:
- 完全なAPIエンドポイントを提供 - 注文管理操作用
- ハンドラーとバリデーターを組み合わせ - セキュアな操作のため
- 認証と認可チェックを含む
- 関数型構成パターンをサポート
- ロギングとエラー管理を自動的に処理
📋 ルート構造
各注文ルートは一貫したパターンに従います:
- HTTP Method: 操作タイプを定義(GET、POST、PATCH、DELETE)
- Path: パラメータを含むエンドポイントURLを指定
- ハンドラー: ビジネスロジック用の構成された関数チェーン
- バリデーター: 認証と認可チェック
🔧 利用可能な注文ルート
createOrderRoute
新しい注文を作成し、作成されたリソースを返します。
目的: 完全なリソース取得を含む注文作成を処理します
ルート詳細:
- Method:
POST - Path:
/orders - 認証: 必須(Bearerトークン)
ハンドラー: createOrder、getOrderById、createOrderTerminator
バリデーター: isAuthenticated、some(checkIdentityType(['admin'])、isSelf(['params', 'requestBody', 'identityId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.createOrderRoute);
getOrderRoute
IDによる特定の注文を取得します。
目的: アクセス制御を含む注文データを取得します
ルート詳細:
- Method:
GET - Path:
/orders/:orderId - 認証: 必須(Bearerトークン)
ハンドラー: getOrderById、normalizeOrderTerminator
バリデーター: isAuthenticated、some(checkIdentityType(['admin'])、ownsOrder(['params', 'requestParams', 'orderId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.getOrderRoute);
findOrdersRoute
正規化されたリスト形式ですべての注文を取得します。
目的: ページネーションとアクセス制御を含む注文をリストします
ルート詳細:
- Method:
GET - Path:
/orders - 認証: 必須(Bearerトークン)
ハンドラー: findOrders、normalizeOrdersListTerminator
バリデーター: isAuthenticated、some(checkIdentityType(['admin'])、isSelf(['params', 'requestQuery', 'identityId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.findOrdersRoute);
updateOrderRoute
既存の注文を更新し、更新されたリソースを返します。
目的: アクセス制御を含む注文データを変更します
ルート詳細:
- Method:
PATCH - Path:
/orders/:orderId - 認証: 必須(Bearerトークン)
ハンドラー: updateOrder、getOrderById、normalizeOrderTerminator
バリデーター: isAuthenticated、some(checkIdentityType(['admin'])、ownsOrder(['params', 'requestParams', 'orderId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.updateOrderRoute);
deleteOrderRoute
IDによる注文を削除します。
目的: アクセス制御を含む注文を削除します
ルート詳細:
- Method:
DELETE - Path:
/orders/:orderId - 認証: 必須(Bearerトークン)
ハンドラー: deleteOrder、deleteOrderTerminator
バリデーター: isAuthenticated、some(checkIdentityType(['admin'])、ownsOrder(['params', 'requestParams', 'orderId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.deleteOrderRoute);
findOrdersByOrganizationIdRoute
GET /orders/organizations/:organizationId経由で組織IDによる注文を取得します。
目的: 適切な認可制御とページネーションサポートを含む組織スコープの注文へのアクセスを提供します。
ルート詳細:
- Method: GET
- Path:
/orders/organizations/:organizationId - 認証: 必須(Bearerトークン)
- 認可: 組織ロールベース(
hasOrgRole(['owner', 'admin', 'member']))
ハンドラー: buildOrganizationIdFilter、buildWithoutMongoIdFindOptions、findOrders、applySpec、orThrow
バリデーター: isAuthenticated、hasOrgRole(['owner', 'admin', 'member'], ['params', 'requestParams', 'organizationId'])
クエリパラメータ:
| パラメータ | タイプ | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
page | number | ❌ | 1 | ページネーションのページ番号 |
limit | number | ❌ | 10 | ページあたりの注文数 |
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.findOrdersByOrganizationIdRoute);
レスポンス(200 - 成功):
{
"data": [
{
"id": "order-123",
"organizationId": "org-456",
"currency": "USD",
"status": "confirmed",
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
],
"metadata": {
"pagination": {
"hasNext": false,
"hasPrev": false,
"limit": 10,
"page": 1,
"total": 1,
"totalPages": 1
}
}
}
エラーレスポンス:
401: Unauthorized - 無効または欠落している認証トークン403: Forbidden - ユーザーが組織アクセスを欠いているか、ロール権限が不足500: Internal Server Error - データベースまたは正規化エラー
主な機能:
- 組織スコープ: 注文はパスパラメータの組織IDで自動的にフィルタリングされます
- ロールベース認可: 組織の所有者、管理者、メンバーへのアクセスを制限
- ページネーションサポート: 大きな注文コレクション用のメタデータを含む完全なページネーション
- データ正規化:
buildWithoutMongoIdFindOptionsによる自動ドキュメント正規化 - 型安全性:
OrderDbBlockErrorによる包括的なエラーハンドリング