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

🏢 Organization ルート

Organization ルートは、NodeBlocks アプリケーションにおける組織管理操作のための事前構成済み HTTP エンドポイントを提供します。これらのルートは、ブロック、ターミネーター、バリデーターを組み合わせて、適切な認証、認可、エラー処理を持つ完全な API エンドポイントを作成します。


🎯 概要

Organization ルートは以下を目的として設計されています:

  • 組織管理操作のための完全な API エンドポイントを提供
  • 安全な操作のためにブロックをターミネーターと組み合わせ
  • 認証と認可チェックを含む
  • 関数型構成パターンをサポート
  • ログとエラー管理を自動的に処理

📋 ルート構造

各組織ルートは、一貫したパターンに従います:

  • HTTP メソッド: 操作タイプを定義(GET、POST、PATCH、DELETE)
  • パス: パラメータを含むエンドポイント URL を指定
  • ハンドラー: ブロックとターミネーターを使用した構成関数チェーン
  • バリデーター: 認証と認可チェック

🔧 利用可能な Organization ルート

createOrganizationRoute

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

目的: 完全なリソース取得で組織作成を処理

ルート詳細:

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

ブロック: createOrganization, getOrganizationById, calculateChildAncestors, normalizeLogoOfOwner ターミネーター: normalizeOrganizationTerminator

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

使用法:

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

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

getOrganizationRoute

ID で特定の組織を取得します。

目的: アクセス制御付きで組織データを取得

ルート詳細:

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

ブロック: getOrganizationById, normalizeLogoOfOwner ターミネーター: normalizeOrganizationTerminator

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner', 'admin', 'member'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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

findOrganizationsRoute

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

目的: ページネーションとアクセス制御付きで組織を一覧表示

ルート詳細:

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

ブロック: findOrganizations, normalizeLogosOfOwners ターミネーター: normalizeOrganizationsListTerminator

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

使用法:

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

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

updateOrganizationRoute

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

目的: アクセス制御付きで組織データを変更

ルート詳細:

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

ブロック: updateOrganization, getOrganizationById, normalizeLogoOfOwner ターミネーター: normalizeOrganizationTerminator

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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

deleteOrganizationRoute

ID で組織を削除します。

目的: アクセス制御付きで組織を削除

ルート詳細:

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

ブロック: getOrganizationById, deleteLogoOfOwner, deleteOrganization ターミネーター: deleteOrganizationTerminator

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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

getOrganizationMemberRoleRoute

組織内の特定のメンバーの役割を取得します。

目的: 組織内のメンバー役割を取得

ルート詳細:

  • メソッド: GET
  • パス: /organizations/:organizationId/members/:identityId/role
  • 認証: 必須(Bearer トークン)

ブロック: getOrganizationById, buildOrganizationsForMemberByIdsQuery, findOrganizations, calculateMemberRole

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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

checkOrganizationMemberExistenceRoute

組織内にメンバーが存在するかどうかをチェックします。

目的: 組織内のメンバーシップを確認

ルート詳細:

  • メソッド: GET
  • パス: /organizations/:organizationId/members/check-existence
  • 認証: 必須(Bearer トークン)

ブロック: getOrganizationById, checkOrganizationMemberExistence ターミネーター: normalizeOrganizationMemberExistenceTerminator

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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

findOrganizationMembersRoute

組織内のすべてのメンバーを取得します。

目的: 組織メンバーを一覧表示

ルート詳細:

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

ブロック: findOrganizationMembers ターミネーター: normalizeOrganizationMembersListTerminator

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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

upsertOrganizationMembersRoute

組織内でメンバーを作成または更新します。

目的: 組織メンバーのメンバーシップを管理

ルート詳細:

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

ブロック: getOrganizationById, upsertOrganizationMembers ターミネーター: upsertOrganizationMembersTerminator

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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

deleteOrganizationMemberRoute

組織からメンバーを削除します。

目的: 組織メンバーシップからメンバーを削除

ルート詳細:

  • メソッド: DELETE
  • パス: /organizations/:organizationId/members/:identityId
  • 認証: 必須(Bearer トークン)

ブロック: deleteOrganizationMember ターミネーター: deleteOrganizationMemberTerminator

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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

findOrganizationsForMemberRoute

特定のアイデンティティ(メンバー)のすべての組織を取得します。includeInherited=true クエリパラメータ経由で子孫組織からの継承役割のオプションを含むをサポートします。

目的: アイデンティティがメンバーである組織を一覧表示、オプションで継承役割付き

ルート詳細:

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

ブロック: buildOrganizationsForMemberByRoleQuery, findOrganizations, normalizeLogosOfOwners, buildOrganizationsWithDescendantsQuery, extractAncestors, buildOrganizationsForMemberByIdsQuery, calculateMemberRoleForOrganizations, normalizeOrganizationsForMember

ターミネーター: 役割情報付きで組織リストをフォーマット;orThrow 経由で成功/エラーマッピング

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

使用法:

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

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

getLogoUploadUrlRoute

GET /organizations/:organizationId/logo-upload-url 経由で組織ロゴの署名付きアップロード URL を生成します。

目的: 組織ロゴを安全にアップロードするための署名付き URL を発行します。

ルート詳細:

  • メソッド: GET
  • パス: /organizations/:organizationId/logo-upload-url
  • 認証: 必須(Bearer トークン)

ブロック: generateSignedLogoUploadUrl ターミネーター: orThrow 経由の組み込み成功/エラーマッピング

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner'], ['params', 'requestParams', 'organizationId']))

使用法:

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

// 機能構成で使用:
export const logoUploadFeature = compose(logoUploadSchema, getLogoUploadUrlRoute);

findOrganizationDescendantsRoute

指定された組織のすべての子孫組織を取得します。

目的: 組織ツリーの子孫を一覧表示;?depth=<n> クエリパラメータ経由で深さをサポート

ルート詳細:

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

ブロック: getOrganizationById, buildDescendantsQuery, findOrganizations, normalizeOrganizations

ターミネーター: orThrow 経由の成功/エラーマッピングで子孫組織リストを正規化

バリデーター: isAuthenticated, some(checkIdentityType(['admin']), hasOrgRole(['owner', 'admin'], ['params', 'requestParams', 'organizationId']))

使用法:

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

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