💬 チャットハンドラーブロック
チャットハンドラーブロックは、Nodeblocksアプリケーションにおけるチャット管理操作のためのコアビジネスロジック関数を提供します。これらのハンドラーは、チャットデータベース操作、データ変換、レスポンスフォーマッティングの共通パターンをカプセル化します。
🎯 概要
チャットハンドラーブロックは以下を目的として設計されています:
- 再利用可能な関数でのチャットビジネスロジックのカプセル化
- 適切なエラー管理によるチャットデータベース操作の処理
- 異なるフォーマット間でのチャットデータの変換
- TypeScript統合による型安全性の確保
- 他のチャットブロックとのコンポジションのサポート
📋 チャットハンドラー種類
チャンネルハンドラー
チャンネル関連操作(作成、取得、更新、削除)を実行する関数。
メッセージハンドラー
メッセージ関連操作(送信、取得、更新、削除)を実行する関数。
サブスクリプションハンドラー
サブスクリプション関連操作(チャンネルへのユーザーサブスクリプション管理)を実行する関数。
ターミネーターハンドラー
最終的なチャットレスポンスをフォーマットして返す関数。
🔧 利用可能なチャットハンドラー
📺 チャンネルハンドラー
コアチャンネル操作
createChatChannel
検証とエンティティ管理により、データベースに新しいチャットチャンネルを作成します。
目的: 検証とエンティティ管理によるチャットチャンネル作成を処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- channelIdを含む成功またはエラー
使用例:
// コンポジションでの使用:
compose(createChatChannel, terminator);
主要機能:
- リクエストボディの存在を検証
- メタデータ付きベースエンティティを作成
- 成功時にchannelIdを返す
- データベース挿入エラーを処理
getChatChannelById
存在検証により、IDで単一のチャンネルを取得します。
目的: 存在検証によるチャンネルデータの取得
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- channelを含む成功またはエラー
使用例:
// コンポジションでの使用:
compose(getChatChannelById, normalizeTerminator);
主要機能:
- チャンネルIDの存在を検証
- チャンネルの存在を確認
- 完全なチャンネルオブジェクトを返す
- データベースクエリエラーを処理
findChatChannels
オプションのフィルタリングで複数のチャンネルを検索します。
目的: フィルターサポートによるチャンネルのクエリを処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- channels配列を含む成功またはエラー
使用例:
compose(findChatChannels, listTerminator);
主要機能:
- オプションフィルターパラメータを受け入れ
- フィルターが提供されない場合は全チャンネルを返す
- 複雑なMongoDBクエリをサポート
- データベースクエリエラーを処理
updateChatChannel
検証と競合検出により、IDで既存のチャンネルを更新します。
目的: 検証と競合検出によるチャンネルの更新を処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- 更新結果を含む成功またはエラー
使用例:
// コンポジションでの使用:
compose(updateChatChannel, terminator);
主要機能:
- チャンネルIDとリクエストボディを検証
- 更新前にチャンネルの存在を確認
- ベースエンティティメタデータを更新
- 更新操作の結果を返す
deleteChatChannel
存在検証による安全な削除で、IDでチャンネルを削除します。
目的: 存在検証によるチャンネルの安全な削除を処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- 削除結果を含む成功またはエラー
使用例:
// コンポジションでの使用:
compose(deleteChatChannel, deleteTerminator);
主要機能:
- チャンネルIDの存在を検証
- 削除前にチャンネルの存在を確認
- 削除操作の結果を返す
- データベース削除エラーを処理
チャンネルターミネータ関数
createChatChannelTerminator
適切なレスポンスフォーマットでチャンネル作成を終了します。
目的: 201ステータスで成功したチャンネル作成レスポンスをフォーマット
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: データとstatusCodeを含むフォーマット済みレスポンスオブジェクト
使用例:
// コンポジションでの使用:
compose(createChatChannel, createChatChannelTerminator);
主要機能:
- 成功した作成に対して201ステータスコードを返す
- データベース固有フィールドを削除
- フォーマット済みチャンネルデータを返す
normalizeChatChannelTerminator
データベース固有フィールドを削除してチャンネルデータを正規化します。
目的: APIレスポンス用のチャンネルデータをクリーンアップ
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: 正規化されたチャンネルオブジェクト
使用例:
// コンポジションでの使用:
compose(getChatChannelById, normalizeChatChannelTerminator);
主要機能:
- 結果がエラーの場合はエラーをスロー
- コンテキストにチャンネルが存在することを検証
- データベース_idフィールドを削除
- クリーンなチャンネルオブジェクトを返す
normalizeChatChannelsListTerminator
各アイテムからデータベース固有フィールドを削除してチャンネルリストを正規化します。
目的: 検証付きでAPIレスポンス用のチャンネル配列データをクリーンアップ
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: 正規化されたチャンネルオブジェクトの配列
使用例:
// コンポジションでの使用:
compose(findChatChannels, normalizeChatChannelsListTerminator);
主要機能:
- 全チャンネルから
_id
フィールドを削除 - channels配列の存在を検証
- channels配列をマップ
- クリーンなチャンネル配列を返す
deleteChatChannelTerminator
適切なステータスコードでチャンネル削除を終了します。
目的: 204ステータスで成功した削除レスポンスをフォーマット
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: 204 statusCodeを含むレスポンスオブジェクト
使用例:
// コンポジションでの使用:
compose(deleteChatChannel, deleteChatChannelTerminator);
主要機能:
- 成功した削除に対して204ステータスコードを返す
- 削除操作結果を検証
- 削除が失敗した場合はエラーをスロー
💬 メッセージハンドラー
コアメッセージ操作
createChatMessage
データベースに新しいチャットメッセージを作成します。
目的: 検証とエンティティ管理によるチャットメッセージ作成を処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- messageIdを含む成功またはエラー
使用例:
// ルートコンポジションでの使用:
const createMessageRoute = withRoute({
handler: compose(createChatMessage, nextHandler)
});
主要機能:
- リクエストボディの存在を検証
- メタデータ付きベースエンティティを作成
- 成功時にメッセージIDを返す
- データベース挿入エラーを処理
getChatMessageById
データベースからIDでチャットメッセージを取得します。
目的: 存在検証によるメッセージデータの取得
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- chatMessageを含む成功またはエラー
使用例:
// ルートコンポジションでの使用:
const getMessageRoute = withRoute({
handler: compose(getChatMessageById, nextHandler)
});
主要機能:
- メッセージIDの存在を検証
- メッセージの存在を確認
- 完全なメッセージオブジェクトを返す
- データベースクエリエラーを処理
findChatMessages
オプションのフィルター条件を使用してデータベースでチャットメッセージを検索します。
目的: フィルターサポートとソート機能によるメッセージクエリを処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- chatMessages配列を含む成功またはエラー
使用例:
// ルートコンポジションでの使用:
const findMessagesRoute = withRoute({
handler: compose(findChatMessages, nextHandler)
});
主要機能:
- オプションフィルターパラメータを受け入れ
- 作成日でメッセージをソート(新しい順)
- フィルターが提供されない場合は全メッセージを返す
- 複雑なMongoDBクエリをサポート
updateChatMessage
データベース内の既存のチャットメッセージを更新します。
目的: 検証と競合検出によるメッセージの更新を処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- 更新結果を含む成功またはエラー
使用例:
// ルートコンポジションでの使用:
const updateMessageRoute = withRoute({
handler: compose(updateChatMessage, nextHandler)
});
主要機能:
- メッセージIDとリクエストボディを検証
- 更新前にメッセージの存在を確認
- ベースエンティティメタデータを更新
- 更新操作の結果を返す
deleteChatMessage
IDでデータベースからチャットメッセージを削除します。
目的: 存在検証によるメッセージの安全な削除を処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- 削除結果を含む成功またはエラー
使用例:
// ルートコンポジションでの使用:
const deleteMessageRoute = withRoute({
handler: compose(deleteChatMessage, nextHandler)
});
主要機能:
- メッセージIDの存在を検証
- 削除前にメッセージの存在を確認
- 削除操作の結果を返す
- データベース削除エラーを処理
メッセージターミネータ関数
createChatMessageTerminator
APIレスポンス用のチャットメッセージ作成レスポンスをフォーマットします。
目的: 201ステータスで成功したメッセージ作成レスポンスをフォーマット
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: フォーマット済みチャットメッセージデータと201ステータスコードを含むオブジェクト
使用例:
// ルートコンポジションでの使用:
const createMessageRoute = withRoute({
handler: compose(createChatMessage, lift(createChatMessageTerminator))
});
主要機能:
- 成功した作成に対して201ステータスコードを返す
- データベース固有フィールドを削除
- フォーマット済みメッセージデータを返す
normalizeChatMessageTerminator
APIレスポンス用の単一チャットメッセージデータを正規化します。
目的: APIレスポンス用のメッセージデータをクリーンアップ
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: _idフィールドなしの正規化されたチャットメッセージオブジェクト
使用例:
// ルートコンポジションでの使用:
const getMessageRoute = withRoute({
handler: compose(getChatMessageById, lift(normalizeChatMessageTerminator))
});
主要機能:
- メッセージから
_id
フィールドを削除 - メッセージが見つからない場合はエラーをスロー
- クリーンなメッセージオブジェクトを返す
normalizeChatMessagesListTerminator
APIレスポンス用のチャットメッセージリストデータを正規化します。
目的: APIレスポンス用のメッセージ配列データをクリーンアップ
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: _idフィールドなしの正規化されたチャットメッセージオブジェクトの配列
使用例:
// ルートコンポジションでの使用:
const findMessagesRoute = withRoute({
handler: compose(findChatMessages, lift(normalizeChatMessagesListTerminator))
});
主要機能:
- 全メッセージから
_id
フィールドを削除 - メッセージ配列の存在を検証
- メッセージ配列をマップ
- クリーンなメッセージ配列を返す
deleteChatMessageTerminator
APIレスポンス用のチャットメッセージ削除レスポンスをフォーマットします。
目的: 204ステータスで成功した削除レスポンスをフォーマット
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: 成功した削除を示す204ステータスコードを含むオブジェクト
使用例:
// ルートコンポジションでの使用:
const deleteMessageRoute = withRoute({
handler: compose(deleteChatMessage, lift(deleteChatMessageTerminator))
});
主要機能:
- 成功した削除に対して204ステータスコードを返す
- 削除操作の結果を検証
- 削除が失敗した場合はエラーをスロー
🔔 サブスクリプションハンドラー
コアサブスクリプション操作
createChatSubscription
データベースに新しいサブスクリプションを作成します。
目的: 検証とエンティティ管理によるチャットサブスクリプション作成を処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- subscriptionIdを含む成功またはエラー
使用例:
// コンポジションでの使用:
compose(createChatSubscription, terminator);
主要機能:
- リクエストボディの存在を検証
- メタデータ付きベースエンティティを作成
- 成功時にサブスクリプションIDを返す
- データベース挿入エラーを処理
getChatSubscriptionById
IDで単一のサブスクリプションを取得します。
目的: 存在検証によるサブスクリプションデータの取得
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- subscriptionを含む成功またはエラー
使用例:
// コンポジションでの使用:
compose(getChatSubscriptionById, normalizeTerminator);
主要機能:
- サブスクリプションIDの存在を検証
- サブスクリプションの存在を確認
- 完全なサブスクリプションオブジェクトを返す
- データベースクエリエラーを処理
findChatSubscriptions
オプションのフィルタリングで複数のサブスクリプションを検索します。
目的: フィルターサポートによるサブスクリプションのクエリを処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- subscriptions配列を含む成功またはエラー
使用例:
// コンポジションでの使用:
compose(findChatSubscriptions, listTerminator);
主要機能:
- オプションフィルターパラメータを受け入れ
- フィルターが提供されない場合は全サブスクリプションを返す
- 複雑なMongoDBクエリをサポート
- データベースクエリエラーを処理
deleteChatSubscription
IDでサブスクリプションを削除します。
目的: 存在検証によるサブスクリプションの安全な削除を処理
パラメータ:
payload
: リクエストコンテキストとデータを含むRouteHandlerPayload
戻り値: Result<RouteHandlerPayload, Error>
- 削除結果を含む成功またはエラー
使用例:
// コンポジションでの使用:
compose(deleteChatSubscription, deleteTerminator);
主要機能:
- サブスクリプションIDの存在を検証
- 削除前にサブスクリプションの存在を確認
- 削除操作の結果を返す
- データベース削除エラーを処理
サブスクリプションターミネータ関数
createChatSubscriptionTerminator
適切なレスポンスフォーマットでサブスクリプション作成を終了します。
目的: 201ステータスで成功したサブスクリプション作成レスポンスをフォーマット
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: データとstatusCodeを含むフォーマット済みレスポンスオブジェクト
使用例:
// コンポジションでの使用:
compose(createChatSubscription, createChatSubscriptionTerminator);
主要機能:
- 成功した作成に対して201ステータスコードを返す
- データベース固有フィールドを削除
- フォーマット済みサブスクリプションデータを返す
normalizeChatSubscriptionTerminator
データベース固有フィールドを削除してサブスクリプションデータを正規化します。
目的: APIレスポンス用のサブスクリプションデータをクリーンアップ
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: 正規化されたサブスクリプションオブジェクト
使用例:
// コンポジションでの使用:
compose(getChatSubscriptionById, normalizeChatSubscriptionTerminator);
主要機能:
- 結果がエラーの場合はエラーをスロー
- コンテキストにサブスクリプションが存在することを検証
- データベース_idフィールドを削除
- クリーンなサブスクリプションオブジェクトを返す
normalizeChatSubscriptionsListTerminator
各アイテムからデータベース固有フィールドを削除してサブスクリプションリストを正規化します。
目的: 検証付きでAPIレスポンス用のサブスクリプション配列データをクリーンアップ
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: 正規化されたサブスクリプションオブジェクトの配列
使用例:
// コンポジションでの使用:
compose(findChatSubscriptions, normalizeChatSubscriptionsListTerminator);
主要機能:
- 全サブスクリプションから
_id
フィールドを削除 - subscriptions配列の存在を検証
- subscriptions配列をマップ
- クリーンなサブスクリプション配列を返す
deleteChatSubscriptionTerminator
適切なステータスコードでサブスクリプション削除を終了します。
目的: 204ステータスで成功した削除レスポンスをフォーマット
パラメータ:
result
: RouteHandlerPayloadまたはErrorを含む結果
戻り値: 204 statusCodeを含むレスポンスオブジェクト
使用例:
// コンポジションでの使用:
compose(deleteChatSubscription, deleteChatSubscriptionTerminator);
主要機能:
- 成功した削除に対して204ステータスコードを返す
- 削除操作結果を検証
- 削除が失敗した場合はエラーをスロー
🔗 関連ドキュメント
- チャットスキーマブロック - チャットデータ検証と契約
- チャットルートブロック - チャットHTTPエンドポイント定義
- チャットフィーチャーブロック - チャットコンポーズ機能
- チャットバリデーターブロック - チャット検証関数