🏢 Organization Routes
Organization routes provide pre-configured HTTP endpoints for organization management operations in NodeBlocks applications. These routes combine blocks, terminators, and validators to create complete API endpoints with proper authentication, authorization, and error handling.
🎯 Overview
Organization routes are designed to:
- Provide complete API endpoints for organization management operations
- Combine blocks with terminators for secure operations
- Include authentication and authorization checks
- Support functional composition patterns
- Handle logging and error management automatically
📋 Route Structure
Each organization route follows a consistent pattern:
- HTTP Method: Defines the operation type (GET, POST, PATCH, DELETE)
- Path: Specifies the endpoint URL with parameters
- Handler: Composed function chain using blocks and terminators
- Validators: Authentication and authorization checks
🔧 Available Organization Routes
createOrganizationRoute
Creates a new organization and returns the created resource.
Purpose: Handles organization creation with full resource retrieval
Route Details:
- Method:
POST
- Path:
/organizations
- Authentication: Required (Bearer token)
Blocks: createOrganization
, getOrganizationById
, calculateChildAncestors
, normalizeLogoOfOwner
Terminators: normalizeOrganizationTerminator
Validators: isAuthenticated
, checkIdentityType
(['admin'])
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.createOrganizationRoute);
getOrganizationRoute
Retrieves a specific organization by ID.
Purpose: Fetches organization data with access control
Route Details:
- Method:
GET
- Path:
/organizations/:organizationId
- Authentication: Required (Bearer token)
Blocks: getOrganizationById
, normalizeLogoOfOwner
Terminators: normalizeOrganizationTerminator
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner', 'admin', 'member'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.getOrganizationRoute);
findOrganizationsRoute
Retrieves all organizations with normalized list format.
Purpose: Lists organizations with pagination and access control
Route Details:
- Method:
GET
- Path:
/organizations
- Authentication: Required (Bearer token)
Blocks: findOrganizations
, normalizeLogosOfOwners
Terminators: normalizeOrganizationsListTerminator
Validators: isAuthenticated
, checkIdentityType
(['admin'])
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.findOrganizationsRoute);
updateOrganizationRoute
Updates an existing organization and returns the updated resource.
Purpose: Modifies organization data with access control
Route Details:
- Method:
PATCH
- Path:
/organizations/:organizationId
- Authentication: Required (Bearer token)
Blocks: updateOrganization
, getOrganizationById
, normalizeLogoOfOwner
Terminators: normalizeOrganizationTerminator
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.updateOrganizationRoute);
deleteOrganizationRoute
Deletes an organization by ID.
Purpose: Removes organization with access control
Route Details:
- Method:
DELETE
- Path:
/organizations/:organizationId
- Authentication: Required (Bearer token)
Blocks: getOrganizationById
, deleteLogoOfOwner
, deleteOrganization
Terminators: deleteOrganizationTerminator
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.deleteOrganizationRoute);
getOrganizationMemberRoleRoute
Retrieves the role of a specific member within an organization.
Purpose: Fetches member role within organization
Route Details:
- Method:
GET
- Path:
/organizations/:organizationId/members/:identityId/role
- Authentication: Required (Bearer token)
Blocks: getOrganizationById
, buildOrganizationsForMemberByIdsQuery
, findOrganizations
, calculateMemberRole
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.getOrganizationMemberRoleRoute);
checkOrganizationMemberExistenceRoute
Checks if a member exists within an organization.
Purpose: Verifies member membership in organization
Route Details:
- Method:
GET
- Path:
/organizations/:organizationId/members/check-existence
- Authentication: Required (Bearer token)
Blocks: getOrganizationById
, checkOrganizationMemberExistence
Terminators: normalizeOrganizationMemberExistenceTerminator
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.checkOrganizationMemberExistenceRoute);
findOrganizationMembersRoute
Retrieves all members within an organization.
Purpose: Lists organization members
Route Details:
- Method:
GET
- Path:
/organizations/:organizationId/members
- Authentication: Required (Bearer token)
Blocks: findOrganizationMembers
Terminators: normalizeOrganizationMembersListTerminator
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.findOrganizationMembersRoute);
upsertOrganizationMembersRoute
Creates or updates members within an organization.
Purpose: Manages organization member memberships
Route Details:
- Method:
PATCH
- Path:
/organizations/:organizationId/members
- Authentication: Required (Bearer token)
Blocks: getOrganizationById
, upsertOrganizationMembers
Terminators: upsertOrganizationMembersTerminator
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.upsertOrganizationMembersRoute);
deleteOrganizationMemberRoute
Removes a member from an organization.
Purpose: Removes member from organization membership
Route Details:
- Method:
DELETE
- Path:
/organizations/:organizationId/members/:identityId
- Authentication: Required (Bearer token)
Blocks: deleteOrganizationMember
Terminators: deleteOrganizationMemberTerminator
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.deleteOrganizationMemberRoute);
findOrganizationsForMemberRoute
Retrieves all organizations for a specific identity (member). Supports optional inclusion of inherited roles from descendant organizations via the includeInherited=true
query parameter.
Purpose: Lists organizations where identity is a member, with optional inherited roles
Route Details:
- Method:
GET
- Path:
/organizations/members/:identityId
- Authentication: Required (Bearer token)
Blocks: buildOrganizationsForMemberByRoleQuery
, findOrganizations
, normalizeLogosOfOwners
, buildOrganizationsWithDescendantsQuery
, extractAncestors
, buildOrganizationsForMemberByIdsQuery
, calculateMemberRoleForOrganizations
, normalizeOrganizationsForMember
Terminators: Formats organizations list with role information; success/error mapping via orThrow
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), isSelf
(['params', 'requestParams', 'identityId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.findOrganizationsForMemberRoute);
getLogoUploadUrlRoute
Generates signed upload URL for organization logo via GET /organizations/:organizationId/logo-upload-url
.
Purpose: Issues a pre-signed URL to upload an organization logo securely.
Route Details:
- Method:
GET
- Path:
/organizations/:organizationId/logo-upload-url
- Authentication: Required (Bearer token)
Blocks: generateSignedLogoUploadUrl
Terminators: Built-in success/error mapping via orThrow
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Use in feature composition:
export const logoUploadFeature = compose(logoUploadSchema, getLogoUploadUrlRoute);
findOrganizationDescendantsRoute
Retrieves all descendant organizations for a given organization.
Purpose: Lists descendants in the organization tree; supports depth via ?depth=<n>
query parameter
Route Details:
- Method:
GET
- Path:
/organizations/:organizationId/descendants
- Authentication: Required (Bearer token)
Blocks: getOrganizationById
, buildDescendantsQuery
, findOrganizations
, normalizeOrganizations
Terminators: Normalizes descendant organizations list with success/error mapping via orThrow
Validators: isAuthenticated
, some
(checkIdentityType
(['admin']), hasOrgRole
(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))
Usage:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.findOrganizationDescendantsRoute);