🚀 ユーザーフィーチャーブロック
ユーザーフィーチャーブロックは、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