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

⚙️ Attribute Handler

Attribute handlers 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 handlers 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);