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

⚙️ ユーザーハンドラー

ユーザーハンドラーは、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: 取得するプロフィールID
    • context.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: 更新するプロフィールID
    • params.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: 削除するプロフィールID
    • context.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> - ペイロードまたはエラーを含むResult
    • context.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> - ペイロードまたはエラーを含むResult
    • context.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> - ペイロードまたはエラーを含むResult
    • context.data.deleteUser: 前のハンドラーからの削除結果

戻り値: 204 statusCodeを含むレスポンスオブジェクト

ペイロード要件:

  • context.data.deleteUserは前のハンドラーから利用可能である必要があります

使用例:

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

const { deleteUserTerminator } = handlers;

// Use in composition
const userPipeline = compose(deleteUser, deleteUserTerminator);