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

⚙️ 属性ハンドラー

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


🎯 概要

属性ハンドラーは以下の目的で設計されています:

  • 属性グループのビジネスロジックをカプセル化 - 再利用可能な関数として実装
  • データベース操作の処理 - 適切なエラー管理を含む
  • 属性データの変換 - 異なるフォーマット間での変換
  • 型安全性の確保 - TypeScript統合による型安全性
  • 他のブロックとの合成をサポート - コンポジションパターンの対応

📋 属性ハンドラータイプ

属性非同期ハンドラー

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

属性同期ハンドラー

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

属性ターミネーターハンドラー

最終的な属性レスポンスをフォーマットして返す関数。


🔧 利用可能な属性ハンドラー

createAttributeGroup

データベースに新しい属性グループを作成します。

目的: バリデーションとエンティティ管理を含む属性グループの作成を処理

パラメータ:

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

戻り値: Result<RouteHandlerPayload, Error> - 成功時はattributeId、エラー時はエラー

ペイロード要件:

  • params.requestBodyには属性グループデータが含まれている必要があります
  • context.dbはデータベース操作で利用可能である必要があります

主な機能:

  • リクエストボディが存在し、空でないことを検証
  • タイムスタンプとIDを含む基本エンティティを作成
  • データベースに属性グループを挿入
  • 成功時にattributeIdを返す
  • データベースエラーを適切に処理

使用例:

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

const { createAttributeGroup } = handlers;

// コンポジションで使用
const attributePipeline = compose(createAttributeGroup, getAttributeGroupById, createAttributeGroupTerminator);

updateAttributeGroup

IDで既存の属性グループを更新します。

目的: バリデーションと競合検出を含む属性グループの更新を処理

パラメータ:

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

戻り値: Result<RouteHandlerPayload, Error> - 成功時はattributeId、エラー時はエラー

ペイロード要件:

  • 属性IDはparams.requestParams.attributeIdまたはcontext.data.attributeIdで提供される必要があります
  • params.requestBodyには更新する属性グループデータが含まれている必要があります
  • context.dbはデータベース操作で利用可能である必要があります

主な機能:

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

使用例:

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

const { updateAttributeGroup } = handlers;

// コンポジションで使用
const attributePipeline = compose(updateAttributeGroup, getAttributeGroupById, normalizeAttributeGroupTerminator);

getAttributeGroupById

IDで単一の属性グループを取得します。

目的: 存在検証を含む属性グループデータの取得

パラメータ:

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

戻り値: Result<RouteHandlerPayload, Error> - 成功時はattributeGroup、エラー時はエラー

ペイロード要件:

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

主な機能:

  • attributeIdが提供されていることを検証
  • データベースでIDによる属性グループを検索
  • 属性グループが見つからない場合は404を返す
  • 成功時にattributeGroupデータを返す
  • データベースエラーを適切に処理

使用例:

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

const { getAttributeGroupById } = handlers;

// コンポジションで使用
const attributePipeline = compose(getAttributeGroupById, normalizeAttributeGroupTerminator);

findAttributeGroups

オプションのフィルタリングで複数の属性グループを検索します。

目的: フィルタサポートを含む属性グループのクエリ処理

パラメータ:

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

戻り値: Result<RouteHandlerPayload, Error> - 成功時はattributeGroups配列、エラー時はエラー

ペイロード要件:

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

主な機能:

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

使用例:

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

const { findAttributeGroups } = handlers;

// コンポジションで使用
const attributePipeline = compose(findAttributeGroups, normalizeAttributesListTerminator);

deleteAttributeGroup

IDで属性グループを削除します。

目的: 存在検証を含む属性グループの安全な削除を処理

パラメータ:

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

戻り値: Result<RouteHandlerPayload, Error> - 成功時は削除フラグ、エラー時はエラー

ペイロード要件:

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

主な機能:

  • attributeIdが提供されていることを検証
  • データベースからIDで属性グループを削除
  • 属性グループが見つからない場合は404を返す
  • 削除確認フラグを返す
  • データベースエラーを適切に処理

使用例:

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

const { deleteAttributeGroup } = handlers;

// コンポジションで使用
const attributePipeline = compose(deleteAttributeGroup, deleteAttributeTerminator);

🎯 属性ターミネーターハンドラー

createAttributeGroupTerminator

適切なレスポンスフォーマットで属性グループ作成を終了します。

目的: 201ステータスで成功した属性グループ作成レスポンスをフォーマット

パラメータ:

  • result: Result<RouteHandlerPayload, Error> - ペイロードまたはエラーを含む結果
    • context.data.attributeGroup: 前のハンドラーからの属性グループオブジェクト

戻り値: データとステータスコードを含むフォーマット済みレスポンスオブジェクト

ペイロード要件:

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

使用例:

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

const { createAttributeGroupTerminator } = handlers;

// コンポジションで使用
const attributePipeline = compose(createAttributeGroup, getAttributeGroupById, createAttributeGroupTerminator);

normalizeAttributeGroupTerminator

データベース固有のフィールドを削除して属性グループデータを正規化します。

目的: APIレスポンス用に属性グループデータをクリーンアップ

パラメータ:

  • result: Result<RouteHandlerPayload, Error> - ペイロードまたはエラーを含む結果
    • context.data.attributeGroup: 前のハンドラーからの属性グループオブジェクト

戻り値: 正規化された属性グループオブジェクト

ペイロード要件:

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

使用例:

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

const { normalizeAttributeGroupTerminator } = handlers;

// コンポジションで使用
const attributePipeline = compose(getAttributeGroupById, normalizeAttributeGroupTerminator);

normalizeAttributesListTerminator

各項目からデータベース固有のフィールドを削除して属性グループリストを正規化します。

目的: APIレスポンス用に属性グループ配列データをクリーンアップ

パラメータ:

  • result: Result<RouteHandlerPayload, Error> - ペイロードまたはエラーを含む結果
    • context.data.attributeGroups: 前のハンドラーからの属性グループオブジェクトの配列

戻り値: 正規化された属性グループオブジェクトの配列

ペイロード要件:

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

使用例:

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

const { normalizeAttributesListTerminator } = handlers;

// コンポジションで使用
const attributePipeline = compose(findAttributeGroups, normalizeAttributesListTerminator);

deleteAttributeTerminator

適切なステータスコードで属性グループ削除を終了します。

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

パラメータ:

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

戻り値: 204ステータスコードを含むレスポンスオブジェクト

ペイロード要件:

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

使用例:

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

const { deleteAttributeTerminator } = handlers;

// コンポジションで使用
const attributePipeline = compose(deleteAttributeGroup, deleteAttributeTerminator);