🚀 User Feature Blocks
User feature blocks provide complete, pre-composed functionality for user management operations in Nodeblocks applications. These features combine schemas, routes, and handlers to create ready-to-use API endpoints with proper validation, authentication, and error handling.
🎯 Overview
User feature blocks are designed to:
- Provide complete API endpoints for user management operations
- Combine schemas with routes for validated operations
- Include authentication and authorization checks automatically
- Support functional composition patterns
- Handle logging and error management seamlessly
📋 Feature Structure
Each user feature follows a consistent composition pattern:
- Schema: Validates input data and parameters
- Route: Provides HTTP endpoint with handlers
- Composition: Combines schema and route using
compose
function
🔧 Available User Features
createUserFeature
Creates a new user account with validation and routing.
Purpose: Handles user registration with complete validation
Composition:
- Schema:
createUserSchema
- validates email, name, and status - Route:
createUserRoute
- POST/users
with creation handler
Usage:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.createUserFeature, [{ dataStores: db }])));
API Endpoint: POST /api/users
getUserFeatures
Retrieves individual user data with access control.
Purpose: Fetches user profile data with proper authorization
Composition:
- Schema:
getUserSchema
- validates path parameters - Route:
getUserRoute
- GET/users/:id
with retrieval handler
Usage:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.getUserFeatures, [{ dataStores: db }])));
API Endpoint: GET /api/users/:userId
findUsersFeatures
Searches and lists users with filtering and pagination.
Purpose: Provides user listing with search capabilities
Composition:
- Schema:
findUsersSchema
- validates query parameters for filtering - Route:
findUsersRoute
- GET/users
with search and pagination
Usage:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.findUsersFeatures, [{ dataStores: db }])));
API Endpoint: GET /api/users
editUserFeatures
Updates user profile data with validation and access control.
Purpose: Modifies user data with proper authorization
Composition:
- Schema:
updateUserSchema
- validates partial user properties - Route:
updateUserRoute
- PATCH/users/:id
with update handler
Usage:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.editUserFeatures, [{ dataStores: db }])));
API Endpoint: PATCH /api/users/:userId
deleteUserFeatures
Deletes user accounts with proper authorization.
Purpose: Removes user accounts with access control
Composition:
- Schema:
deleteUserSchema
- validates path parameters - Route:
deleteUserRoute
- DELETE/users/:id
with deletion handler
Usage:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.deleteUserFeatures, [{ dataStores: db }])));
API Endpoint: DELETE /api/users/:userId
lockUserFeatures
Locks user accounts to prevent access (admin only).
Purpose: Disables user account access for security
Composition:
- Schema:
lockUserSchema
- validates path parameters - Route:
lockUserRoute
- POST/users/:id/lock
with lock handler
Usage:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.lockUserFeatures, [{ dataStores: db }])));
API Endpoint: POST /api/users/:userId/lock
unlockUserFeatures
Unlocks user accounts to restore access (admin only).
Purpose: Enables user account access after locking
Composition:
- Schema:
unlockUserSchema
- validates path parameters - Route:
unlockUserRoute
- POST/users/:id/unlock
with unlock handler
Usage:
import { features } from '@nodeblocks/backend-sdk';
// With database configuration
app.use('/api', defService(partial(features.unlockUserFeatures, [{ dataStores: db }])));
API Endpoint: POST /api/users/:userId/unlock