🚀 チャット機能
チャット機能は、Nodeblocksアプリケーションでチャット管理操作の完全な事前構成機能を提供します。これらの機能は、スキーマ、ルート、ハンドラーを組み合わせて、適切なバリデーション、認証、エラーハンドリングを含む即座に使用可能なAPIエンドポイントを作成します。
🎯 概要
チャット機能は以下の目的で設計されています:
- チャット管理操作の完全なAPIエンドポイントの提供 - エンドポイント
- バリデーション済み操作のためのスキーマとルートの組み合わせ - バリデーション
- 認証と認可チェックの自動含める - セキュリティ
- 関数型合成パターンのサポート - 構成可能性
- ロギングとエラー管理のシームレスな処理 - エラーハンドリング
このドキュメントは3つの主要なサブセクションに整理されています:
- 📺 チャネル機能: チャットチャネルの管理(作成、読み取り、更新、削除、検索)
- 💬 メッセージ機能: チャットメッセージの処理(作成、読み取り、更新、削除、検索)
- 🔔 サブスクリプション機能: チャネルへのユーザーサブスクリプションの管理(作成、読み取り、削除、検索)
📋 機能構造
各チャット機能は一貫した合成パターンに従います:
- スキーマ: 入力データとパラメータをバリデーション
- ルート: ハンドラー付きHTTPエンドポイントを提供
- 合成:
compose関数を使用してスキーマとルートを組み合わせ
🔧 利用可能なチャット機能
📺 チャネル機能
createChannelFeature
バリデーションとルーティング付きで新しいチャットチャネルを作成します。
目的: 完全なバリデーションを含むチャネル作成を処理
構成:
- スキーマ:
createChatChannelSchema- nameとownerIdをバリデーション - ルート:
createChatChannelRoute- POST/channels作成ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.createChannelFeature, [{ dataStores: db }])));
APIエンドポイント: POST /api/channels
getChannelFeature
アクセス制御付きで個別のチャネルデータを取得します。
目的: 適切な認可付きでチャネル詳細を取得
構成:
- スキーマ:
getChatChannelSchema- パスパラメータをバリデーション - ルート:
getChatChannelRoute- GET/channels/:channelId取得ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.getChannelFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/channels/:channelId
findChannelsFeature
フィルタリングとページネーション付きでチャネルを検索してリスト表示します。
目的: 検索機能付きのチャネルリストを提供
構成:
- スキーマ:
findChatChannelsSchema- フィルタリング用のクエリパラメータをバリデーション - ルート:
findChatChannelsRoute- GET/channels検索とページネーション付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.findChannelsFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/channels
updateChannelFeature
バリデーションとアクセス制御付きでチャネル情報を更新します。
目的: 適切な認可付きでチャネルデータを変更
構成:
- スキーマ:
updateChatChannelSchema- オプションのnameをバリデーション - ルート:
updateChatChannelRoute- PATCH/channels/:channelId更新ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.updateChannelFeature, [{ dataStores: db }])));
APIエンドポイント: PATCH /api/channels/:channelId
deleteChannelFeature
適切な認可付きでチャネルを削除します。
目的: アクセス制御付きでチャネルを削除
構成:
- スキーマ:
deleteChatChannelSchema- パスパラメータをバリデーション - ルート:
deleteChatChannelRoute- DELETE/channels/:channelId削除ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.deleteChannelFeature, [{ dataStores: db }])));
APIエンドポイント: DELETE /api/channels/:channelId
getChannelMessagesFeature
スキーマバリデーションとルーティング付きのチャネルメッセージ取得機能。
目的: 完全なバリデーションを含む特定チャネルのすべてのメッセージ取得を処理
構成:
- スキーマ:
getChannelMessagesSchema- channelIdパスパラメータをバリデーション - ルート:
getChannelMessagesRoute- GET/channels/:channelId/messages取得ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// Direct usage:
app.use('/api', defService(getChannelMessagesFeature));
// With database (handlers need dataStores):
app.use('/api', defService(partial(getChannelMessagesFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/channels/:channelId/messages
レスポンス (200 OK): メッセージオブジェクトの配列
機能:
- ユーザー認証とチャネルサブスクリプションをバリデーション
- 指定されたチャネルのすべてのメッセージを取得
- クエリパラメータ経由でページネーションをサポート
- 欠落チャネルまたは不正アクセスに対する適切なエラーハンドリング
エラーレスポンス:
401: ユーザーが認証されていません403: ユーザーがチャネルにサブスクライブされていません404: チャネルが存在しません500: データベース操作が失敗しました
getChannelIconUploadUrlFeature
スキーマバリデーションとルーティング付きのチャットチャネルアイコンアップロードURL機能。
目的: 適切な認証と認可付きでチャットチャネルアイコン画像用の署名付きアップロードURLを生成。
構成:
- スキーマ:
getSignedImageUploadUrlSchema- 画像アップロード用のcontentTypeとファイルサイズをバリデーション - ルート:
getChatChannelIconUploadUrlRoute- GET/channels/:channelId/icon-upload-urlアップロードURL生成付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// Direct usage:
app.use('/api', defService(features.getChannelIconUploadUrlFeature));
// With database configuration:
app.use('/api', defService(
partial(features.getChannelIconUploadUrlFeature, [
{ dataStores: db, fileStorageDriver: storageDriver }
])
));
APIエンドポイント: GET /api/channels/:channelId/icon-upload-url
レスポンス (200 OK):
{
"objectId": "string",
"url": "string"
}
主な機能:
- セキュアなアップロードURL: クラウドストレージへの直接ファイルアップロード用の事前署名付きURLを生成
- ファイルタイプバリデーション: コンテンツタイプとファイルサイズ制約をバリデーション
- 一意のオブジェクトID: アップロードされたファイル用のUUIDベースのオブジェクト識別子を生成
- 認可制御: チャネル所有者と管理者へのアクセスを制限
- エラーハンドリング: ストレージとバリデーション失敗に対する包括的なエラーハンドリング
認可:
- 認証が必要
- チャネル所有者または管理者がアクセス可能
- 柔軟な権限チェックのために
someバリデーターを使用
バリデーションルール:
- パスパラメータ
channelIdが必要 - クエリパラメータ
contentTypeとcontentLengthがバリデーションされる - ファイルサイズは最大10MBに制限
- コンテンツタイプは有効な画像MIMEタイプである必要がある
エラーレスポンス:
400 Bad Request: 無効なクエリパラメータまたはファイル制約401 Unauthorized: 認証が必要403 Forbidden: 権限不足(チャネル所有者または管理者ではない)500 Internal Server Error: ファイルストレージサービスの失敗
ハンドラープロセス:
- ユーザー認証とチャネル所有権の権限をバリデーション
- ファイルアップロードパラメータ(コンテンツタイプ、サイズ)をバリデーション
- ファイル拡張子付きの一意のオブジェクトIDを生成
- ファイルストレージドライバーを使用して署名付きアップロードURLを作成
- クライアントアップロード用のオブジェクトIDと署名付きURLを返す
ユースケース:
- チャネルプロフィール画像のアップロード
- チャネルアバターの更新
- チャネルブランディングアセットの管理
- セキュアなファイルアップロード機能の提供
データフロー:
- 入力: チャネルID、コンテンツタイプ、コンテンツ長
- バリデーション: 認証、認可、ファイル制約
- 処理: UUID生成、ファイル拡張子抽出、URL署名
- 出力: オブジェクトIDと署名付きアップロードURL
パフォーマンスノート:
- URL生成は軽量で、ファイル操作を伴わない
- URL生成中にデータベース書き込みは発生しない
- 高頻度リクエストに適している
- ファイルストレージドライバーが実際のアップロードプロセスを処理
💬 メッセージ機能
createChatMessageFeature
バリデーションとルーティング付きで新しいチャットメッセージを作成します。
目的: 完全なバリデーションを含むメッセージ作成を処理
構成:
- スキーマ:
createChatMessageSchema- content、senderId、channelIdをバリデーション - ルート:
createChatMessageRoute- POST/messages作成ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.createChatMessageFeature, [{ dataStores: db }])));
APIエンドポイント: POST /api/messages
getChatMessageFeature
アクセス制御付きで個別のメッセージデータを取得します。
目的: 適切な認可付きでメッセージ詳細を取得
構成:
- スキーマ:
getChatMessageSchema- パスパラメータをバリデーション - ルート:
getChatMessageRoute- GET/messages/:messageId取得ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.getChatMessageFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/messages/:messageId
findChatMessagesFeature
フィルタリングとページネーション付きでメッセージを検索してリスト表示します。
目的: 検索機能付きのメッセージリストを提供
構成:
- スキーマ:
findChatMessagesSchema- フィルタリング用のクエリパラメータをバリデーション - ルート:
findChatMessagesRoute- GET/messages検索とページネーション付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.findChatMessagesFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/messages
updateChatMessageFeature
バリデーションとアクセス制御付きでメッセージコンテンツを更新します。
目的: 適切な認可付きでメッセージデータを変更
構成:
- スキーマ:
updateChatMessageSchema- オプションのcontentとmetadataをバリデーション - ルート:
updateChatMessageRoute- PATCH/messages/:messageId更新ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.updateChatMessageFeature, [{ dataStores: db }])));
APIエンドポイント: PATCH /api/messages/:messageId
deleteChatMessageFeature
適切な認可付きでメッセージを削除します。
目的: アクセス制御付きでメッセージを削除
構成:
- スキーマ:
deleteChatMessageSchema- パスパラメータをバリデーション - ルート:
deleteChatMessageRoute- DELETE/messages/:messageId削除ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.deleteChatMessageFeature, [{ dataStores: db }])));
APIエンドポイント: DELETE /api/messages/:messageId
getChatMessageAttachmentUrlFeature
スキーマバリデーションとルーティング付きのチャットメッセージ添付アップロードURL生成機能。
目的: 悪意のあるファイルタイプフィルタリング付きでチャットメッセージ添付用のセキュアなファイルアップロードURLを提供
構成:
- スキーマ:
getSignedFileUploadUrlSchema- ファイルアップロードURLリクエストパラメータ(contentType、contentLength)をバリデーション - ルート:
getChatMessageAttachmentUploadUrlRoute- GET/messages/:messageId/attachment-upload-urlURL生成ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// Direct usage with file storage driver:
app.use('/api', defService(partial(features.getChatMessageAttachmentUrlFeature, [{ fileStorageDriver }])));
// With database and file storage:
app.use('/api', defService(partial(features.getChatMessageAttachmentUrlFeature, [{
dataStores: db,
fileStorageDriver
}])));
APIエンドポイント: GET /api/messages/:messageId/attachment-upload-url
クエリパラメータ:
contentType: string(required) - ファイルのMIMEタイプ(安全なタイプに対してバリデーション)contentLength: integer(required) - バイト単位のファイルサイズ(最大10MB)
レスポンスボディ:
{
"objectId": "unique-file-id.png",
"url": "https://storage.googleapis.com/bucket/unique-file-id.png?signature=..."
}
主な機能:
- 危険なMIMEタイプフィルタリングによるセキュリティファーストアプローチ
- ファイルサイズバリデーション(最大10MB)
- メッセージ所有権の検証
- 時間制限付き署名付きURL
- MIMEタイプに基づく適切なファイル拡張子処理
エラーレスポンス:
400- 無効なコンテンツタイプまたはファイルサイズが制限を超えています401- 認証されていません403- このメッセージにアクセスする権限がありません500- ファイルストレージまたはサーバーエラー
注意事項:
- 危険なファイルタイプを除外(実行可能ファイル、スクリプト、アーカイブ)
- コンテンツタイプバリデーションに
mime-typesライブラリを使用 - サービス設定に
fileStorageDriverが必要 - クライアントがストレージへの直接アップロードに使用する署名付きURLを返す
createChatMessageAttachmentFeature
スキーマバリデーションとルーティング付きのチャットメッセージ添付作成機能。
目的: 自動ベースエンティティ生成付きで既存メッセージにファイル添付を追加できるようにする
構成:
- スキーマ:
createChatMessageAttachmentSchema- ファイル参照(objectId、type)をバリデーション - ルート:
createChatMessageAttachmentRoute- POST/messages/:messageId/attachments作成ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// Direct usage with database:
app.use('/api', defService(partial(features.createChatMessageAttachmentFeature, [{ dataStores: db }])));
// Full configuration:
app.use('/api', defService(partial(features.createChatMessageAttachmentFeature, [{
dataStores: db,
configuration
}])));
APIエンドポイント: POST /api/messages/:messageId/attachments
リクエストボディ:
{
"objectId": "550e8400-e29b-41d4-a716-446655440000",
"type": "image/png"
}
レスポンスボディ (status 201):
{
"objectId": "550e8400-e29b-41d4-a716-446655440000",
"type": "image/png",
"id": "generated-uuid",
"createdAt": "2023-10-15T10:30:00.000Z",
"updatedAt": "2023-10-15T10:30:00.000Z"
}
主な機能:
- 自動ベースエンティティフィールド生成(
id、createdAt、updatedAt) - メッセージ所有権バリデーション(送信者のみアクセス)
- objectIdのUUIDバリデーション
- アトミックMongoDB
$push操作 - 生成されたフィールド付きで完全な添付を返す
- 完全なエラーハンドリング
エラーレスポンス:
400- 無効なリクエストボディ(objectIdまたはtypeが欠落、無効なUUID)401- 認証されていません403- 認可されていません(メッセージ所有者ではない)404- メッセージが見つかりません500- データベースエラー
ワークフロー:
getChatMessageAttachmentUrlFeature経由でアップロードURLを取得- 署名付きURLにファイルをアップロード
- 返されたobjectIdで
createChatMessageAttachmentFeature経由で添付を作成 - 添付は自動生成されたフィールド付きでメッセージのattachments配列に追加される
注意事項:
- 添付を追加する前にメッセージが存在する必要があります
- 各添付は一意のIDとタイムスタンプを受け取ります
- 完全なファイルアップロードワークフローのために
getChatMessageAttachmentUrlFeatureと連携して動作します - メッセージ所有者は同じメッセージに複数の添付を追加できます
deleteChatMessageAttachmentFeature
スキーマバリデーションとルーティング付きのチャットメッセージ添付削除機能。
目的: メッセージからファイル添付を削除し、ストレージからも削除できるようにする
構成:
- スキーマ:
deleteChatMessageAttachmentSchema- messageIdとattachmentIdパスパラメータをバリデーション - ルート:
deleteChatMessageAttachmentRoute- DELETE/messages/:messageId/attachments/:attachmentId削除ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// Direct usage with database and file storage:
app.use('/api', defService(partial(features.deleteChatMessageAttachmentFeature, [{
dataStores: db,
fileStorageDriver
}])));
// Full configuration:
app.use('/api', defService(partial(features.deleteChatMessageAttachmentFeature, [{
dataStores: db,
fileStorageDriver,
configuration
}])));
APIエンドポイント: DELETE /api/messages/:messageId/attachments/:attachmentId
レスポンス: 成功時はコンテンツなし(ステータス204)
主な機能:
- メッセージのattachments配列から添付を削除
- ストレージから物理ファイルを削除
- 自動メッセージ
updatedAtタイムスタンプ更新 - 管理者または所有者の認可(管理者は任意のものを削除可能、所有者は自分のものを削除可能)
- アトミックMongoDB
$pull操作 - 完全なエラーハンドリング
エラーレスポンス:
401- 認証されていません403- 認可されていません(管理者またはメッセージ所有者ではない)404- メッセージが見つからないか、添付が見つかりません500- データベースエラーまたはファイルストレージエラー
使用例:
// Client-side deletion:
const response = await fetch(`/api/messages/${messageId}/attachments/${attachmentId}`, {
method: 'DELETE',
headers: {
'Authorization': 'Bearer <token>'
}
});
if (response.status === 204) {
// Attachment deleted successfully
}
注意事項:
- 一致する添付を持つメッセージが存在する必要があります
- データベース参照と物理ファイルの両方を削除します
- 管理者ユーザーは任意の添付を削除できます。通常のユーザーは自分のメッセージの添付のみ削除できます
- 完全な添付ライフサイクルのために
createChatMessageAttachmentFeatureと連携して動作します
streamChatMessagesFeature
スキーマバリデーション付きでWebSocket経由でリアルタイムにチャットメッセージをストリーミングします。
目的: 適切なバリデーション付きでクライアントへのリアルタイムメッセージストリーミングを有効化
構成:
- スキーマ:
streamChatMessagesSchema- ストリーミング用のchannelIdクエリパラメータをバリデーション - ルート:
streamChatMessagesRoute- WebSocket/messages/listenリアルタイムメッセージストリーミングハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database and WebSocket server configuration
app.use('/api', defService(
partial(features.streamChatMessagesFeature, [{ dataStores: db }]),
webSocketServer
));
WebSocket Endpoint: ws://localhost:3000/api/messages/listen?channelId={channelId}
クライアント例:
// Establish WebSocket connection
const ws = new WebSocket(
'ws://localhost:3000/api/messages/listen?channelId=channel123'
);
// Handle incoming messages
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
console.log('New message received:', message);
// message contains: id, channelId, senderId, content, createdAt, updatedAt
};
// Handle connection open
ws.onopen = () => {
console.log('Connected to chat stream');
};
// Handle errors
ws.onerror = (error) => {
console.error('WebSocket error:', error);
};
// Handle connection close
ws.onclose = (event) => {
console.log('Disconnected from chat stream');
};
サーバー設定:
import { WebSocketServer } from 'ws';
import { chatService } from '@nodeblocks/backend-sdk';
// Create WebSocket server
const wss = new WebSocketServer({ noServer: true });
// Register chat service with WebSocket support
app.use('/api/chat', chatService(
database,
config,
{ webSocketServer: wss }
));
// Upgrade HTTP server for WebSocket
server.on('upgrade', (request, socket, head) => {
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit('connection', ws, request);
});
});
機能:
- MongoDB変更ストリームを使用したリアルタイムメッセージストリーミング
- 自動メッセージ正規化(内部フィールドを削除)
- チャネル固有のフィルタリング(指定されたチャネルのメッセージのみ)
- channelIdパラメータのスキーマバリデーション
- WebSocketプロトコルサポート
エラーレスポンス:
400: channelIdパラメータが欠落または無効500: 変更ストリームの作成に失敗または不明なエラー
注意事項:
- 新しいメッセージのみがストリーミングされます(挿入操作)
- メッセージは送信前に自動的に正規化されます
- クライアントが切断するまで接続が開いたままになります
- WebSocket IP形式の修正待ちで認証バリデーターが保留中
🧩 メッセージテンプレート機能
createChatMessageTemplateFeature
バリデーションとルーティング付きで新しいチャットメッセージテンプレートを作成します。
目的: 再利用可能なメッセージテンプレートの作成を処理
構成:
- スキーマ:
createChatMessageTemplateSchema- contentとtitleをバリデーション;オプションのorganizationIdとpermissions - ルート:
createChatMessageTemplateRoute- POST/message-templates作成ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
app.use('/api', defService(partial(features.createChatMessageTemplateFeature, [{ dataStores: db }])));
APIエンドポイント: POST /api/message-templates
getChatMessageTemplateFeature
アクセス制御付きでIDによるチャットメッセージテンプレートを取得します。
目的: セキュアにテンプレートデータを取得
構成:
- スキーマ:
getChatMessageTemplateSchema- パスパラメータをバリデーション - ルート:
getChatMessageTemplateRoute- GET/message-templates/:messageTemplateId
使用例:
import { features } from '@nodeblocks/backend-sdk';
app.use('/api', defService(partial(features.getChatMessageTemplateFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/message-templates/:messageTemplateId
updateChatMessageTemplateFeature
部分データサポート付きで既存のチャットメッセージテンプレートを更新します。
目的: 適切な認可付きでコンテンツ更新のための既存メッセージテンプレートを変更
構成:
- スキーマ:
updateChatMessageTemplateSchema- パスパラメータと部分ボディをバリデーション - ルート:
updateChatMessageTemplateRoute- PATCH/message-templates/:messageTemplateId更新ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
app.use('/api', defService(partial(features.updateChatMessageTemplateFeature, [{ dataStores: db }])));
APIエンドポイント: PATCH /api/message-templates/:messageTemplateId
deleteChatMessageTemplateFeature
適切な認可付きでチャットメッセージテンプレートを削除します。
目的: アクセス制御とバリデーション付きでデータベースから既存のメッセージテンプレートを削除。
構成:
- スキーマ:
deleteChatMessageTemplateSchema- messageTemplateIdパスパラメータをバリデーション - ルート:
deleteChatMessageTemplateRoute- DELETE/message-templates/:messageTemplateId削除ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
app.use('/api', defService(partial(features.deleteChatMessageTemplateFeature, [{ dataStores: db }])));
APIエンドポイント: DELETE /api/message-templates/:messageTemplateId
レスポンス (204 No Content):
{}
主な機能:
- 認可制御: テンプレート所有者、組織管理者、またはシステム管理者へのアクセスを制限
- 安全な削除: 削除前にテンプレートの存在をバリデーション
- アトミック操作: MongoDBアトミック削除操作を使用
- エラーハンドリング: バリデーションとデータベース失敗に対する包括的なエラーハンドリング
認可:
- 認証が必要
- テンプレート所有者、組織管理者、またはシステム管理者がアクセス可能
エラーレスポンス:
401: Unauthorized - 無効または欠落している認証403: Forbidden - ユーザーにこのテンプレートを削除する権限がありません404: Not Found - テンプレートが存在しません500: Internal Server Error - データベースまたはシステムエラー
findChatMessageTemplatesFeature
スキーマバリデーションとルーティング付きのチャットメッセージテンプレートリスト機能。
目的: フィルタリング、ページネーション、データ正規化付きでチャットメッセージテンプレートをリスト表示
構成:
- スキーマ:
findChatMessageTemplatesSchema- ページネーションとクエリフィルターをバリデーション - ルート:
findChatMessageTemplatesRoute- GET/message-templatesリストハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// Direct usage:
app.use('/api', defService(findChatMessageTemplatesFeature));
// With database configuration:
app.use('/api', defService(partial(findChatMessageTemplatesFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/message-templates
リクエストパラメータ:
- クエリパラメータ:
page(optional): ページネーションのページ番号(デフォルト: 1)limit(optional): 1ページあたりのテンプレート数(デフォルト: 10)
レスポンス (200 - 成功):
{
"data": [
{
"id": "template-123",
"title": "Welcome Message",
"content": "Hello, welcome to our chat!",
"organizationId": "org-456",
"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
}
}
}
認可:
- 認証が必要
- 管理者ユーザーのみに制限(
checkIdentityType(['admin']))
エラーレスポンス:
401: Unauthorized - 無効または欠落している認証403: Forbidden - ユーザーが管理者ではありません404: Not Found - テンプレートが見つかりません(空の配列を返す、エラーではない)500: Internal Server Error - データベースまたはシステムエラー
findChatMessageTemplatesForOrganizationFeature
スキーマバリデーションとルーティング付きの組織用チャットメッセージテンプレートリスト機能。
目的: フィルタリング、ページネーション、データ正規化付きで特定の組織にスコープされたチャットメッセージテンプレートをリスト表示
構成:
- スキーマ:
findChatMessageTemplatesForOrganizationSchema- 組織IDパスパラメータとページネーションクエリパラメータをバリデーション - ルート:
findChatMessageTemplatesForOrganizationRoute- GET/organizations/:organizationId/message-templates組織固有のリストハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// Direct usage:
app.use('/api', defService(findChatMessageTemplatesForOrganizationFeature));
// With database configuration:
app.use('/api', defService(partial(findChatMessageTemplatesForOrganizationFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/organizations/:organizationId/message-templates
リクエストパラメータ:
- パスパラメータ:
organizationId(required): テンプレートを取得する対象組織ID
- クエリパラメータ:
page(optional): ページネーションのページ番号(デフォルト: 1)limit(optional): 1ページあたりのテンプレート数(デフォルト: 10)
レスポンス (200 - 成功):
{
"data": [
{
"id": "template-123",
"title": "Welcome Message",
"content": "Hello, welcome to our organization!",
"organizationId": "org-456",
"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
}
}
}
認可:
- 認証が必要
hasOrgRole(['owner', 'admin'])経由で'owner'または'admin'ロールを持つ組織メンバーに制限
エラーレスポンス:
401: Unauthorized - 無効または欠落している認証トークン403: Forbidden - ユーザーに組織アクセスがないか、ロール権限が不足しています404: Not Found - 組織が見つからないか、テンプレートが利用できません500: Internal Server Error - データベースまたは正規化エラー
主な機能:
- 組織スコープ: テンプレートは組織メンバーシップでフィルタリングされます
- ロールベースアクセス: 組織所有者と管理者のみがアクセス可能
- ページネーションサポート: 大きなテンプレートセット用のメタデータ付き完全なページネーション
- データ正規化: APIレスポンス用の自動ドキュメント正規化
🔔 サブスクリプション機能
createChatSubscriptionFeature
バリデーションとルーティング付きで新しいチャットサブスクリプションを作成します。
目的: 完全なバリデーションを含むサブスクリプション作成を処理
構成:
- スキーマ:
createChatSubscriptionSchema- channelIdとオプションフィールドをバリデーション - ルート:
createChatSubscriptionRoute- POST/subscriptions作成ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.createChatSubscriptionFeature, [{ dataStores: db }])));
APIエンドポイント: POST /api/subscriptions
getChatSubscriptionFeature
アクセス制御付きで個別のサブスクリプションデータを取得します。
目的: 適切な認可付きでサブスクリプション詳細を取得
構成:
- スキーマ:
getChatSubscriptionSchema- パスパラメータをバリデーション - ルート:
getChatSubscriptionRoute- GET/subscriptions/:subscriptionId取得ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.getChatSubscriptionFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/subscriptions/:subscriptionId
findChatSubscriptionsFeature
フィルタリングとページネーション付きでサブスクリプションを検索してリスト表示します。
目的: 検索機能付きのサブスクリプションリストを提供
構成:
- スキーマ:
findChatSubscriptionsSchema- フィルタリング用のクエリパラメータをバリデーション - ルート:
findChatSubscriptionsRoute- GET/subscriptions検索とページネーション付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.findChatSubscriptionsFeature, [{ dataStores: db }])));
APIエンドポイント: GET /api/subscriptions
deleteChatSubscriptionFeature
適切な認可付きでサブスクリプションを削除します。
目的: アクセス制御付きでサブスクリプションを削除
構成:
- スキーマ:
deleteChatSubscriptionSchema- パスパラメータをバリデーション - ルート:
deleteChatSubscriptionRoute- DELETE/subscriptions/:subscriptionId削除ハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.deleteChatSubscriptionFeature, [{ dataStores: db }])));
APIエンドポイント: DELETE /api/subscriptions/:subscriptionId
upsertChatChannelReadStateFeature
スキーマバリデーションとルーティング付きのチャットチャネル読み取り状態アップサート機能。
目的: 完全なバリデーションを含むチャネル読み取り状態のアップサートを処理
構成:
- スキーマ:
upsertChatChannelReadStateSchema- チャネル読み取り状態アップサートデータをバリデーション - ルート:
upsertChatChannelReadStateRoute- PUT/channels/:channelId/read-stateアップサートハンドラー付き
使用例:
import { features } from '@nodeblocks/backend-sdk';
// Direct usage:
app.use('/api', defService(upsertChatChannelReadStateFeature));
// With database (handlers need dataStores):
app.use('/api', defService(partial(upsertChatChannelReadStateFeature, [{ dataStores: db }])));
APIエンドポイント: PUT /api/channels/:channelId/read-state
リクエストボディ:
{
identityId: string; // required - user identity ID
lastReadMessageId: string; // required - last read message ID
}
レスポンス (204 No Content): アップサート成功時は空のレスポンスボディ
機能:
- 自動アップサートロジック(存在に基づいて作成または更新)
- チャネルの存在とユーザーサブスクリプションをバリデーション
- 最後に読み取ったメッセージの存在をバリデーション
- ユーザーが自分の読み取り状態のみを更新できることを確保
- 自動タイムスタンプ管理
- 欠落リソースに対する適切なエラーハンドリング
エラーレスポンス:
401: ユーザーが認証されていません403: ユーザーがチャネルにサブスクライブされていないか、別のユーザーの読み取り状態を更新しようとしています404: チャネルまたは最後に読み取ったメッセージが見つかりません500: データベース操作が失敗しました