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

⚙️ カテゴリハンドラー

カテゴリハンドラーは、Nodeblocksアプリケーションでカテゴリ管理操作のためのコアビジネスロジック関数を提供します。これらのハンドラーは、カテゴリデータベース操作、データ変換、レスポンスフォーマットの一般的なパターンをカプセル化します。


🎯 概要

カテゴリハンドラーは以下の目的で設計されています:

  • 再利用可能な関数でカテゴリビジネスロジックをカプセル化
  • 適切なエラー管理でカテゴリデータベース操作を処理
  • 異なる形式間でカテゴリデータを変換
  • TypeScript統合で型安全性を確保
  • 他のカテゴリブロックとの合成をサポート

📋 カテゴリハンドラータイプ

カテゴリ非同期ハンドラー

非同期カテゴリ操作(データベース呼び出し、APIリクエストなど)を実行する関数。

カテゴリ同期ハンドラー

同期カテゴリ操作(データ変換、バリデーションなど)を実行する関数。

カテゴリターミネーターハンドラー

最終的なカテゴリレスポンスをフォーマットして返す関数。


🔧 利用可能なカテゴリハンドラー

createCategory

データベースに新しいカテゴリを作成します。

目的: バリデーションとエンティティ管理を含むカテゴリの作成を処理

パラメータ:

  • payload: RouteHandlerPayload - リクエストコンテキストとデータを含む
    • params.requestBody: カテゴリ作成データ
    • context.db: データベース接続

戻り値: Result<RouteHandlerPayload, Error> - categoryIdまたはエラーを含む成功

ペイロード要件:

  • params.requestBodyにカテゴリデータが含まれている必要があります
  • context.dbがデータベース操作で利用可能である必要があります

主な機能:

  • リクエストボディが存在し、空でないことを検証
  • タイムスタンプとIDでベースエンティティを作成
  • データベースにカテゴリを挿入
  • 成功時にcategoryIdを返す
  • データベースエラーを適切に処理

使用例:

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

const { createCategory } = handlers;

// Use in composition
const categoryPipeline = compose(categorySchema, validateRequest, createCategory, terminator);

getCategoryById

IDで単一のカテゴリを取得します。

目的: 存在検証でカテゴリデータを取得

パラメータ:

  • payload: RouteHandlerPayload - リクエストコンテキストとデータを含む
    • params.requestParams.categoryIdまたはcontext.data.categoryId: 取得するカテゴリID
    • context.db: データベース接続

戻り値: Result<RouteHandlerPayload, Error> - カテゴリまたはエラーを含む成功

ペイロード要件:

  • カテゴリIDはparams.requestParams.categoryIdまたはcontext.data.categoryIdで提供される必要があります
  • context.dbがデータベース操作で利用可能である必要があります

主な機能:

  • categoryIdが提供されていることを検証
  • データベースでIDでカテゴリを検索
  • カテゴリが見つからない場合は404を返す
  • 成功時にカテゴリデータを返す
  • データベースエラーを適切に処理

使用例:

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

const { getCategoryById } = handlers;

// Use in composition
const categoryPipeline = compose(idSchema, validateId, getCategoryById, normalizeTerminator);

findCategories

オプションのフィルタリングで複数のカテゴリを検索します。

目的: フィルターサポートでカテゴリのクエリを処理

パラメータ:

  • payload: RouteHandlerPayload - リクエストコンテキストとデータを含む
    • params.requestQuery: カテゴリのオプションのフィルター条件
    • context.db: データベース接続

戻り値: Result<RouteHandlerPayload, Error> - カテゴリ配列またはエラーを含む成功

ペイロード要件:

  • params.requestQueryはオプション - 提供された場合、MongoDBフィルターとして使用
  • context.dbがデータベース操作で利用可能である必要があります

主な機能:

  • リクエストクエリからオプションのフィルターを受け入れる
  • フィルターが提供されない場合はすべてのカテゴリを返す
  • カテゴリの配列を返す
  • データベースエラーを適切に処理

使用例:

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

const { findCategories } = handlers;

// Use in composition
const categoryPipeline = compose(findCategories, listTerminator);

updateCategory

IDで既存のカテゴリを更新します。

目的: バリデーションと競合検出でカテゴリの更新を処理

パラメータ:

  • payload: RouteHandlerPayload - リクエストコンテキストとデータを含む
    • params.requestParams.categoryIdまたはcontext.data.categoryId: 更新するカテゴリID
    • params.requestBody: 更新するカテゴリデータ
    • context.db: データベース接続

戻り値: Result<RouteHandlerPayload, Error> - 更新結果またはエラーを含む成功

ペイロード要件:

  • カテゴリIDはparams.requestParams.categoryIdまたはcontext.data.categoryIdで提供される必要があります
  • params.requestBodyに更新するカテゴリデータが含まれている必要があります
  • context.dbがデータベース操作で利用可能である必要があります

主な機能:

  • categoryIdが提供されていることを検証
  • リクエストボディが存在し、空でないことを検証
  • タイムスタンプでベースエンティティを更新
  • 更新前にカテゴリが存在するかチェック
  • 成功時に更新結果を返す
  • 見つからない場合と更新失敗を処理

使用例:

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

const { updateCategory } = handlers;

// Use in composition
const categoryPipeline = compose(updateCategory, terminator);

deleteCategory

IDでカテゴリを削除します。

目的: 存在検証でカテゴリの安全な削除を処理

パラメータ:

  • payload: RouteHandlerPayload - リクエストコンテキストとデータを含む
    • params.requestParams.categoryIdまたはcontext.data.categoryId: 削除するカテゴリID
    • context.db: データベース接続

戻り値: Result<RouteHandlerPayload, Error> - 削除結果またはエラーを含む成功

ペイロード要件:

  • カテゴリIDはparams.requestParams.categoryIdまたはcontext.data.categoryIdで提供される必要があります
  • context.dbがデータベース操作で利用可能である必要があります

主な機能:

  • categoryIdが提供されていることを検証
  • データベースからIDでカテゴリを削除
  • カテゴリが見つからない場合は404を返す
  • 成功時に削除結果を返す
  • データベースエラーを適切に処理

使用例:

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

const { deleteCategory } = handlers;

// Use in composition
const categoryPipeline = compose(deleteCategory, deleteTerminator);

enableCategory

ステータスをactiveに設定してカテゴリを有効化します。

目的: ステータス検証でカテゴリの有効化を処理

パラメータ:

  • payload: RouteHandlerPayload - リクエストコンテキストとデータを含む
    • params.requestParams.categoryIdまたはcontext.data.categoryId: 有効化するカテゴリID
    • context.db: データベース接続

戻り値: Result<RouteHandlerPayload, Error> - 有効化結果またはエラーを含む成功

ペイロード要件:

  • カテゴリIDはparams.requestParams.categoryIdまたはcontext.data.categoryIdで提供される必要があります
  • context.dbがデータベース操作で利用可能である必要があります

主な機能:

  • categoryIdが提供されていることを検証
  • カテゴリステータスを'active'に設定
  • 有効化前にカテゴリが存在するかチェック
  • 成功時に有効化結果を返す
  • 見つからない場合と有効化失敗を処理

使用例:

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

const { enableCategory } = handlers;

// Use in composition
const categoryPipeline = compose(enableCategory, enableTerminator);

disableCategory

ステータスをinactiveに設定してカテゴリを無効化します。

目的: ステータス検証でカテゴリの無効化を処理

パラメータ:

  • payload: RouteHandlerPayload - リクエストコンテキストとデータを含む
    • params.requestParams.categoryIdまたはcontext.data.categoryId: 無効化するカテゴリID
    • context.db: データベース接続

戻り値: Result<RouteHandlerPayload, Error> - 無効化結果またはエラーを含む成功

ペイロード要件:

  • カテゴリIDはparams.requestParams.categoryIdまたはcontext.data.categoryIdで提供される必要があります
  • context.dbがデータベース操作で利用可能である必要があります

主な機能:

  • categoryIdが提供されていることを検証
  • カテゴリステータスを'inactive'に設定
  • 無効化前にカテゴリが存在するかチェック
  • 成功時に無効化結果を返す
  • 見つからない場合と無効化失敗を処理

使用例:

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

const { disableCategory } = handlers;

// Use in composition
const categoryPipeline = compose(disableCategory, disableTerminator);

🎯 カテゴリターミネーターハンドラー

normalizeCategoryTerminator

データベース固有のフィールドを削除してカテゴリデータを正規化します。

目的: APIレスポンス用にカテゴリデータをクリーンアップ

パラメータ:

  • result: Result<RouteHandlerPayload, Error> - ペイロードまたはエラーを含む結果
    • context.data.category: 前のハンドラーからのカテゴリオブジェクト

戻り値: 正規化されたカテゴリオブジェクト

ペイロード要件:

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

使用例:

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

const { normalizeCategoryTerminator } = handlers;

// Use in composition
const categoryPipeline = compose(getCategoryById, normalizeCategoryTerminator);

normalizeCategoriesListTerminator

各アイテムからデータベース固有のフィールドを削除してカテゴリリストを正規化します。

目的: APIレスポンス用にカテゴリ配列データをクリーンアップ

パラメータ:

  • result: Result<RouteHandlerPayload, Error> - ペイロードまたはエラーを含む結果
    • context.data.categories: 前のハンドラーからのカテゴリオブジェクトの配列

戻り値: 正規化されたカテゴリオブジェクトの配列

ペイロード要件:

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

使用例:

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

const { normalizeCategoriesListTerminator } = handlers;

// Use in composition
const categoryPipeline = compose(findCategories, normalizeCategoriesListTerminator);

deleteCategoryTerminator

適切なステータスコードでカテゴリ削除を終了します。

目的: 204ステータスで成功した削除レスポンスをフォーマット

パラメータ:

  • result: Result<RouteHandlerPayload, Error> - ペイロードまたはエラーを含む結果
    • context.data.deleteCategory: 前のハンドラーからの削除結果

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

ペイロード要件:

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

使用例:

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

const { deleteCategoryTerminator } = handlers;

// Use in composition
const categoryPipeline = compose(deleteCategory, deleteCategoryTerminator);

enableCategoryTerminator

適切なステータスコードでカテゴリ有効化を終了します。

目的: 204ステータスで成功したカテゴリ有効化レスポンスをフォーマット

パラメータ:

  • result: Result<RouteHandlerPayload, Error> - ペイロードまたはエラーを含む結果
    • context.data.enableCategory: 前のハンドラーからの有効化結果

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

ペイロード要件:

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

使用例:

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

const { enableCategoryTerminator } = handlers;

// Use in composition
const categoryPipeline = compose(enableCategory, enableCategoryTerminator);

disableCategoryTerminator

適切なステータスコードでカテゴリ無効化を終了します。

目的: 204ステータスで成功したカテゴリ無効化レスポンスをフォーマット

パラメータ:

  • result: Result<RouteHandlerPayload, Error> - ペイロードまたはエラーを含む結果
    • context.data.disableCategory: 前のハンドラーからの無効化結果

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

ペイロード要件:

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

使用例:

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

const { disableCategoryTerminator } = handlers;

// Use in composition
const categoryPipeline = compose(disableCategory, disableCategoryTerminator);