🛣️ 通知ルート
通知ルートは Express ミドルウェアではなく SDK コンポーザーです。すべてのルートで最初に認証を行い、次に所有権または本人確認のバリデーションを実行します。
一覧
| ルート | メソッド / プロトコル | パス | スキーマ | バリデーター | 成功ステータス |
|---|---|---|---|---|---|
updateNotificationToReadRoute | POST / HTTP | /notifications/:notificationId/read | updateNotificationToReadSchema | isAuthenticated()、ownsNotification | 204 |
findNotificationsRoute | GET / HTTP | /notifications/identities/:identityId | findNotificationsSchema | isAuthenticated()、isSelf(['params', 'requestParams', 'identityId']) | 200 |
updateNotificationToReadBatchRoute | POST / HTTP | /notifications/identities/:identityId/read | updateNotificationToReadBatchSchema | isAuthenticated()、isSelf(['params', 'requestParams', 'identityId']) | 204 |
詳細
updateNotificationToReadRoute
実装
エンドポイント: POST /notifications/:notificationId/read
POST /notifications/:notificationId/read は、所有する通知を既読にして 204 を返します。すでに既読のドキュメントも、更新を行わずに成功します。
アクセス: isAuthenticated()、続いてパス ID を渡した ownsNotification。
リクエスト: updateNotificationToReadSchema はパスの notificationId を必須とします。本文およびクエリはありません。デフォルトでは Bearer 認証を、Cookie モードでは accessToken Cookie を送信します。
パイプライン: buildNotificationRead → buildGetNotificationFilter → getNotification → 条件付きの updateNotification → orThrow。
成功: undefined データを含む明示的な 204 ディスクリプター。
失敗: このルートは NotificationNotFoundBlockError を 404、データベースエラーを 500 にマッピングします。ただし、マウントされたルートでは ownsNotification が先に実行されます。存在しない通知には通常 receiverId がないため、ルートパイプラインの前に所有権確認で 403 になります。他のバリデーターの失敗も先に発生します。完全なソースを表示
findNotificationsRoute
実装
エンドポイント: GET /notifications/identities/:identityId
GET /notifications/identities/:identityId は、認証済みアイデンティティの正規化されたページネーション済み通知を 200 で返します。
アクセス: isAuthenticated()、続いて isSelf(['params', 'requestParams', 'identityId'])。
リクエスト: findNotificationsSchema はパスの identityId を必須とし、整数クエリ page(1~1000)と limit(1~50)を受け付けます。本文はありません。デフォルトでは Bearer 認証を、Cookie モードでは accessToken Cookie を送信します。withPagination は省略値をページ 1、上限 10 に設定し、下流クエリの前にこれらのキーを削除して、得られた skip/limit を適用します。
パイプライン: buildFindNotificationsFilter → findNotifications を囲む withPagination → normalizeDocuments → applySpec → orThrow。
成功: 明示的な 200 の { data, metadata: { pagination } }。normalizeDocuments は Mongo の _id を削除します。
失敗: 通知データベースエラーは 500 にマッピングされ、バリデーターの失敗は先に発生します。空の結果は 200 です。完全なソースを表示
updateNotificationToReadBatchRoute
実装
エンドポイント: POST /notifications/identities/:identityId/read
POST /notifications/identities/:identityId/read は、受信者が所有するアンカーを基準に未読通知を既読にし、204 を返します。アンカー以降に未読の一致がない場合も、正常な no-op です。
アクセス: isAuthenticated()、続いて isSelf(['params', 'requestParams', 'identityId'])。
リクエスト: updateNotificationToReadBatchSchema はパスの identityId と、厳格な application/json の { lastReadNotificationId } 本文を必須とします。デフォルトでは Bearer 認証を、Cookie モードでは accessToken Cookie を送信します。
パイプライン: アンカーをフィルター → getNotification → assertHasCreatedAt → buildNotificationsReadFilter → buildNotificationRead → 条件付きの updateNotificationBatch → orThrow。
成功: undefined データを含む明示的な 204 ディスクリプター。バッチ更新から後で発生する NotificationNotFoundBlockError は ok(false) になります。
失敗: アンカーの不在は 404、createdAt の欠落またはデータベースエラーは 500 です。バリデーターの失敗は先に発生します。完全なソースを表示