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

🔍 組織スキーマ

組織スキーマは、Nodeblocksアプリケーションで組織データのバリデーション用のJSON Schema定義を提供します。これらのスキーマはデータ整合性を確保し、組織関連のAPIエンドポイントの明確な契約を提供します。


🎯 概要

組織スキーマは以下の目的で設計されています:

  • 処理前に組織データをバリデーション - データ検証を実装
  • 組織内のメンバーロール管理をサポート - ロール管理を提供
  • 組織メンバーシップと権限を処理 - アクセス制御を実装
  • 組織検索とフィルタリング機能を有効化 - 検索機能を提供
  • 組織分離によるマルチテナントアプリケーションをサポート - 分離を実現
  • 連絡先と住所管理を提供 - 連絡先情報を管理

📋 組織スキーマタイプ

基本組織スキーマ

他のスキーマの基礎として使用されるコア組織構造。

組織作成スキーマ

必須フィールドのバリデーション付きの組織作成用スキーマ。

組織更新スキーマ

オプションフィールドのバリデーション付きの組織変更用スキーマ。

組織メンバー管理スキーマ

組織内のメンバーロールとメンバーシップを管理するスキーマ。

組織クエリスキーマ

組織フィルタリングとページネーションパラメータ用のスキーマ。


🔧 利用可能な組織スキーマ

organizationSchema

組織データの構造を定義する基本組織スキーマ。

目的: 連絡先情報を含む組織データの構造を定義

スキーマ詳細:

  • Type: object
  • 必須フィールド: なし(基本スキーマ)
  • 追加プロパティ: false(厳密なバリデーション)
  • プロパティ:
    • name?: string - 組織名(最小長1)
    • description?: string - 組織の説明
    • contact_email?: string - 組織の連絡先メールアドレス(メール形式)
    • contact_phone?: string - 組織の連絡先電話番号
    • address?: object - 組織の住所オブジェクト
    • logo?: { objectId: string; type: string } | null - 組織ロゴ記述子またはnull

使用例:

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

const { organizationSchema } = schemas;

const validate = ajv.compile(organizationSchema as SchemaDefinition);
const isValid = validate({
name: 'Acme Corporation',
description: 'A leading technology company',
contact_email: 'contact@acme.com',
});

createOrganizationSchema

新しい組織用の必須フィールド付きの組織作成スキーマ。

目的: 作成中の組織データをバリデーション

スキーマ詳細:

  • Type: object
  • 必須フィールド: organization.name, organization.description, organization.contact_email, ownerId
  • オプションフィールド: organization.contact_phone, organization.address, parentId
  • 追加プロパティ: false(厳密なバリデーション)
  • Content-Type: application/json
  • Request Body: required

使用例:

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

const { createOrganizationSchema } = schemas;

const organizationSchema = createOrganizationSchema({});
const validate = ajv.compile(organizationSchema.schemas as SchemaDefinition);
const isValid = validate({
organization: {
name: 'Acme Corporation',
description: 'A leading technology company',
contact_email: 'contact@acme.com',
contact_phone: '+1-555-0123'
},
ownerId: 'identity123'
});

organizationMembersSchema

組織内のメンバーロールを管理するための組織メンバースキーマ。

目的: 組織メンバー割り当ての構造を定義

スキーマ詳細:

  • Type: array
  • 必須フィールド: identityId, role(各アイテムに対して)
  • 最小アイテム数: 1
  • 追加プロパティ: false(厳密なバリデーション)
  • プロパティ:
    • identityId: string - メンバーアイデンティティID
    • role: string - 組織内のメンバーロール

使用例:

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

const { organizationMembersSchema } = schemas;

const validate = ajv.compile(organizationMembersSchema as SchemaDefinition);
const isValid = validate([
{ identityId: 'identity1', role: 'admin' },
{ identityId: 'identity2', role: 'member' }
]);

upsertOrganizationMembersSchema

組織内のメンバーロールを管理するための組織メンバーアップサートスキーマ。

目的: 組織のメンバーロール割り当てをバリデーション

スキーマ詳細:

  • Type: array
  • 必須フィールド: identityId, role(各アイテムに対して)
  • 最小アイテム数: 1
  • 追加プロパティ: false(厳密なバリデーション)
  • Content-Type: application/json
  • パラメータ: organizationId(パスパラメータ)
  • Request Body: required

使用例:

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

const { upsertOrganizationMembersSchema } = schemas;

const membersSchema = upsertOrganizationMembersSchema({});
const validate = ajv.compile(membersSchema.schemas as SchemaDefinition);
const isValid = validate([
{ identityId: 'identity1', role: 'admin' },
{ identityId: 'identity2', role: 'member' }
]);

updateOrganizationSchema

組織変更用のオプションフィールド付きの組織更新スキーマ。

目的: 部分的な組織データ更新をバリデーション

スキーマ詳細:

  • Type: object
  • 必須フィールド: なし(すべてのフィールドがオプション)
  • 追加プロパティ: false(厳密なバリデーション)
  • Content-Type: application/json
  • パラメータ: organizationId(パスパラメータ)
  • Request Body: required

使用例:

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

const { updateOrganizationSchema } = schemas;

const organizationSchema = updateOrganizationSchema({});
const validate = ajv.compile(organizationSchema.schemas as SchemaDefinition);
const isValid = validate({
description: 'Updated description',
contact_phone: '+1-555-9999'
});

getOrganizationSchema

単一の組織を取得するための組織取得スキーマ。

目的: 特定の組織を取得するリクエストをバリデーション

スキーマ詳細:

  • パラメータ: organizationId(パスパラメータ)
  • 目的: 特定の組織を取得するリクエストをバリデーション

使用例:

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

const { getOrganizationSchema } = schemas;

const organizationSchema = getOrganizationSchema({});
const validate = ajv.compile(organizationSchema.schemas as SchemaDefinition);
const isValid = validate({
organizationId: 'org123'
});

deleteOrganizationSchema

組織を削除するための組織削除スキーマ。

目的: 特定の組織を削除するリクエストをバリデーション

スキーマ詳細:

  • パラメータ: organizationId(パスパラメータ)
  • 目的: 特定の組織を削除するリクエストをバリデーション

使用例:

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

const { deleteOrganizationSchema } = schemas;

const organizationSchema = deleteOrganizationSchema({});
const validate = ajv.compile(organizationSchema.schemas as SchemaDefinition);
const isValid = validate({
organizationId: 'org123'
});

getOrganizationMemberRoleSchema

組織内のメンバーロールを取得するための組織メンバーロール取得スキーマ。

目的: 組織内のメンバーロールを取得するリクエストをバリデーション

スキーマ詳細:

  • パラメータ: organizationId, identityId(パスパラメータ)
  • 目的: 組織内のメンバーロールを取得するリクエストをバリデーション

使用例:

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

const { getOrganizationMemberRoleSchema } = schemas;

const memberRoleSchema = getOrganizationMemberRoleSchema({});
const validate = ajv.compile(memberRoleSchema.schemas as SchemaDefinition);
const isValid = validate({
organizationId: 'org123',
identityId: 'identity456'
});

checkOrganizationMemberExistenceSchema

メンバーメンバーシップを確認するための組織メンバー存在チェックスキーマ。

目的: 組織内のメンバー存在をチェックするリクエストをバリデーション

スキーマ詳細:

  • パラメータ: organizationId(パスパラメータ)、identityId(クエリパラメータ)
  • 目的: 組織内のメンバー存在をチェックするリクエストをバリデーション

使用例:

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

const { checkOrganizationMemberExistenceSchema } = schemas;

const memberExistenceSchema = checkOrganizationMemberExistenceSchema({});
const validate = ajv.compile(memberExistenceSchema.schemas as SchemaDefinition);
const isValid = validate({
organizationId: 'org123',
identityId: 'identity456'
});

findOrganizationMembersSchema

組織内のメンバーを検索するための組織メンバー検索スキーマ。

目的: 組織内のメンバーを検索するリクエストをバリデーション

スキーマ詳細:

  • パラメータ: organizationId(パスパラメータ)
  • 目的: 組織内のメンバーを検索するリクエストをバリデーション

使用例:

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

const { findOrganizationMembersSchema } = schemas;

const membersSchema = findOrganizationMembersSchema({});
const validate = ajv.compile(membersSchema.schemas as SchemaDefinition);
const isValid = validate({
organizationId: 'org123'
});

deleteOrganizationMemberSchema

組織からメンバーを削除するための組織メンバー削除スキーマ。

目的: 組織からメンバーを削除するリクエストをバリデーション

スキーマ詳細:

  • パラメータ: organizationId, identityId(パスパラメータ)
  • 目的: 組織からメンバーを削除するリクエストをバリデーション

使用例:

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

const { deleteOrganizationMemberSchema } = schemas;

const memberDeletionSchema = deleteOrganizationMemberSchema({});
const validate = ajv.compile(memberDeletionSchema.schemas as SchemaDefinition);
const isValid = validate({
organizationId: 'org123',
identityId: 'identity456'
});

findOrganizationsForMemberSchema

特定のメンバーの組織を検索するスキーマで、オプションのロールとincludeInheritedクエリパラメータをサポート。

目的: 特定のメンバーに関連付けられた組織のリクエストをバリデーションし、オプションでロールと継承でフィルタリング

スキーマ詳細:

  • パスパラメータ: identityId(必須)
  • クエリパラメータ: roles?, includeInherited?

使用例:

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

const { findOrganizationsForMemberSchema } = schemas;

const memberOrgsSchema = findOrganizationsForMemberSchema({});
const validate = ajv.compile(memberOrgsSchema.schemas as SchemaDefinition);
const isValid = validate({
identityId: 'identity456',
roles: 'admin',
includeInherited: true
});

findOrganizationsSchema

フィルタリングとページネーション付きで組織を検索するための組織検索スキーマ。

目的: 組織を検索およびページネーションするリクエストをバリデーション

スキーマ詳細:

  • クエリパラメータ:
    • contact_email?: string - 連絡先メールアドレスでフィルタ(メール形式)
    • contact_phone?: string - 連絡先電話番号でフィルタ
    • description?: string - 説明でフィルタ
    • name?: string - 名前でフィルタ(最小長1)
    • page?: number - ページネーションページ番号
    • limit?: number - ページネーション制限
  • 目的: 組織を検索およびページネーションするリクエストをバリデーション

使用例:

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

const { findOrganizationsSchema } = schemas;

const organizationsSchema = findOrganizationsSchema({});
const validate = ajv.compile(organizationsSchema.schemas as SchemaDefinition);
const isValid = validate({
name: 'Acme',
contact_email: 'contact@acme.com',
page: 1,
limit: 10
});

findOrganizationDescendantsSchema

階層内の子孫組織を取得するための組織子孫取得スキーマ。

目的: オプションの深さ制御付きで子孫組織を取得するリクエストをバリデーション

スキーマ詳細:

  • パラメータ: organizationId(パスパラメータ)、depth?(オプションのクエリパラメータ、数値 >= 1)

使用例:

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

const { findOrganizationDescendantsSchema } = schemas;

const descendantsSchema = findOrganizationDescendantsSchema({});
const validate = ajv.compile(descendantsSchema.schemas as SchemaDefinition);
const isValid = validate({
organizationId: 'org123',
depth: 2
});

getCertificateUploadUrlSchema

必須クエリバリデーション付きの組織証明書アップロードURLスキーマ。

目的: ファイルタイプとサイズのバリデーション付きで証明書アップロードURL生成リクエストをバリデーション

スキーマ詳細:

  • Type: object
  • 必須フィールド: organizationId(パスパラメータ)、contentType(クエリパラメータ)、contentLength(クエリパラメータ)
  • 許可されるContent Type:
    • application/pdf - PDF証明書
    • image/gif - GIF画像
    • image/jpeg - JPEG画像
    • image/png - PNG画像
  • 最大Content Length: 10MB(contentLengthQueryParameterで強制)
  • レスポンス: { objectId: string; url: string } - UUIDオブジェクトIDと署名付きアップロードURL

スキーマ構造:

{
contentType: "application/pdf" | "image/gif" | "image/jpeg" | "image/png"; // required
contentLength: number; // required - file size in bytes (max 10MB)
}

使用例:

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

const { getCertificateUploadUrlSchema } = schemas;

// 機能合成に適用:
export const getCertificateUploadUrlFeature = compose(
getCertificateUploadUrlSchema,
getCertificateUploadUrlRoute
);

createChangeRequestSchema

リクエストボディバリデーション付きの組織変更リクエスト作成スキーマ。

目的: 柔軟なフィールドサポート付きで組織変更リクエストの送信をバリデーション

スキーマ詳細:

  • Type: object
  • 必須フィールド: organizationId(パスパラメータ)、リクエストボディに少なくとも1つのプロパティ
  • オプションのリクエストボディフィールド:
    • name?: string - 組織名(最小長1)
    • addressLine1?: string - 住所1行目
    • addressLine2?: string - 住所2行目
    • addressLine3?: string - 住所3行目
    • branchName?: string - 支店名
    • postalCode?: string - 郵便番号
    • typeId?: string - 組織タイプID
    • certificateImage?: { objectId: string; type: string } - 証明書画像参照
    • certifiedQualifications?: Array<{ name: string; status: string; value: string }> - 資格リスト
  • レスポンス: 204 No Content - 成功時に空のレスポンスボディ
  • 追加プロパティ: false(厳密なバリデーション)
  • 最小プロパティ: 1(少なくとも1つのフィールドを提供する必要がある)

スキーマ構造:

{
addressLine1?: string; // optional - address line 1
addressLine2?: string; // optional - address line 2
addressLine3?: string; // optional - address line 3
branchName?: string; // optional - branch name
certificateImage?: { // optional - certificate image reference
objectId: string; // required - storage object id (uuid)
type: string; // required - MIME type
};
certifiedQualifications?: { // optional - qualifications list
name: string; // required - qualification name
status: string; // required - qualification status
value: string; // required - qualification value
}[];
name?: string; // optional - organization name (min length 1)
postalCode?: string; // optional - postal code
typeId?: string; // optional - organization type ID
}

主な機能:

  • 部分的な組織更新をサポートする柔軟なスキーマ
  • objectId参照による証明書画像アップロードサポート
  • 構造化データによる認定資格の追跡
  • waiting_for_reviewへの自動監査ステータス更新
  • アイデンティティ抽出によるトークンベース認証

使用例:

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

const { createChangeRequestSchema } = schemas;

// 機能合成に適用:
export const createChangeRequestFeature = compose(
createChangeRequestSchema,
createChangeRequestRoute
);

// リクエストボディの例:
const changeRequest = {
name: 'Updated Organization Name',
addressLine1: '123 Main Street',
certificateImage: {
objectId: '550e8400-e29b-41d4-a716-446655440000',
type: 'application/pdf'
},
certifiedQualifications: [
{
name: 'ISO 9001:2015',
status: 'approved',
value: '2024'
}
]
};

findChangeRequestsForOrganizationSchema

ページネーションサポート付きの組織変更リクエスト取得スキーマ。

目的: 特定の組織の変更リクエストを取得するパラメータをバリデーション

スキーマ詳細:

  • Type: object
  • 必須フィールド: organizationId(パスパラメータ)
  • オプションのクエリパラメータ:
    • page?: number - ページネーションページ番号(1-1000、デフォルト: 1)
    • limit?: number - ページあたりのページネーション制限(1-50、デフォルト: 10)
  • 追加プロパティ: false(厳密なバリデーション)

スキーマ構造:

{
organizationId: string; // required - path parameter for organization
page?: number; // optional - pagination page (1-1000)
limit?: number; // optional - pagination size (1-50)
}

主な機能:

  • 組織IDのパスパラメータバリデーション
  • ページネーションクエリパラメータサポート
  • 標準的なページネーションスキーマパラメータの再利用

使用例:

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

const { findChangeRequestsForOrganizationSchema } = schemas;

// 機能合成に適用:
export const findChangeRequestsForOrganizationFeature = compose(
findChangeRequestsForOrganizationSchema,
findChangeRequestsForOrganizationRoute
);

// URLの例:
/organizations/org-123/change-requests?page=1&limit=20

updateOrganizationAsAdminSchema

パスと拡張リクエストボディバリデーション付きの組織管理者更新スキーマ。

目的: 監査ステータスを含むすべてのフィールドへのアクセスで管理者レベルの組織更新をバリデーション

スキーマ詳細:

  • Type: object
  • 必須フィールド: organizationId(パスパラメータ)
  • オプションのリクエストボディフィールド:
    • 共通フィールド(すべてのユーザーが利用可能):
      • branchName?: string - 支店名
      • contact_email?: string - 連絡先メールアドレス(メール形式)
      • contact_phone?: string - 連絡先電話番号
      • description?: string - 組織の説明
    • 管理者承認フィールド(管理者専用更新):
      • name?: string - 組織名(最小長1)
      • address?: object - 住所情報
      • certificateImage?: { objectId: string; type: string } - 証明書画像参照
      • certifiedQualifications?: Array<{ name: string; status: string; value: string }> - 資格リスト
      • logo?: { objectId: string; type: string } | null - ロゴ参照またはnull
      • typeId?: string - 組織タイプID
      • auditStatus?: string - 監査ステータス(validateAuditStatusブロックでバリデーション、スキーマではバリデーションしない)
  • レスポンス: 200 OK - 正規化されたロゴURL付きで更新された組織を返す
  • 追加プロパティ: false(厳密なバリデーション)

スキーマ構造:

{
organizationId: string; // required - path param (organization ID)
}

Request body (application/json):
{
// Common fields
branchName?: string; // optional - branch name
contact_email?: string; // optional - contact email (email format)
contact_phone?: string; // optional - contact phone
description?: string; // optional - description

// Admin-approved fields
name?: string; // optional - organization name (min length 1)
address?: object; // optional - address information
certificateImage?: { // optional - certificate image reference
objectId: string; // required - storage object id (uuid)
type: string; // required - MIME type
};
certifiedQualifications?: { // optional - qualifications list
name: string; // required - qualification name
status: string; // required - qualification status
value: string; // required - qualification value
}[];
logo?: { objectId: string; type: string } | null; // optional - logo reference or null
typeId?: string; // optional - organization type ID

// Note: auditStatus is validated in validateAuditStatus block, not in schema
auditStatus?: string; // optional - audit status (validated elsewhere)
}

主な機能:

  • 管理者専用アクセス(管理者アイデンティティタイプが必要)
  • 名前変更を含む拡張フィールドアクセス
  • 証明書画像と認定資格のサポート
  • 変更リクエストワークフロー用の監査ステータス更新
  • すべての共通フィールドと管理者承認フィールドが利用可能
  • 柔軟な部分更新(すべてのフィールドがオプション)

使用例:

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

const { updateOrganizationAsAdminSchema } = schemas;

// 機能合成に適用:
export const updateOrganizationAsAdminFeature = compose(
updateOrganizationAsAdminSchema,
updateOrganizationAsAdminRoute
);

// リクエストボディの例:
const adminUpdate = {
name: 'Updated Organization Name',
auditStatus: 'approved',
certificateImage: {
objectId: '550e8400-e29b-41d4-a716-446655440000',
type: 'application/pdf'
},
certifiedQualifications: [
{
name: 'ISO 9001:2015',
status: 'approved',
value: '2024'
}
]
};

findByOrganizationIdSchema

パスパラメータバリデーションとページネーションサポート付きの組織スコープリソース取得スキーマ。

目的: 特定の組織にスコープされたリソースを取得するリクエストをバリデーションし、組織IDが提供されていることを確保し、ページネーションパラメータをサポート。

スキーマ詳細:

  • Type: object
  • 必須フィールド: organizationId(パスパラメータ)
  • オプションのクエリパラメータ: page, limit(ページネーション用)
  • Request Body: 不要(空のボディ)
  • Content-Type: N/A(ボディバリデーションなし)
  • パスパラメータ: 必須

スキーマ構造:

{
parameters: [
{
in: 'path',
name: 'organizationId',
required: true,
schema: { type: 'string' }
}
]
}

Query parameters (optional):
{
page?: number; // optional - page number for pagination (default: 1)
limit?: number; // optional - results per page (default: 10)
}

主な機能:

  • パスパラメータバリデーション: URLパスに組織IDが提供されていることを確保
  • ボディバリデーションなし: リソース取得にはリクエストボディが不要
  • ページネーションサポート: オプションのpageとlimitクエリパラメータを受け入れる
  • 型安全性: 組織識別子の文字列型をバリデーション

使用例:

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

const { findByOrganizationIdSchema } = schemas;

// ルートに適用
const route = withRoute({
handler: findResourcesByOrganizationIdHandler,
method: 'GET',
path: '/resources/organizations/:organizationId'
});

const validatedRoute = findByOrganizationIdSchema(route);

一般的な使用例:

  • 組織IDによる注文の検索
  • 組織IDによる製品の検索
  • ページネーション付きの任意の組織スコープリソースの検索

getOrganizationFollowersSchema

パスパラメータバリデーションとページネーションサポート付きの組織フォロワー取得スキーマ。

目的: 組織のフォロワーを取得するリクエストをバリデーションし、組織IDが提供されていることを確保し、ページネーションパラメータをサポート。

スキーマ詳細:

  • Type: object
  • 必須フィールド: organizationId(パスパラメータ)
  • オプションのクエリパラメータ: page, limit(ページネーション用)
  • Request Body: 不要(空のボディ)
  • Content-Type: N/A(ボディバリデーションなし)
  • パスパラメータ: 必須

スキーマ構造:

{
parameters: [
{
in: 'path',
name: 'organizationId',
required: true,
schema: { type: 'string' }
}
]
}

Query parameters (optional):
{
page?: number; // optional - page number for pagination (default: 1)
limit?: number; // optional - results per page (default: 20)
}

主な機能:

  • パスパラメータバリデーション: URLパスに組織IDが提供されていることを確保
  • ボディバリデーションなし: フォロワー取得にはリクエストボディが不要
  • ページネーションサポート: オプションのpageとlimitクエリパラメータを受け入れる
  • 型安全性: 組織識別子の文字列型をバリデーション

使用例:

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

const { getOrganizationFollowersSchema } = schemas;

// ルートに適用
const route = withRoute({
handler: getOrganizationFollowersHandler,
method: 'GET',
path: '/organizations/:organizationId/followers'
});

const validatedRoute = getOrganizationFollowersSchema(route);

バリデーションルール:

  • organizationIdパスパラメータは必須で、有効な文字列である必要がある
  • 追加のパスパラメータは許可されない
  • リクエストボディは期待されず、バリデーションされない
  • クエリパラメータpagelimitはオプション

一般的なバリデーションエラー:

  • 必須のorganizationIdパスパラメータが欠落
  • 無効なパラメータタイプ(非文字列organizationId)
  • 追加の予期しないパスパラメータ

APIエンドポイント構造:

GET /organizations/{organizationId}/followers?page=1&limit=20

有効なリクエストの例:

# 🔍 組織org-123のフォロワーの最初のページ
GET /api/organizations/org-123/followers
Authorization: Bearer <token>

# 🔍 1ページあたり50件の結果で2ページ目
GET /api/organizations/org-123/followers?page=2&limit=50
Authorization: Bearer <token>

無効なリクエストの例:

# 🔍 organizationId
GET /api/organizations//followers
# 🔍 400 Bad Request - "path parameter 'organizationId' is required"

# 🔍 organizationIdタイプ
GET /api/organizations/123/followers
# 🔍 組織IDバリデーションが特定の形式を期待する場合に失敗

レスポンススキーマ: バリデーションされたルートはページネーション付きフォロワーデータを返します:

{
data: [
{
id: string;
name: string;
avatar: {
url: string;
type: string;
}
}
],
metadata: {
pagination: {
page: number;
limit: number;
total: number;
totalPages: number;
}
}
}

🔗 関連ドキュメント