🚀 User 機能ブロック
User 機能ブロックは、Nodeblocks アプリケーションにおけるユーザー管理操作のための完全な事前構成された機能を提供します。これらの機能はスキーマ、ルート、ハンドラーを組み合わせて、適切な検証、認証、エラーハンドリングを含むすぐに使用可能な API エンドポイントを作成します。
🎯 概要
User 機能ブロックは以下を目的として設計されています:
- ユーザー管理操作のための完全な API エンドポイントを提供
- 検証された操作のためにスキーマとルートを組み合わせる
- 認証と認可チェックを自動的に含む
- 関数型コンポジションのパターンをサポート
- ログとエラーの管理をシームレスに処理
📋 機能構造
各ユーザー機能は一貫したコンポジションパターンをたどります:
- スキーマ: 入力データとパラメータを検証
- ルート: ハンドラー付きの HTTP エンドポイントを提供
- コンポジション:
compose
関数を使用してスキーマとルートを組み合わせる
🔧 利用可能な User 機能
createUserFeature
検証とルーティング付きで新しいユーザーアカウントを作成します。
目的: 完全な検証付きでユーザー登録を処理
コンポジション:
- スキーマ:
createUserSchema
- メール、名前、ステータスを検証 - ルート:
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/:profileId
使用法:
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/:profileId
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/:profileId
使用法:
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/:profileId
deleteUserFeatures
適切な認可付きでユーザーアカウントを削除します。
目的: アクセスコントロール付きでユーザーアカウントを削除
コンポジション:
- スキーマ:
deleteUserSchema
- パスパラメータを検証 - ルート:
deleteUserRoute
- 削除ハンドラー付き DELETE/users/:profileId
使用法:
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/:profileId
lockUserFeatures
アクセスを防止するためにユーザーアカウントをロックします (管理者専用)。
目的: セキュリティのためにユーザーアカウントアクセスを無効化
コンポジション:
- スキーマ:
lockUserSchema
- パスパラメータを検証 - ルート:
lockUserRoute
- ロックハンドラー付き POST/identities/:identityId/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/identities/:identityId/lock
unlockUserFeatures
アクセスを復元するためにユーザーアカウントのロックを解除します (管理者専用)。
Purpose: ロック後にユーザーアカウントアクセスを有効化
コンポジション:
- スキーマ:
unlockUserSchema
- パスパラメータを検証 - ルート:
unlockUserRoute
- アンロックハンドラー付き POST/identities/:identityId/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/identities/:identityId/unlock
getAvatarUploadUrlFeature
スキーマ検証とルーティング付きのユーザーアバターアップロード URL 生成機能。
目的: 自動 UUID ファイル名生成付きでセキュアなアバターファイルアップロードのための事前署名付き URL を生成
コンポジション:
- スキーマ:
getSignedImageUploadUrlSchema
- 画像アップロードのためのコンテンツタイプとファイルサイズを検証 - ルート:
getAvatarUploadUrlRoute
- 署名付き URL 生成付き GET/user-profiles/:profileId/avatar-upload-url
使用法:
import { features } from '@nodeblocks/backend-sdk';
// 直接使用 (ハンドラーに fileStorageDriver が必要)
app.use('/api', defService(features.getAvatarUploadUrlFeature));
// 設定でファイルストレージサービスを使用:
app.use('/api', defService(partial(features.getAvatarUploadUrlFeature, [{ configuration: { fileStorageDriver } }])));
API エンドポイント: GET /api/user-profiles/:profileId/avatar-upload-url