メインコンテンツまでスキップ

テナントモジュール

TenantModuleは、MBC CQRS Serverlessフレームワークでマルチテナント管理機能を提供します。テナントの作成、更新、およびグループ構成の管理が可能です。

アーキテクチャ

インストール

npm install @mbc-cqrs-serverless/tenant

モジュール登録

import { TenantModule } from "@mbc-cqrs-serverless/tenant";

@Module({
imports: [
TenantModule.register({
enableController: true, // 組み込みのRESTコントローラーを有効にする
dataSyncHandlers: [TenantDataSyncHandler], // オプション: カスタム同期ハンドラー
}),
],
})
export class AppModule {}

モジュールオプション

オプション必須説明
enableControllerbooleanいいえ組み込みのTenantControllerを有効または無効にする
dataSyncHandlersType<IDataSyncHandler>[]いいえテナントデータを外部システムに同期するためのカスタムハンドラー

APIリファレンス

TenantServiceメソッド

getTenant(key: DetailKey): Promise<DataModel>

プライマリキーでテナントを取得します。

import { TenantService } from "@mbc-cqrs-serverless/tenant";

@Injectable()
export class MyService {
constructor(private readonly tenantService: TenantService) {}

async findTenant(pk: string, sk: string) {
const tenant = await this.tenantService.getTenant({ pk, sk });
return tenant;
}
}

createCommonTenant(dto: CommonTenantCreateDto, context): Promise<CommandModel>

すべてのテナントの基本構成となる共通テナントを作成します。

const commonTenant = await this.tenantService.createCommonTenant(
{
name: "Common Settings",
attributes: {
defaultLanguage: "en",
timezone: "UTC",
},
},
{ invokeContext }
);

createTenant(dto: TenantCreateDto, context): Promise<CommandModel>

指定されたコードと構成で新しいテナントを作成します。

const tenant = await this.tenantService.createTenant(
{
code: "tenant001",
name: "Tenant One",
attributes: {
industry: "technology",
plan: "enterprise",
},
},
{ invokeContext }
);

updateTenant(key: DetailKey, dto: TenantUpdateDto, context): Promise<CommandModel>

既存のテナント情報を更新します。

const updatedTenant = await this.tenantService.updateTenant(
{ pk: "SYSTEM#tenant001", sk: "TENANT" },
{
name: "Updated Tenant Name",
attributes: {
plan: "premium",
},
},
{ invokeContext }
);

deleteTenant(key: DetailKey, context): Promise<CommandModel>

isDeletedをtrueに設定してテナントを論理削除します。

const deletedTenant = await this.tenantService.deleteTenant(
{ pk: "SYSTEM#tenant001", sk: "TENANT" },
{ invokeContext }
);

addTenantGroup(dto: TenantGroupAddDto, context): Promise<CommandModel>

指定されたロールでテナントにグループを追加します。

const result = await this.tenantService.addTenantGroup(
{
tenantCode: "tenant001",
groupId: "group001",
role: "admin",
},
{ invokeContext }
);

customizeSettingGroups(dto: TenantGroupUpdateDto, context): Promise<CommandModel>

特定のテナントロールの設定グループをカスタマイズします。

const result = await this.tenantService.customizeSettingGroups(
{
tenantCode: "tenant001",
role: "admin",
settingGroups: ["group001", "group002", "group003"],
},
{ invokeContext }
);

createTenantGroup(tenantGroupCode: string, dto: TenantCreateDto, context): Promise<CommandModel>

既存のテナントの下にサブテナントまたはテナントグループを作成します。

const tenantGroup = await this.tenantService.createTenantGroup(
"tenant001", // 親テナントコード
{
code: "department-a",
name: "Department A",
attributes: {
department: "engineering",
},
},
{ invokeContext }
);

DTO

TenantCreateDto

プロパティ必須説明
codestringはい一意のテナントコード
namestringはいテナント表示名
attributesobjectいいえ追加のテナント属性

TenantGroupAddDto

プロパティ必須説明
tenantCodestringはい対象テナントコード
groupIdstringはい追加するグループ識別子
rolestringはいグループのロール

TenantGroupUpdateDto

プロパティ必須説明
tenantCodestringはい対象テナントコード
rolestringはい更新するロール
settingGroupsstring[]はい新しい設定グループ配列

CommonTenantCreateDto

プロパティ必須説明
namestringはい共通テナント表示名
attributesobjectいいえ追加の属性

TenantUpdateDto

プロパティ必須説明
codestringいいえテナントコード(更新時はオプション)
namestringいいえテナント表示名
attributesobjectいいえ追加のテナント属性

インターフェース

ITenantService

ITenantServiceインターフェースは、テナント管理操作の契約を定義します。依存性注入やテスト用のモック実装の作成に使用できます。

import { ITenantService } from "@mbc-cqrs-serverless/tenant";

インターフェースには以下のメソッドが含まれています:

  • getTenant(key: DetailKey): Promise<DataModel>
  • createTenant(dto: TenantCreateDto, context): Promise<CommandModel>
  • updateTenant(key: DetailKey, dto: TenantUpdateDto, context): Promise<CommandModel>
  • deleteTenant(key: DetailKey, context): Promise<CommandModel>
  • createCommonTenant(dto: CommonTenantCreateDto, context): Promise<CommandModel>
  • addTenantGroup(dto: TenantGroupAddDto, context): Promise<CommandModel>
  • customizeSettingGroups(dto: TenantGroupUpdateDto, context): Promise<CommandModel>
注記

createTenantGroupメソッドはTenantServiceで利用可能ですが、ITenantServiceインターフェースには含まれていません。

関連項目