⚙️ Invitation handlers
Invitation handler はルートパイプライン関数であり、Express ミドルウェアではありません。params と context から RouteHandlerPayload の値を読み込み、成功した値を context.data にマージするか、成功した Result を HTTP 応答記述子でターミネートします。
目録
| ハンドラー | パイプラインの役割 | 入力 / コンテキスト | 結果 / 動作 / エラー | ルートでの使用 |
|---|---|---|---|---|
INVITATION_TARGET | 定数 | N/A | 正確に 'invitation' トークンターゲット。 | registerCredentialsRoute |
INVITATION_STATUS_PENDING | 定数 | N/A | 正確に 'pending' デフォルトステータス。 | createInvitationRoute、registerCredentialsRoute |
INVITATION_STATUS_ACCEPTED | 定数 | N/A | 正確に 'accepted' デフォルトステータス。 | registerCredentialsRoute |
createInvitation | ハンドラー | requestBody、db.invitations、設定 | invitationId を書き込み;400 または 500。 | createInvitationRoute |
sendInvitationEmail | ハンドラー | 招待、トークン、メール設定/サービス | 配信フラグを書き込み;400 または 500。 | createInvitationRoute |
createInvitationTerminator | ターミネーター | 招待 ID、配信フラグ | { invitationId, statusCode: 201 } を返します;データ欠落は 500。 | createInvitationRoute |
findInvitations | ハンドラー | requestQuery、db.invitations | invitations を書き込み;クエリ失敗で 500。 | findInvitationsRoute |
normalizeInvitationsListTerminator | ターミネーター | invitations またはページネーションリスト | 各招待から _id を削除;ページネーションメタデータを保持。 | findInvitationsRoute |
buildCheckInvitationTokenPayload | ハンドラー | パイプラインペイロード | 招待トークンターゲットを書き込み。 | registerCredentialsRoute |
getInvitationIdFromTokenInfo | ハンドラー | tokenInfo.invitationId | 招待 ID を書き込み;欠落時は 400。 | registerCredentialsRoute |
getInvitationById | ハンドラー | 招待 ID、db.invitations | 招待を書き込み;400、404、または 500。 | createInvitationRoute、getInvitationByIdRoute、registerCredentialsRoute |
normalizeInvitationTerminator | ターミネーター | context.data.invitation | _id を削除し招待を返します;欠落時は 404。 | getInvitationByIdRoute |
verifyInvitationPayload | ハンドラー | 招待 ID、トークン情報 | 有効性フラグを書き込み;不一致で 400。 | カスタム合成のみ |
isPendingInvitation | ハンドラー | 招待、ステータス設定 | 保留中フラグを書き込み;保留中でない場合 400。 | registerCredentialsRoute |
buildAcceptInvitationPayload | ハンドラー | ステータス設定 | 受け入れ更新ペイロードを書き込み。 | registerCredentialsRoute |
updateInvitation | ハンドラー | 招待 ID、更新ペイロード、db.invitations | 招待 ID を書き込み;400、404、または 500。 | registerCredentialsRoute |
deleteInvitation | ハンドラー | 招待 ID、db.invitations | 削除結果を書き込み;400、404、または 500。 | deleteInvitationRoute |
deleteInvitationTerminator | ターミネーター | 削除結果 | { statusCode: 204 } を返します;結果欠落は 500。 | deleteInvitationRoute |
buildInvitationOnetimeTokenPayload | ハンドラー | 招待 ID、トークン設定 | ターゲットとトークンデータを書き込み;失敗で 400。 | createInvitationRoute |
詳細
INVITATION_TARGET
実装
'invitation' は buildCheckInvitationTokenPayload によって書き込まれ、buildInvitationOnetimeTokenPayload のフォールバックトークンターゲットです。したがって、前者を通じて registerCredentialsRoute に、後者を通じて createInvitationRoute に到達します。
INVITATION_STATUS_PENDING
実装
'pending' は createInvitation と isPendingInvitation における configuration.invitation.status.pending のフォールバックです。これらのハンドラーはそれぞれ createInvitationRoute と registerCredentialsRoute で使用されます。
INVITATION_STATUS_ACCEPTED
実装
'accepted' は buildAcceptInvitationPayload における configuration.invitation.status.accepted のフォールバックです。registerCredentialsRoute で使用されます。
createInvitation
実装
params.requestBody と context.configuration.invitation.status.pending を読み込み、基本エンティティを作成し、context.db.invitations に挿入して context.data.invitationId を書き込みます。空のボディは 400 Request body is required;insertedId の欠落は 400 Failed to create invitation;データベース例外は同じメッセージで 500 です。createInvitationRoute で使用されます。
sendInvitationEmail
実装
context.data.invitation、context.data.token、context.configuration.invitation、context.mailService を読み込み、招待メールを送信して context.data.invitationEmailSent として sendMail() の結果を書き込みます。招待/トークンの欠落は 400 Invitation and one-time token are required;無効化/不完全な設定は 500 Invitation email configuration is incomplete or disabled;配信失敗は 500 Failed to send invitation email です。createInvitationRoute で使用されます。
createInvitationTerminator
実装
エラー結果をスローし、context.data.invitationId と context.data.invitationEmailSent を読み込み、{ data: { invitationId }, statusCode: 201 } を返します。欠落、または偽と評価される値は 500 Unknown error creating invitation を引き起こします。createInvitationRoute をターミネートします。
findInvitations
実装
params.requestQuery を読み込み、context.db.invitations.find(filter || {}) をクエリし、カーソルを toArray() で変換して context.data.invitations を書き込みます。データベース例外は 500 Failed to find invitations です。findInvitationsRoute で使用されます。
normalizeInvitationsListTerminator
実装
前のエラー結果をスローし、context.data.invitations を読み込み、各招待から _id を削除し、配列または { data, metadata: { pagination: context.data.invitations.metadata } } を返します。findInvitationsRoute をターミネートします。
buildCheckInvitationTokenPayload
実装
context.data.checkToken.target を INVITATION_TARGET として確実に書き込みます。registerCredentialsRoute で使用されます。
getInvitationIdFromTokenInfo
実装
context.data.tokenInfo.invitationId を読み込み、context.data.invitationId を書き込み、または欠落時は 400 Invitation ID is required を返します。registerCredentialsRoute で使用されます。
getInvitationById
実装
params.requestParams.invitationId より前に context.data.invitationId を読み込み、context.db.invitations.findOne({ id: { $eq: String(invitationId) } }) をクエリして context.data.invitation を書き込みます。ID の欠落は 400 Invitation ID is required、一致なしは 404 Invitation not found、データベース失敗は 500 Failed to get invitation by id です。createInvitationRoute、getInvitationByIdRoute、registerCredentialsRoute で使用されます。
normalizeInvitationTerminator
実装
前のエラー結果をスローし、context.data.invitation を読み込み、欠落時は 404 Invitation not found を返し、そうでなければ _id を削除して公開された招待を返します。getInvitationByIdRoute をターミネートします。
verifyInvitationPayload
実装
context.data.invitationId または params.requestParams.invitationId と context.data.tokenInfo.invitationId を読み込み;一致する値は isValidInvitationPayload: true を書き込み、そうでなければ 400 Invalid invitation payload を返します。カスタム合成のみ;エクスポートされたルートはこれを合成していません。
isPendingInvitation
実装
INVITATION_STATUS_PENDING をフォールバックとして context.data.invitation と context.configuration.invitation.status.pending を読み込み;一致は isPendingInvitation: true を書き込みます。招待の欠落は 400 Invitation is required;保留中でないステータスは 400 Invitation is not pending です。registerCredentialsRoute で使用されます。
buildAcceptInvitationPayload
実装
INVITATION_STATUS_ACCEPTED をフォールバックとして context.configuration.invitation.status.accepted を読み込み、context.data.invitation を updateBaseEntity({ acceptedAt: new Date().toISOString(), status }) として書き込みます。エラーブランチはありません。registerCredentialsRoute で使用されます。
updateInvitation
実装
ID をデータからパスへ、招待データをデータからボディへ読み込み;updateBaseEntity を適用し、文字列 id で更新して context.data.invitationId を書き込みます。ID の欠落は 400 Invitation ID is required;ペイロードの欠落/空は 400 Invitation Payload is required;一致なしは 404 Invitation not found;変更なしまたはデータベース失敗は 400/500 Failed to update invitation です。registerCredentialsRoute で使用されます。
deleteInvitation
実装
ID をデータからパスへ読み込み、文字列 id で削除して context.data.deleteInvitation を書き込みます。ID の欠落は 400 Invitation ID is required;削除なしは 404 Invitation not found;データベース失敗は 500 Failed to delete invitation です。deleteInvitationRoute で使用されます。
deleteInvitationTerminator
実装
前のエラー結果をスローし、context.data.deleteInvitation を要求し、{ statusCode: 204 } を返します;データ欠落は 500 Unknown error deleting invitation です。deleteInvitationRoute をターミネートします。
buildInvitationOnetimeTokenPayload
実装
context.data.invitationId と context.configuration.invitation.target を読み込み;context.data.target と context.data.tokenData: { invitationId } を書き込み、INVITATION_TARGET をフォールバックとします。ID の欠落は 400 Invitation ID is required です。createInvitationRoute で使用されます。