Skip to main content
Version: 0.4.2 (Previous)

🏢 Organization Handler Blocks

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


🎯 Overview

Organization handler blocks are designed to:

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

📋 Organization Handler Types

Organization Async Handlers

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

Organization Sync Handlers

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

Organization Terminator Handlers

Functions that format and return the final organization response.


🔧 Available Organization Handlers

createOrganization

Creates a new organization in the database with owner assignment.

Purpose: Handles creation of organizations with owner assignment and entity management

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with organizationId or error

Example Usage:

// Used in route composition:
const createOrganizationRoute = withRoute({
handler: compose(createOrganization, lift(formatOrganizationResponse))
});

Key Features:

  • Validates request body is present and not empty
  • Validates ownerId is provided
  • Assigns owner role to the initial user
  • Creates base entity with timestamps and ID
  • Inserts organization into database
  • Returns organizationId on success
  • Handles database errors gracefully

getOrganizationById

Retrieves a single organization by ID.

Purpose: Fetches organization data with existence validation

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with organization or error

Example Usage:

compose(getOrganizationById, normalizeTerminator);

Key Features:

  • Validates organizationId is provided
  • Finds organization by ID in database
  • Returns 404 if organization not found
  • Returns organization data on success
  • Handles database errors gracefully

findOrganizations

Finds multiple organizations with optional filtering.

Purpose: Handles querying organizations with filter support

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with organizations array or error

Example Usage:

compose(findOrganizations, listTerminator);

Key Features:

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

updateOrganization

Updates an existing organization by ID.

Purpose: Handles updating organizations 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:

compose(updateOrganization, terminator);

Key Features:

  • Validates organizationId is provided
  • Validates request body is present and not empty
  • Updates base entity with timestamps
  • Checks if organization exists before updating
  • Returns update result on success
  • Handles not found and update failures
  • Handles database errors gracefully

deleteOrganization

Deletes an organization by ID.

Purpose: Handles safe deletion of organizations with existence validation

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with deletion result or error

Example Usage:

compose(deleteOrganization, deleteTerminator);

Key Features:

  • Validates organizationId is provided
  • Deletes organization by ID from database
  • Returns 404 if organization not found
  • Returns deletion result on success
  • Handles database errors gracefully

getOrganizationUserRole

Retrieves a user's role within an organization.

Purpose: Fetches user role information for organization access control

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with role or error

Example Usage:

compose(getOrganizationUserRole, roleTerminator);

Key Features:

  • Validates organizationId and userId are provided
  • Finds organization and user by ID
  • Returns 404 if organization or user not found
  • Returns user role on success
  • Handles database errors gracefully

checkOrganizationUserExistence

Checks if a user exists within an organization.

Purpose: Validates user membership in organization for access control

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with isUserInOrganization flag or error

Example Usage:

compose(checkOrganizationUserExistence, existenceTerminator);

Key Features:

  • Validates organizationId and userId are provided
  • Finds organization by ID
  • Checks if user exists in organization users array
  • Returns boolean flag for user existence
  • Handles database errors gracefully

findOrganizationUsers

Finds users within an organization (placeholder implementation).

Purpose: Handles querying organization users with pagination support

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with organizationUsers object or error

Example Usage:

compose(findOrganizationUsers, usersTerminator);

Key Features:

  • Validates organizationId is provided
  • Finds organization by ID
  • Returns users array with count and total
  • Handles database errors gracefully
  • (TODO: add pagination logic)

upsertOrganizationUsers

Adds or updates users in an organization with role merging.

Purpose: Handles adding/updating organization users with role management

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with upsert result or error

Example Usage:

compose(upsertOrganizationUsers, upsertTerminator);

Key Features:

  • Validates organizationId is provided
  • Validates users array is present and not empty
  • Finds organization by ID
  • Merges new users with existing users by ID
  • Sanitizes user IDs and roles
  • Updates users array in database
  • Returns upsert result on success
  • Handles not found and update failures
  • Handles database errors gracefully

deleteOrganizationUser

Removes a user from an organization.

Purpose: Handles safe removal of users from organizations

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with deletion result or error

Example Usage:

compose(deleteOrganizationUser, deleteTerminator);

Key Features:

  • Validates organizationId and userId are provided
  • Removes user from organization users array
  • Returns 404 if organization not found
  • Returns deletion result on success
  • Handles not found and update failures
  • Handles database errors gracefully

findOrganizationsForUser

Finds organizations for a specific user (placeholder implementation).

Purpose: Handles querying user's organizations with role filtering

Parameters:

  • payload: RouteHandlerPayload containing request context and data

Returns: Result<RouteHandlerPayload, Error> - success with organizationsForUser object or error

Example Usage:

compose(userSchema, findOrganizationsForUser, orgsTerminator);

Key Features:

  • Validates userId is provided
  • Accepts optional roles filter
  • Finds organizations where user is a member (optionally by role)
  • Returns organizations array with count and total
  • Handles database errors gracefully
  • (TODO: add pagination and expand logic)

🎯 Organization Terminator Handlers

normalizeOrganizationTerminator

Normalizes organization data by removing database-specific fields.

Purpose: Cleans organization data for API response

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Normalized organization object

Example Usage:

compose(schema, getOrganizationById, normalizeOrganizationTerminator);

normalizeOrganizationsListTerminator

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

Purpose: Cleans organizations array data for API response

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Array of normalized organization objects

Example Usage:

compose(schema, findOrganizations, normalizeOrganizationsListTerminator);

deleteOrganizationTerminator

Terminates organization deletion with proper status code.

Purpose: Formats successful deletion response with 204 status

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Response object with 204 statusCode

Example Usage:

compose(schema, deleteOrganization, deleteOrganizationTerminator);

normalizeOrganizationUserRoleTerminator

Normalizes organization user role data for API response.

Purpose: Formats user role data for API response

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Object containing normalized role data

Example Usage:

compose(schema, getOrganizationUserRole, normalizeOrganizationUserRoleTerminator);

normalizeOrganizationUserExistenceTerminator

Normalizes organization user existence data for API response.

Purpose: Formats user existence check data for API response

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Object containing normalized existence data

Example Usage:

compose(schema, checkOrganizationUserExistence, normalizeOrganizationUserExistenceTerminator);

normalizeOrganizationUsersListTerminator

Normalizes organization users list (placeholder implementation).

Purpose: Formats organization users list for API response

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Object containing normalized users list data

Example Usage:

compose(schema, findOrganizationUsers, normalizeOrganizationUsersListTerminator);

deleteOrganizationUserTerminator

Terminates organization user deletion with proper status code.

Purpose: Formats successful user deletion response with 204 status

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Response object with 204 statusCode

Example Usage:

compose(schema, deleteOrganizationUser, deleteOrganizationUserTerminator);

upsertOrganizationUsersTerminator

Terminates organization users upsert with proper status code.

Purpose: Formats successful users upsert response with 204 status

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Response object with 204 statusCode

Example Usage:

compose(schema, upsertOrganizationUsers, upsertOrganizationUsersTerminator);

normalizeOrganizationsForUserTerminator

Normalizes organizations for user data for API response.

Purpose: Formats organizations for user data for API response

Parameters:

  • result: Result<RouteHandlerPayload, Error>

Returns: Object containing normalized organizations for user data

Example Usage:

compose(schema, findOrganizationsForUser, normalizeOrganizationsForUserTerminator);