🔍 組織スキーマ
組織スキーマは、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- メンバーアイデンティティIDrole: 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- 組織タイプIDcertificateImage?: { 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- ロゴ参照またはnulltypeId?: string- 組織タイプIDauditStatus?: 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パスパラメータは必須で、有効な文字列である必要がある- 追加のパスパラメータは許可されない
- リクエストボディは期待されず、バリデーションされない
- クエリパラメータ
pageとlimitはオプション
一般的なバリデーションエラー:
- 必須の
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;
}
}
}
🔗 関連ドキュメント
- 組織ドメイン概要 - 組織ドメイン概要