メインコンテンツまでスキップ
バージョン: 0.9.0 (最新)

🚀 チャット機能

チャット機能は、Nodeblocksアプリケーションでチャット管理操作の完全な事前構成機能を提供します。これらの機能は、スキーマ、ルート、ハンドラーを組み合わせて、適切なバリデーション、認証、エラーハンドリングを含む即座に使用可能なAPIエンドポイントを作成します。


🎯 概要

チャット機能は以下の目的で設計されています:

  • チャット管理操作の完全なAPIエンドポイントの提供 - エンドポイント
  • バリデーション済み操作のためのスキーマとルートの組み合わせ - バリデーション
  • 認証と認可チェックの自動含める - セキュリティ
  • 関数型合成パターンのサポート - 構成可能性
  • ロギングとエラー管理のシームレスな処理 - エラーハンドリング

このドキュメントは3つの主要なサブセクションに整理されています:

  • 📺 チャネル機能: チャットチャネルの管理(作成、読み取り、更新、削除、検索)
  • 💬 メッセージ機能: チャットメッセージの処理(作成、読み取り、更新、削除、検索)
  • 🔔 サブスクリプション機能: チャネルへのユーザーサブスクリプションの管理(作成、読み取り、削除、検索)

📋 機能構造

各チャット機能は一貫した合成パターンに従います:

  • スキーマ: 入力データとパラメータをバリデーション
  • ルート: ハンドラー付きHTTPエンドポイントを提供
  • 合成: compose関数を使用してスキーマとルートを組み合わせ

🔧 利用可能なチャット機能

📺 チャネル機能

createChannelFeature

バリデーションとルーティング付きで新しいチャットチャネルを作成します。

目的: 完全なバリデーションを含むチャネル作成を処理

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.createChannelFeature, [{ dataStores: db }])));

APIエンドポイント: POST /api/channels


getChannelFeature

アクセス制御付きで個別のチャネルデータを取得します。

目的: 適切な認可付きでチャネル詳細を取得

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.getChannelFeature, [{ dataStores: db }])));

APIエンドポイント: GET /api/channels/:channelId


findChannelsFeature

フィルタリングとページネーション付きでチャネルを検索してリスト表示します。

目的: 検索機能付きのチャネルリストを提供

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.findChannelsFeature, [{ dataStores: db }])));

APIエンドポイント: GET /api/channels


updateChannelFeature

バリデーションとアクセス制御付きでチャネル情報を更新します。

目的: 適切な認可付きでチャネルデータを変更

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.updateChannelFeature, [{ dataStores: db }])));

APIエンドポイント: PATCH /api/channels/:channelId


deleteChannelFeature

適切な認可付きでチャネルを削除します。

目的: アクセス制御付きでチャネルを削除

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.deleteChannelFeature, [{ dataStores: db }])));

APIエンドポイント: DELETE /api/channels/:channelId


getChannelMessagesFeature

スキーマバリデーションとルーティング付きのチャネルメッセージ取得機能。

目的: 完全なバリデーションを含む特定チャネルのすべてのメッセージ取得を処理

構成:

使用例:

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を生成。

構成:

使用例:

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が必要
  • クエリパラメータcontentTypecontentLengthがバリデーションされる
  • ファイルサイズは最大10MBに制限
  • コンテンツタイプは有効な画像MIMEタイプである必要がある

エラーレスポンス:

  • 400 Bad Request: 無効なクエリパラメータまたはファイル制約
  • 401 Unauthorized: 認証が必要
  • 403 Forbidden: 権限不足(チャネル所有者または管理者ではない)
  • 500 Internal Server Error: ファイルストレージサービスの失敗

ハンドラープロセス:

  1. ユーザー認証とチャネル所有権の権限をバリデーション
  2. ファイルアップロードパラメータ(コンテンツタイプ、サイズ)をバリデーション
  3. ファイル拡張子付きの一意のオブジェクトIDを生成
  4. ファイルストレージドライバーを使用して署名付きアップロードURLを作成
  5. クライアントアップロード用のオブジェクトIDと署名付きURLを返す

ユースケース:

  • チャネルプロフィール画像のアップロード
  • チャネルアバターの更新
  • チャネルブランディングアセットの管理
  • セキュアなファイルアップロード機能の提供

データフロー:

  • 入力: チャネルID、コンテンツタイプ、コンテンツ長
  • バリデーション: 認証、認可、ファイル制約
  • 処理: UUID生成、ファイル拡張子抽出、URL署名
  • 出力: オブジェクトIDと署名付きアップロードURL

パフォーマンスノート:

  • URL生成は軽量で、ファイル操作を伴わない
  • URL生成中にデータベース書き込みは発生しない
  • 高頻度リクエストに適している
  • ファイルストレージドライバーが実際のアップロードプロセスを処理

💬 メッセージ機能

createChatMessageFeature

バリデーションとルーティング付きで新しいチャットメッセージを作成します。

目的: 完全なバリデーションを含むメッセージ作成を処理

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.createChatMessageFeature, [{ dataStores: db }])));

APIエンドポイント: POST /api/messages


getChatMessageFeature

アクセス制御付きで個別のメッセージデータを取得します。

目的: 適切な認可付きでメッセージ詳細を取得

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.getChatMessageFeature, [{ dataStores: db }])));

APIエンドポイント: GET /api/messages/:messageId


findChatMessagesFeature

フィルタリングとページネーション付きでメッセージを検索してリスト表示します。

目的: 検索機能付きのメッセージリストを提供

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.findChatMessagesFeature, [{ dataStores: db }])));

APIエンドポイント: GET /api/messages


updateChatMessageFeature

バリデーションとアクセス制御付きでメッセージコンテンツを更新します。

目的: 適切な認可付きでメッセージデータを変更

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.updateChatMessageFeature, [{ dataStores: db }])));

APIエンドポイント: PATCH /api/messages/:messageId


deleteChatMessageFeature

適切な認可付きでメッセージを削除します。

目的: アクセス制御付きでメッセージを削除

構成:

使用例:

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を提供

構成:

使用例:

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

スキーマバリデーションとルーティング付きのチャットメッセージ添付作成機能。

目的: 自動ベースエンティティ生成付きで既存メッセージにファイル添付を追加できるようにする

構成:

使用例:

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"
}

主な機能:

  • 自動ベースエンティティフィールド生成(idcreatedAtupdatedAt
  • メッセージ所有権バリデーション(送信者のみアクセス)
  • objectIdのUUIDバリデーション
  • アトミックMongoDB $push操作
  • 生成されたフィールド付きで完全な添付を返す
  • 完全なエラーハンドリング

エラーレスポンス:

  • 400 - 無効なリクエストボディ(objectIdまたはtypeが欠落、無効なUUID)
  • 401 - 認証されていません
  • 403 - 認可されていません(メッセージ所有者ではない)
  • 404 - メッセージが見つかりません
  • 500 - データベースエラー

ワークフロー:

  1. getChatMessageAttachmentUrlFeature経由でアップロードURLを取得
  2. 署名付きURLにファイルをアップロード
  3. 返されたobjectIdでcreateChatMessageAttachmentFeature経由で添付を作成
  4. 添付は自動生成されたフィールド付きでメッセージのattachments配列に追加される

注意事項:

  • 添付を追加する前にメッセージが存在する必要があります
  • 各添付は一意のIDとタイムスタンプを受け取ります
  • 完全なファイルアップロードワークフローのためにgetChatMessageAttachmentUrlFeatureと連携して動作します
  • メッセージ所有者は同じメッセージに複数の添付を追加できます

deleteChatMessageAttachmentFeature

スキーマバリデーションとルーティング付きのチャットメッセージ添付削除機能。

目的: メッセージからファイル添付を削除し、ストレージからも削除できるようにする

構成:

使用例:

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

バリデーションとルーティング付きで新しいチャットメッセージテンプレートを作成します。

目的: 再利用可能なメッセージテンプレートの作成を処理

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';

app.use('/api', defService(partial(features.createChatMessageTemplateFeature, [{ dataStores: db }])));

APIエンドポイント: POST /api/message-templates


getChatMessageTemplateFeature

アクセス制御付きでIDによるチャットメッセージテンプレートを取得します。

目的: セキュアにテンプレートデータを取得

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';

app.use('/api', defService(partial(features.getChatMessageTemplateFeature, [{ dataStores: db }])));

APIエンドポイント: GET /api/message-templates/:messageTemplateId


updateChatMessageTemplateFeature

部分データサポート付きで既存のチャットメッセージテンプレートを更新します。

目的: 適切な認可付きでコンテンツ更新のための既存メッセージテンプレートを変更

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';

app.use('/api', defService(partial(features.updateChatMessageTemplateFeature, [{ dataStores: db }])));

APIエンドポイント: PATCH /api/message-templates/:messageTemplateId


deleteChatMessageTemplateFeature

適切な認可付きでチャットメッセージテンプレートを削除します。

目的: アクセス制御とバリデーション付きでデータベースから既存のメッセージテンプレートを削除。

構成:

使用例:

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

スキーマバリデーションとルーティング付きのチャットメッセージテンプレートリスト機能。

目的: フィルタリング、ページネーション、データ正規化付きでチャットメッセージテンプレートをリスト表示

構成:

使用例:

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

スキーマバリデーションとルーティング付きの組織用チャットメッセージテンプレートリスト機能。

目的: フィルタリング、ページネーション、データ正規化付きで特定の組織にスコープされたチャットメッセージテンプレートをリスト表示

構成:

使用例:

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

バリデーションとルーティング付きで新しいチャットサブスクリプションを作成します。

目的: 完全なバリデーションを含むサブスクリプション作成を処理

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.createChatSubscriptionFeature, [{ dataStores: db }])));

APIエンドポイント: POST /api/subscriptions


getChatSubscriptionFeature

アクセス制御付きで個別のサブスクリプションデータを取得します。

目的: 適切な認可付きでサブスクリプション詳細を取得

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.getChatSubscriptionFeature, [{ dataStores: db }])));

APIエンドポイント: GET /api/subscriptions/:subscriptionId


findChatSubscriptionsFeature

フィルタリングとページネーション付きでサブスクリプションを検索してリスト表示します。

目的: 検索機能付きのサブスクリプションリストを提供

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.findChatSubscriptionsFeature, [{ dataStores: db }])));

APIエンドポイント: GET /api/subscriptions


deleteChatSubscriptionFeature

適切な認可付きでサブスクリプションを削除します。

目的: アクセス制御付きでサブスクリプションを削除

構成:

使用例:

import { features } from '@nodeblocks/backend-sdk';


// With database configuration
app.use('/api', defService(partial(features.deleteChatSubscriptionFeature, [{ dataStores: db }])));

APIエンドポイント: DELETE /api/subscriptions/:subscriptionId


upsertChatChannelReadStateFeature

スキーマバリデーションとルーティング付きのチャットチャネル読み取り状態アップサート機能。

目的: 完全なバリデーションを含むチャネル読み取り状態のアップサートを処理

構成:

使用例:

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: データベース操作が失敗しました