メインコンテンツまでスキップ
バージョン: 0.6.0 (Latest)

⚙️ Attribute Handler Blocks

Attribute handler blocks provide core business logic functions for attribute group management operations in Nodeblocks applications. These handlers encapsulate common patterns for database operations, data transformation, and response formatting.


🎯 Overview

Attribute handler blocks are designed to:

  • Encapsulate attribute group business logic in reusable functions
  • Handle database operations with proper error management
  • Transform attribute data between different formats
  • Ensure type safety with TypeScript integration
  • Support composition with other blocks

📋 Attribute Handler Types

Attribute Async Handlers

Functions that perform asynchronous attribute operations (database calls, API requests, etc.).

Attribute Sync Handlers

Functions that perform synchronous attribute operations (data transformation, validation, etc.).

Attribute Terminator Handlers

Functions that format and return the final attribute response.


🔧 Available Attribute Handlers

createAttributeGroup

Creates a new attribute group in the database.

Purpose: Handles creation of attribute groups with validation and entity management

Parameters:

  • payload: RouteHandlerPayload - Contains request context and data
    • params.requestBody: Attribute group creation data
    • context.db: Database connection

Returns: Result<RouteHandlerPayload, Error> - Success with attributeId or error

Payload Requirements:

  • params.requestBody must contain attribute group data
  • context.db must be available for database operations

Key Features:

  • Validates request body is present and not empty
  • Creates base entity with timestamps and ID
  • Inserts attribute group into database
  • Returns attributeId on success
  • Handles database errors gracefully

Usage:

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

const { createAttributeGroup } = handlers;

// Use in composition
const attributePipeline = compose(createAttributeGroup, getAttributeGroupById, createAttributeGroupTerminator);

updateAttributeGroup

Updates an existing attribute group by ID.

Purpose: Handles updating attribute groups with validation and conflict detection

Parameters:

  • payload: RouteHandlerPayload - Contains request context and data
    • params.requestParams.attributeId or context.data.attributeId: Attribute ID to update
    • params.requestBody: Attribute group data to update
    • context.db: Database connection

Returns: Result<RouteHandlerPayload, Error> - Success with attributeId or error

Payload Requirements:

  • Attribute ID must be provided in params.requestParams.attributeId or context.data.attributeId
  • params.requestBody must contain attribute group data to update
  • context.db must be available for database operations

Key Features:

  • Validates attributeId is provided
  • Validates request body is present and not empty
  • Updates base entity with timestamps
  • Checks if attribute group exists before updating
  • Returns attributeId on success
  • Handles not found and update failures

Usage:

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

const { updateAttributeGroup } = handlers;

// Use in composition
const attributePipeline = compose(updateAttributeGroup, getAttributeGroupById, normalizeAttributeGroupTerminator);

getAttributeGroupById

Retrieves a single attribute group by ID.

Purpose: Fetches attribute group data with existence validation

Parameters:

  • payload: RouteHandlerPayload - Contains request context and data
    • params.requestParams.attributeId or context.data.attributeId: Attribute ID to retrieve
    • context.db: Database connection

Returns: Result<RouteHandlerPayload, Error> - Success with attributeGroup or error

Payload Requirements:

  • Attribute ID must be provided in params.requestParams.attributeId or context.data.attributeId
  • context.db must be available for database operations

Key Features:

  • Validates attributeId is provided
  • Finds attribute group by ID in database
  • Returns 404 if attribute group not found
  • Returns attributeGroup data on success
  • Handles database errors gracefully

Usage:

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

const { getAttributeGroupById } = handlers;

// Use in composition
const attributePipeline = compose(getAttributeGroupById, normalizeAttributeGroupTerminator);

findAttributeGroups

Finds multiple attribute groups with optional filtering.

Purpose: Handles querying attribute groups with filter support

Parameters:

  • payload: RouteHandlerPayload - Contains request context and data
    • params.requestQuery: Optional filter criteria for attribute groups
    • context.db: Database connection

Returns: Result<RouteHandlerPayload, Error> - Success with attributeGroups array or error

Payload Requirements:

  • params.requestQuery is optional - if provided, used as MongoDB filter
  • context.db must be available for database operations

Key Features:

  • Accepts optional filter from request query
  • Returns all attribute groups if no filter provided
  • Returns array of attributeGroups
  • Handles database errors gracefully

Usage:

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

const { findAttributeGroups } = handlers;

// Use in composition
const attributePipeline = compose(findAttributeGroups, normalizeAttributesListTerminator);

deleteAttributeGroup

Deletes an attribute group by ID.

Purpose: Handles safe deletion of attribute groups with existence validation

Parameters:

  • payload: RouteHandlerPayload - Contains request context and data
    • params.requestParams.attributeId or context.data.attributeId: Attribute ID to delete
    • context.db: Database connection

Returns: Result<RouteHandlerPayload, Error> - Success with deletion flag or error

Payload Requirements:

  • Attribute ID must be provided in params.requestParams.attributeId or context.data.attributeId
  • context.db must be available for database operations

Key Features:

  • Validates attributeId is provided
  • Deletes attribute group by ID from database
  • Returns 404 if attribute group not found
  • Returns deletion confirmation flag
  • Handles database errors gracefully

Usage:

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

const { deleteAttributeGroup } = handlers;

// Use in composition
const attributePipeline = compose(deleteAttributeGroup, deleteAttributeTerminator);

🎯 Attribute Terminator Handlers

createAttributeGroupTerminator

Terminates attribute group creation with proper response formatting.

Purpose: Formats successful attribute group creation response with 201 status

Parameters:

  • result: Result<RouteHandlerPayload, Error> - Result containing payload or error
    • context.data.attributeGroup: Attribute group object from previous handler

Returns: Formatted response object with data and statusCode

Payload Requirements:

  • context.data.attributeGroup must be available from previous handler

Usage:

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

const { createAttributeGroupTerminator } = handlers;

// Use in composition
const attributePipeline = compose(createAttributeGroup, getAttributeGroupById, createAttributeGroupTerminator);

normalizeAttributeGroupTerminator

Normalizes attribute group data by removing database-specific fields.

Purpose: Cleans attribute group data for API response

Parameters:

  • result: Result<RouteHandlerPayload, Error> - Result containing payload or error
    • context.data.attributeGroup: Attribute group object from previous handler

Returns: Normalized attribute group object

Payload Requirements:

  • context.data.attributeGroup must be available from previous handler

Usage:

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

const { normalizeAttributeGroupTerminator } = handlers;

// Use in composition
const attributePipeline = compose(getAttributeGroupById, normalizeAttributeGroupTerminator);

normalizeAttributesListTerminator

Normalizes attribute groups list by removing database-specific fields from each item.

Purpose: Cleans attribute groups array data for API response

Parameters:

  • result: Result<RouteHandlerPayload, Error> - Result containing payload or error
    • context.data.attributeGroups: Array of attribute group objects from previous handler

Returns: Array of normalized attribute group objects

Payload Requirements:

  • context.data.attributeGroups must be available from previous handler

Usage:

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

const { normalizeAttributesListTerminator } = handlers;

// Use in composition
const attributePipeline = compose(findAttributeGroups, normalizeAttributesListTerminator);

deleteAttributeTerminator

Terminates attribute group deletion with proper status code.

Purpose: Formats successful deletion response with 204 status

Parameters:

  • result: Result<RouteHandlerPayload, Error> - Result containing payload or error
    • context.data.attributeGroupDeleted: Deletion flag from previous handler

Returns: Response object with 204 statusCode

Payload Requirements:

  • context.data.attributeGroupDeleted must be available from previous handler

Usage:

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

const { deleteAttributeTerminator } = handlers;

// Use in composition
const attributePipeline = compose(deleteAttributeGroup, deleteAttributeTerminator);