メインコンテンツまでスキップ
バージョン: 0.5.0 (最新)

🛣️ User ルートブロック

User ルートブロックは、Nodeblocks アプリケーションにおけるユーザー管理操作のための事前設定された HTTP エンドポイントを提供します。これらのルートは、ハンドラー、バリデーター、ミドルウェアを組み合わせて、適切な認証、認可、エラーハンドリングを含む完全な API エンドポイントを作成します。


🎯 概要

User ルートブロックは以下を目的として設計されています:

  • ユーザー管理操作のための完全な API エンドポイントを提供
  • セキュアな操作のためにハンドラーとバリデーターを組み合わせる
  • 認証と認可チェックを含む
  • 関数型コンポジションのパターンをサポート
  • ログとエラーの管理を自動的に処理

📋 ルート構造

各ユーザー ルートは一貫したパターンをたどります:

  • HTTP メソッド: 操作タイプを定義 (GET, POST, PATCH, DELETE)
  • パス: パラメータ付きのエンドポイント URL を指定
  • ハンドラー: ビジネスロジックのための合成関数チェーン
  • バリデーター: 認証と認可チェック

🔧 利用可能な User ルート

createUserRoute

新しいユーザーを作成し、作成されたリソースを返します。

目的: ユーザー登録を処理

ルート詳細:

  • メソッド: POST
  • パス: /users
  • 認証: 必須 (Bearer トークン)

ハンドラー: createUser, getUserById, normalizeAvatarOfOwner, normalizeUser, orThrow

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), isSelf(['params', 'requestBody', 'identityId']))

使用法:

import { routes } from '@nodeblocks/backend-sdk';

// Express アプリでルートを登録
app.use('/api', routes.createUserRoute);

getUserRoute

ID によって特定のユーザーを取得します。

目的: アクセスコントロール付きでユーザープロファイルデータを取得

ルート詳細:

  • メソッド: GET
  • パス: /users/:profileId
  • 認証: 必須 (Bearer トークン)

ハンドラー: getUserById, normalizeAvatarOfOwner, normalizeUser, orThrow

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), ownsProfile(['params', 'requestParams', 'profileId']))

使用法:

import { routes } from '@nodeblocks/backend-sdk';

// Express アプリでルートを登録
app.use('/api', routes.getUserRoute);

findUsersRoute

正規化されたリスト形式ですべてのユーザーを取得します。

Purpose: ページネーションと管理者専用アクセス付きでユーザーをリスト

ルート詳細:

  • メソッド: GET
  • パス: /users
  • 認証: 必須 (Bearer トークン)

ハンドラー: findUsers, normalizeAvatarsOfOwners, normalizeUsers, orThrow

バリデーター: isAuthenticated, checkIdentityType(['admin'])

使用法:

import { routes } from '@nodeblocks/backend-sdk';

// Express アプリでルートを登録
app.use('/api', routes.findUsersRoute);

updateUserRoute

既存のユーザーを更新し、更新されたリソースを返します。

目的: アクセスコントロール付きでユーザーデータを変更

ルート詳細:

  • メソッド: PATCH
  • パス: /users/:profileId
  • 認証: 必須 (Bearer トークン)

ハンドラー: getUserById, updateUser, getUserById, deleteAvatarIfReplaced, normalizeAvatarOfOwner, normalizeUser, orThrow

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), ownsProfile(['params', 'requestParams', 'profileId']))

使用法:

import { routes } from '@nodeblocks/backend-sdk';

// Express アプリでルートを登録
app.use('/api', routes.updateUserRoute);

deleteUserRoute

ID によってユーザーを削除します。

目的: アクセスコントロール付きでユーザーアカウントを削除

ルート詳細:

  • メソッド: DELETE
  • パス: /users/:profileId
  • 認証: 必須 (Bearer トークン)

ハンドラー: deleteUser, deleteUserTerminator

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), ownsProfile(['params', 'requestParams', 'profileId']))

使用法:

import { routes } from '@nodeblocks/backend-sdk';

// Express アプリでルートを登録
app.use('/api', routes.deleteUserRoute);

lockUserRoute

アクセスを防止するためにユーザーアカウントをロックします。

目的: ユーザーアカウントアクセスを無効化 (管理者専用)

ルート詳細:

  • メソッド: POST
  • パス: /identities/:identityId/lock
  • 認証: 必須 (Bearer トークン)

ハンドラー: lockUser, lockUserTerminator

バリデーター: isAuthenticated, checkIdentityType(['admin'])

使用法:

import { routes } from '@nodeblocks/backend-sdk';

// Express アプリでルートを登録
app.use('/api', routes.lockUserRoute);

unlockUserRoute

アクセスを復元するためにユーザーアカウントのロックを解除します。

目的: ユーザーアカウントアクセスを有効化 (管理者専用)

ルート詳細:

  • メソッド: POST
  • パス: /identities/:identityId/unlock
  • 認証: 必須 (Bearer トークン)

ハンドラー: unlockUser, unlockUserTerminator

バリデーター: isAuthenticated, checkIdentityType(['admin'])

使用法:

import { routes } from '@nodeblocks/backend-sdk';

// Express アプリでルートを登録
app.use('/api', routes.unlockUserRoute);

getAvatarUploadUrlRoute

GET /user-profiles/:profileId/avatar-upload-url を介してアバター画像をアップロードするための署名付き URL を返します。

目的: 自動 UUID ファイル名生成付きでセキュアなアバターファイルアップロードのための事前署名付き URL を生成

ルート詳細:

  • メソッド: GET
  • パス: /user-profiles/:profileId/avatar-upload-url
  • 認証: 必須 (Bearer トークン)

ブロック: generateSignedAvatarUploadUrl, orThrow

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), ownsProfile(['params', 'requestParams', 'profileId']))

使用法:

import { routes } from '@nodeblocks/backend-sdk';

// 機能コンポジションで使用:
export const getAvatarUploadUrlFeature = compose(getAvatarUploadUrlSchema, getAvatarUploadUrlRoute);