⚙️ ユーザーハンドラー
ユーザーハンドラーは、Nodeblocksアプリケーションでユーザー管理操作のためのコアビジネスロジック関数を提供します。これらのハンドラーは、ユーザーデータベース操作、データ変換、レスポンスフォーマット化の一般的なパターンをカプセル化します。
🎯 概要
ユーザーハンドラーは以下の目的で設計されています:
- ユーザービジネスロジックのカプセル化 - 再利用可能な関数として
- ユーザーデータベース操作の処理 - 適切なエラー管理で
- ユーザーデータの変換 - 異なるフォーマット間で
- 型安全性の確保 - TypeScript統合で
- 他のユーザーブロックとのコンポジションのサポート - 他のユーザーブロックとのコンポジションをサポート
📋 ユーザーハンドラータイプ
ユーザー非同期ハンドラー
非同期ユーザー操作を実行する関数(データベース呼び出し、APIリクエストなど)。
ユーザー同期ハンドラー
同期ユーザー操作を実行する関数(データ変換、バリデーションなど)。
ユーザーターミネーターハンドラー
最終的なユーザーレスポンスをフォーマットして返す関数。
🔧 利用可能なユーザーハンドラー
createUser
データベースに新しいユーザーを作成します。
目的: バリデーションとエンティティ管理を含むユーザーの作成を処理します
パラメータ:
payload:RouteHandlerPayload- リクエストコンテキストとデータを含むparams.requestBody: ユーザー作成データ(名前、メールなど)context.db: データベース接続
戻り値: Result<RouteHandlerPayload, Error> - userIdまたはエラーを含む成功
ペイロード要件:
params.requestBodyはユーザーデータ(名前、メールなど)を含む必要がありますcontext.dbはデータベース操作で利用可能である必要があります
主な機能:
- リクエストボディが存在し、空でないことをバリデーションします
- タイムスタンプとIDを含む基本エンティティを作成します
- データベースにユーザーを挿入します
- 成功時にuserIdを返します
- データベースエラーを適切に処理します
使用例:
import { handlers } from '@nodeblocks/backend-sdk';
const { createUser } = handlers;
// Use in composition
const userPipeline = compose(createUser, terminator);
getUserById
IDで単一のユーザーを取得します。
目的: 存在バリデーション付きでユーザーデータを取得します
パラメータ:
payload:RouteHandlerPayload- リクエストコンテキストとデータを含むparams.requestParams.profileIdまたはcontext.data.profileId: 取得するプロフィールIDcontext.db: データベース接続
戻り値: Result<RouteHandlerPayload, Error> - ユーザーまたはエラーを含む成功
ペイロード要件:
- プロフィールIDは
params.requestParams.profileIdまたはcontext.data.profileIdで提供される必要があります context.dbはデータベース操作で利用可能である必要があります
主な機能:
- userIdが提供されていることをバリデーションします
- データベースでIDでユーザーを検索します
- ユーザーが見つからない場合、404を返します
- 成功時にユーザーデータを返します
- データベースエラーを適切に処理します
使用例:
import { handlers } from '@nodeblocks/backend-sdk';
const { getUserById } = handlers;
// Use in composition
const userPipeline = compose(getUserById, normalizeTerminator);
findUsers
オプショナルフィルタリング付きで複数のユーザーを検索します。
目的: フィルターサポート付きでユーザーのクエリを処理します
パラメータ:
payload:RouteHandlerPayload- リクエストコンテキストとデータを含むparams.requestQuery: ユーザー用のオプショナルフィルター条件context.db: データベース接続
戻り値: Result<RouteHandlerPayload, Error> - ユーザー配列またはエラーを含む成功
ペイロード要件:
params.requestQueryはオプショナル - 提供された場合、MongoDBフィルターとして使用されますcontext.dbはデータベース操作で利用可能である必要があります
主な機能:
- リクエストクエリからオプショナルフィルターを受け入れます
- フィルターが提供されない場合、すべてのユーザーを返します
- ユーザーの配列を返します
- データベースエラーを適切に処理します
使用例:
import { handlers } from '@nodeblocks/backend-sdk';
const { findUsers } = handlers;
// Use in composition
const userPipeline = compose(findUsers, listTerminator);
updateUser
IDで既存のユーザーを更新します。
目的: バリデーションと競合検出を含むユーザーの更新を処理します
パラメータ:
payload:RouteHandlerPayload- リクエストコンテキストとデータを含むparams.requestParams.profileIdまたはcontext.data.profileId: 更新するプロフィールIDparams.requestBody: 更新するユーザーデータcontext.db: データベース接続
戻り値: Result<RouteHandlerPayload, Error> - 更新結果またはエラーを含む成功
ペイロード要件:
- プロフィールIDは
params.requestParams.profileIdまたはcontext.data.profileIdで提供される必要があります params.requestBodyは更新するユーザーデータを含む必要がありますcontext.dbはデータベース操作で利用可能である必要があります
主な機能:
- userIdが提供されていることをバリデーションします
- リクエストボディが存在し、空でないことをバリデーションします
- タイムスタンプを含む基本エンティティを更新します
- 更新前にユーザーが存在するかチェックします
- 成功時に更新結果を返します
- 見つからない場合と更新失敗を処理します
使用例:
import { handlers } from '@nodeblocks/backend-sdk';
const { updateUser } = handlers;
// Use in composition
const userPipeline = compose(updateUser, terminator);
deleteUser
IDでユーザーを削除します。
目的: 存在バリデーション付きでユーザーの安全な削除を処理します
パラメータ:
payload:RouteHandlerPayload- リクエストコンテキストとデータを含むparams.requestParams.profileIdまたはcontext.data.profileId: 削除するプロフィールIDcontext.db: データベース接続
戻り値: Result<RouteHandlerPayload, Error> - 削除結果またはエラーを含む成功
ペイロード要件:
- プロフィールIDは
params.requestParams.profileIdまたはcontext.data.profileIdで提供される必要があります context.dbはデータベース操作で利用可能である必要があります
主な機能:
- userIdが提供されていることをバリデーションします
- データベースからIDでユーザーを削除します
- ユーザーが見つからない場合、404を返します
- 成功時に削除結果を返します
- データベースエラーを適切に処理します
使用例:
import { handlers } from '@nodeblocks/backend-sdk';
const { deleteUser } = handlers;
// Use in composition
const userPipeline = compose(deleteUser, deleteTerminator);
🎯 ユーザーターミネーターハンドラー
normalizeUserTerminator
データベース固有のフィールドを削除してユーザーデータを正規化します。
目的: APIレスポンス用にユーザーデータをクリーンアップします
パラメータ:
result:Result<RouteHandlerPayload, Error>- ペイロードまたはエラーを含むResultcontext.data.user: 前のハンドラーからのユーザーオブジェクト
戻り値: 正規化されたユーザーオブジェクト
ペイロード要件:
context.data.userは前のハンドラーから利用可能である必要があります
使用例:
import { handlers } from '@nodeblocks/backend-sdk';
const { normalizeUserTerminator } = handlers;
// Use in composition
const userPipeline = compose(getUserById, normalizeUserTerminator);
normalizeUsersListTerminator
各アイテムからデータベース固有のフィールドを削除してユーザーリストを正規化します。
目的: APIレスポンス用にユーザー配列データをクリーンアップします
パラメータ:
result:Result<RouteHandlerPayload, Error>- ペイロードまたはエラーを含むResultcontext.data.users: 前のハンドラーからのユーザーオブジェクトの配列
戻り値: 正規化されたユーザーオブジェクトの配列
ペイロード要件:
context.data.usersは前のハンドラーから利用可能である必要があります
使用例:
import { handlers } from '@nodeblocks/backend-sdk';
const { normalizeUsersListTerminator } = handlers;
// Use in composition
const userPipeline = compose(findUsers, normalizeUsersListTerminator);
deleteUserTerminator
適切なステータスコードでユーザー削除を終了します。
目的: 204ステータスで成功した削除レスポンスをフォーマットします
パラメータ:
result:Result<RouteHandlerPayload, Error>- ペイロードまたはエラーを含むResultcontext.data.deleteUser: 前のハンドラーからの削除結果
戻り値: 204 statusCodeを含むレスポンスオブジェクト
ペイロード要件:
context.data.deleteUserは前のハンドラーから利用可能である必要があります
使用例:
import { handlers } from '@nodeblocks/backend-sdk';
const { deleteUserTerminator } = handlers;
// Use in composition
const userPipeline = compose(deleteUser, deleteUserTerminator);