🚀 ユーザーフィーチャーブロック
ユーザーフィーチャーブロックは、Nodeblocksアプリケーションにおけるユーザー管理操作のための完全な事前構成済み機能を提供します。これらのフィーチャーは、適切な検証、認証、エラー処理による即座に使用可能なAPIエンドポイントを作成するために、スキーマ、ルート、ハンドラーを組み合わせます。
🎯 概要
ユーザーフィーチャーブロックは以下を目的として設計されています:
- ユーザー管理操作のための完全なAPIエンドポイントの提供
- 検証済み操作のためのスキーマとルートの組み合わせ
- 認証と認可チェックの自動実装
- 関数コンポジションパターンのサポート
- ログとエラー管理の円滑な処理
📋 フィーチャー構造
各ユーザーフィーチャーは一貫したコンポジションパターンに従います:
- スキーマ: 入力データとパラメータの検証
- ルート: ハンドラー付きHTTPエンドポイントの提供
- コンポジション:
compose
関数を使用したスキーマとルートの結合
🔧 利用可能なユーザーフィーチャー
createUserFeature
検証とルーティング付き新しいユーザーアカウントを作成します。
目的: 完全な検証によるユーザー登録を処理
コンポジション:
- スキーマ:
createUserSchema
- email、name、statusを検証 - ルート:
createUserRoute
- POST/users
作成ハンドラー付き
使用方法:
import { features } from '@nodeblocks/backend-sdk';
// 直接使用(ハンドラーにdataStoresが必要)
app.use('/api', defService(features.createUserFeature));
// データベース設定付き
app.use('/api', defService(partial(features.createUserFeature, [{ dataStores: db }])));
APIエンドポイント: POST /api/users
getUserFeatures
アクセス制御付き個別ユーザーデータを取得します。
目的: 適切な認可によるユーザープロフィールデータの取得
コンポジション:
- スキーマ:
getUserSchema
- パスパラメータを検証 - ルート:
getUserRoute
- GET/users/:id
取得ハンドラー付き
使用方法:
import { features } from '@nodeblocks/backend-sdk';
// 直接使用(ハンドラーにdataStoresが必要)
app.use('/api', defService(features.getUserFeatures));
// データベース設定付き
app.use('/api', defService(partial(features.getUserFeatures, [{ dataStores: db }])));
APIエンドポイント: GET /api/users/:userId
findUsersFeatures
フィルタリングとページネーション付きユーザーの検索とリストを行います。
目的: 検索機能付きユーザーリストの提供
コンポジション:
- スキーマ:
findUsersSchema
- フィルタリング用クエリパラメータを検証 - ルート:
findUsersRoute
- GET/users
検索とページネーション付き
使用方法:
import { features } from '@nodeblocks/backend-sdk';
// 直接使用(ハンドラーにdataStoresが必要)
app.use('/api', defService(features.findUsersFeatures));
// データベース設定付き
app.use('/api', defService(partial(features.findUsersFeatures, [{ dataStores: db }])));
APIエンドポイント: GET /api/users
editUserFeatures
検証とアクセス制御付きユーザープロフィールデータを更新します。
目的: 適切な認可によるユーザーデータの変更
コンポジション:
- スキーマ:
updateUserSchema
- 部分的ユーザープロパティを検証 - ルート:
updateUserRoute
- PATCH/users/:id
更新ハンドラー付き
使用方法:
import { features } from '@nodeblocks/backend-sdk';
// 直接使用(ハンドラーにdataStoresが必要)
app.use('/api', defService(features.editUserFeatures));
// データベース設定付き
app.use('/api', defService(partial(features.editUserFeatures, [{ dataStores: db }])));
APIエンドポイント: PATCH /api/users/:userId
deleteUserFeatures
適切な認可によるユーザーアカウントを削除します。
目的: アクセス制御によるユーザーアカウントの削除
コンポジション:
- スキーマ:
deleteUserSchema
- パスパラメータを検証 - ルート:
deleteUserRoute
- DELETE/users/:id
削除ハンドラー付き
使用方法:
import { features } from '@nodeblocks/backend-sdk';
// 直接使用(ハンドラーにdataStoresが必要)
app.use('/api', defService(features.deleteUserFeatures));
// データベース設定付き
app.use('/api', defService(partial(features.deleteUserFeatures, [{ dataStores: db }])));
APIエンドポイント: DELETE /api/users/:userId
lockUserFeatures
アクセスを防ぐためユーザーアカウントをロックします(管理者のみ)。
目的: セキュリティのためユーザーアカウントアクセスを無効化
コンポジション:
- スキーマ:
lockUserSchema
- パスパラメータを検証 - ルート:
lockUserRoute
- POST/users/:id/lock
ロックハンドラー付き
使用方法:
import { features } from '@nodeblocks/backend-sdk';
// 直接使用(ハンドラーにdataStoresが必要)
app.use('/api', defService(features.lockUserFeatures));
// データベース設定付き
app.use('/api', defService(partial(features.lockUserFeatures, [{ dataStores: db }])));
APIエンドポイント: POST /api/users/:userId/lock
unlockUserFeatures
アクセスを復元するためユーザーアカウントをアンロックします(管理者のみ)。
目的: ロック後のユーザーアカウントアクセスを有効化
コンポジション:
- スキーマ:
unlockUserSchema
- パスパラメータを検証 - ルート:
unlockUserRoute
- POST/users/:id/unlock
アンロックハンドラー付き
使用方法:
import { features } from '@nodeblocks/backend-sdk';
// 直接使用(ハンドラーにdataStoresが必要)
app.use('/api', defService(features.unlockUserFeatures));
// データベース設定付き
app.use('/api', defService(partial(features.unlockUserFeatures, [{ dataStores: db }])));
APIエンドポイント: POST /api/users/:userId/unlock