💬 Chat Handler Blocks
Chat handler blocks provide core business logic functions for chat management operations in Nodeblocks applications. These handlers encapsulate common patterns for chat database operations, data transformation, and response formatting.
🎯 Overview
Chat handler blocks are designed to:
- Encapsulate chat business logic in reusable functions
- Handle chat database operations with proper error management
- Transform chat data between different formats
- Ensure type safety with TypeScript integration
- Support composition with other chat blocks
📋 Chat Handler Types
Channel Handlers
Functions that perform channel-related operations (creation, retrieval, updates, deletion).
Message Handlers
Functions that perform message-related operations (sending, retrieving, updating, deleting).
Subscription Handlers
Functions that perform subscription-related operations (managing user subscriptions to channels).
Terminator Handlers
Functions that format and return the final chat response.
🔧 Available Chat Handlers
📺 Channel Handlers
Core Channel Operations
createChatChannel
Creates a new chat channel in the database with validation and entity management.
Purpose: Handles creation of chat channels with validation and entity management
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with channelId or error
Example Usage:
// Used in composition:
compose(createChatChannel, terminator);
Key Features:
- Validates request body presence
- Creates base entity with metadata
- Returns channel ID on success
- Handles database insertion errors
getChatChannelById
Retrieves a single channel by ID with existence validation.
Purpose: Fetches channel data with existence validation
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with channel or error
Example Usage:
// Used in composition:
compose(getChatChannelById, normalizeTerminator);
Key Features:
- Validates channel ID presence
- Checks channel existence
- Returns full channel object
- Handles database query errors
findChatChannels
Finds multiple channels with optional filtering.
Purpose: Handles querying channels with filter support
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with channels array or error
Example Usage:
// Used in composition:
compose(findChatChannels, listTerminator);
Key Features:
- Accepts optional filter parameters
- Returns all channels if no filter provided
- Supports complex MongoDB queries
- Handles database query errors
updateChatChannel
Updates an existing channel by ID with validation and conflict detection.
Purpose: Handles updating channels with validation and conflict detection
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with update result or error
Example Usage:
// Used in composition:
compose(updateChatChannel, terminator);
Key Features:
- Validates channel ID and request body
- Checks channel existence before update
- Updates base entity metadata
- Returns update operation result
deleteChatChannel
Deletes a channel by ID with safe deletion and existence validation.
Purpose: Handles safe deletion of channels with existence validation
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with deletion result or error
Example Usage:
// Used in composition:
compose(deleteChatChannel, deleteTerminator);
Key Features:
- Validates channel ID presence
- Checks channel existence before deletion
- Returns deletion operation result
- Handles database deletion errors
Channel Terminator Functions
createChatChannelTerminator
Terminates channel creation with proper response formatting.
Purpose: Formats successful channel creation response with 201 status
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Formatted response object with data and statusCode
Example Usage:
// Used in composition:
compose(createChatChannel, createChatChannelTerminator);
Key Features:
- Returns 201 status code for successful creation
- Removes database-specific fields
- Returns formatted channel data
normalizeChatChannelTerminator
Normalizes channel data by removing database-specific fields.
Purpose: Cleans channel data for API response
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Normalized channel object
Example Usage:
// Used in composition:
compose(getChatChannelById, normalizeChatChannelTerminator);
Key Features:
- Removes
_id
field from channel - Throws error if channel not found
- Returns clean channel object
normalizeChatChannelsListTerminator
Normalizes channels list by removing database-specific fields from each item.
Purpose: Cleans channels array data for API response with validation
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Array of normalized channel objects
Example Usage:
// Used in composition:
compose(findChatChannels, normalizeChatChannelsListTerminator);
Key Features:
- Removes
_id
field from all channels - Validates channels array existence
- Maps over channels array
- Returns clean channels array
deleteChatChannelTerminator
Terminates channel deletion with proper status code.
Purpose: Formats successful deletion response with 204 status
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Response object with 204 statusCode
Example Usage:
// Used in composition:
compose(deleteChatChannel, deleteChatChannelTerminator);
Key Features:
- Returns 204 status code for successful deletion
- Validates deletion operation result
- Throws error if deletion failed
💬 Message Handlers
Core Message Operations
createChatMessage
Creates a new chat message in the database.
Purpose: Handles creation of chat messages with validation and entity management
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with messageId or error
Example Usage:
// Used in route composition:
const createMessageRoute = withRoute({
handler: compose(createChatMessage, nextHandler)
});
Key Features:
- Validates request body presence
- Creates base entity with metadata
- Returns message ID on success
- Handles database insertion errors
getChatMessageById
Retrieves a chat message by its ID from the database.
Purpose: Fetches message data with existence validation
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with chatMessage or error
Example Usage:
// Used in route composition:
const getMessageRoute = withRoute({
handler: compose(getChatMessageById, nextHandler)
});
Key Features:
- Validates message ID presence
- Checks message existence
- Returns full message object
- Handles database query errors
findChatMessages
Finds chat messages in the database using optional filter criteria.
Purpose: Handles querying messages with filter support and sorting
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with chatMessages array or error
Example Usage:
// Used in route composition:
const findMessagesRoute = withRoute({
handler: compose(findChatMessages, nextHandler)
});
Key Features:
- Accepts optional filter parameters
- Sorts messages by creation date (newest first)
- Returns all messages if no filter provided
- Supports complex MongoDB queries
updateChatMessage
Updates an existing chat message in the database.
Purpose: Handles updating messages with validation and conflict detection
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with update result or error
Example Usage:
// Used in route composition:
const updateMessageRoute = withRoute({
handler: compose(updateChatMessage, nextHandler)
});
Key Features:
- Validates message ID and request body
- Checks message existence before update
- Updates base entity metadata
- Returns update operation result
deleteChatMessage
Deletes a chat message from the database by its ID.
Purpose: Handles safe deletion of messages with existence validation
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with delete result or error
Example Usage:
// Used in route composition:
const deleteMessageRoute = withRoute({
handler: compose(deleteChatMessage, nextHandler)
});
Key Features:
- Validates message ID presence
- Checks message existence before deletion
- Returns deletion operation result
- Handles database deletion errors
Message Terminator Functions
createChatMessageTerminator
Formats chat message creation response for API response.
Purpose: Formats successful message creation response with 201 status
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Object with formatted chat message data and 201 status code
Example Usage:
// Used in route composition:
const createMessageRoute = withRoute({
handler: compose(createChatMessage, lift(createChatMessageTerminator))
});
Key Features:
- Returns 201 status code for successful creation
- Removes database-specific fields
- Returns formatted message data
normalizeChatMessageTerminator
Normalizes single chat message data for API response.
Purpose: Cleans message data for API response
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Normalized chat message object without _id field
Example Usage:
// Used in route composition:
const getMessageRoute = withRoute({
handler: compose(getChatMessageById, lift(normalizeChatMessageTerminator))
});
Key Features:
- Removes
_id
field from message - Throws error if message not found
- Returns clean message object
normalizeChatMessagesListTerminator
Normalizes chat messages list data for API response.
Purpose: Cleans messages array data for API response
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Array of normalized chat message objects without _id fields
Example Usage:
// Used in route composition:
const findMessagesRoute = withRoute({
handler: compose(findChatMessages, lift(normalizeChatMessagesListTerminator))
});
Key Features:
- Removes
_id
field from all messages - Validates messages array existence
- Maps over messages array
- Returns clean messages array
deleteChatMessageTerminator
Formats chat message deletion response for API response.
Purpose: Formats successful deletion response with 204 status
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Object with 204 status code indicating successful deletion
Example Usage:
// Used in route composition:
const deleteMessageRoute = withRoute({
handler: compose(deleteChatMessage, lift(deleteChatMessageTerminator))
});
Key Features:
- Returns 204 status code for successful deletion
- Validates deletion operation result
- Throws error if deletion failed
🔔 Subscription Handlers
Core Subscription Operations
createChatSubscription
Creates a new subscription in the database.
Purpose: Handles creation of chat subscriptions with validation and entity management
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with subscriptionId or error
Example Usage:
// Used in composition:
compose(createChatSubscription, terminator);
Key Features:
- Validates request body presence
- Creates base entity with metadata
- Returns subscription ID on success
- Handles database insertion errors
getChatSubscriptionById
Retrieves a single subscription by ID.
Purpose: Fetches subscription data with existence validation
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with subscription or error
Example Usage:
// Used in composition:
compose(getChatSubscriptionById, normalizeTerminator);
Key Features:
- Validates subscription ID presence
- Checks subscription existence
- Returns full subscription object
- Handles database query errors
findChatSubscriptions
Finds multiple subscriptions with optional filtering.
Purpose: Handles querying subscriptions with filter support
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with subscriptions array or error
Example Usage:
// Used in composition:
compose(findChatSubscriptions, listTerminator);
Key Features:
- Accepts optional filter parameters
- Returns all subscriptions if no filter provided
- Supports complex MongoDB queries
- Handles database query errors
deleteChatSubscription
Deletes a subscription by ID.
Purpose: Handles safe deletion of subscriptions with existence validation
Parameters:
payload
: RouteHandlerPayload containing request context and data
Returns: Result<RouteHandlerPayload, Error>
- success with deletion result or error
Example Usage:
// Used in composition:
compose(deleteChatSubscription, deleteTerminator);
Key Features:
- Validates subscription ID presence
- Checks subscription existence before deletion
- Returns deletion operation result
- Handles database deletion errors
Subscription Terminator Functions
createChatSubscriptionTerminator
Terminates subscription creation with proper response formatting.
Purpose: Formats successful subscription creation response with 201 status
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Formatted response object with data and statusCode
Example Usage:
// Used in composition:
compose(createChatSubscription, createChatSubscriptionTerminator);
Key Features:
- Returns 201 status code for successful creation
- Removes database-specific fields
- Returns formatted subscription data
normalizeChatSubscriptionTerminator
Normalizes subscription data by removing database-specific fields.
Purpose: Cleans subscription data for API response
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Normalized subscription object
Example Usage:
// Used in composition:
compose(getChatSubscriptionById, normalizeChatSubscriptionTerminator);
Key Features:
- Removes
_id
field from subscription - Throws error if subscription not found
- Returns clean subscription object
normalizeChatSubscriptionsListTerminator
Normalizes subscriptions list by removing database-specific fields from each item.
Purpose: Cleans subscriptions array data for API response with validation
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Array of normalized subscription objects
Example Usage:
// Used in composition:
compose(findChatSubscriptions, normalizeChatSubscriptionsListTerminator);
Key Features:
- Removes
_id
field from all subscriptions - Validates subscriptions array existence
- Maps over subscriptions array
- Returns clean subscriptions array
deleteChatSubscriptionTerminator
Terminates subscription deletion with proper status code.
Purpose: Formats successful deletion response with 204 status
Parameters:
result
: Result containing RouteHandlerPayload or Error
Returns: Response object with 204 statusCode
Example Usage:
// Used in composition:
compose(deleteChatSubscription, deleteChatSubscriptionTerminator);
Key Features:
- Returns 204 status code for successful deletion
- Validates deletion operation result
- Throws error if deletion failed