UI設定モジュール
UI Settingパッケージは、コード変更なしで動的なアプリケーション設定を管理するための柔 軟なフレームワークを提供します。管理者がカスタムフィールドを定義し、ユーザーがそのスキーマに準拠したデータを保存できるようにします。
このパッケージを使用するタイミング
以下の場合にこのパッケージを使用します:
- 開発者の介入なしに管理者がカスタムフォームを定義できるようにする
- テナント固有の設定(テーマ、プリファレンス、制限)を保存する
- ユーザーが編集可能な通知やメールテンプレート設定を作成する
- 設定可能なドロップダウンリストやマスターデータテーブルを構築する
このパッケージが解決する問題
| 問題 | 解決策 |
|---|---|
| 新しい設定ごとにコードのデプロイが必要 | APIを通じてスキーマを動的に定義 |
| テナント間で設定構造が異なる | マルチテナントスキーマサポート |
| ユーザー入力設定のバリデーションがない | フィールド定義でデータ型と制約を強制 |
| 設定用の管理UIを構築するのが困難 | スキーマイントロスペクション付きREST API |
コアコンセプト
このモジュールは2つの主要コンポーネントで動作します:
-
設定: データエントリのスキーマ/構造を定義します。各設定にはコード、名前、およびデータ構造を記述するフィールドのリストがあります。
-
データ設定: 設定のスキーマに準拠する実際のデータエントリ。各データ設定は特定の設定コードに属します。
インストール
npm install @mbc-cqrs-serverless/ui-setting
モジュール設定
アプリケーションにSettingModuleを登録します:
import { Module } from '@nestjs/common';
import { SettingModule } from '@mbc-cqrs-serverless/ui-setting';
@Module({
imports: [
SettingModule.register({
enableSettingController: true, // Enable REST API for settings (設定のREST APIを有効化)
enableDataController: true, // Enable REST API for data settings (データ設定のREST APIを有効化)
}),
],
})
export class AppModule {}
設定オプション
| オプション | 型 | 説明 |
|---|---|---|
enableSettingController | boolean | 設定REST APIコントローラーを有効化 |
enableDataController | boolean | データ設定REST APIコントローラーを有効化 |
Settingサービス
SettingServiceは設定定義を管理します。
利用可能なメソッド
import { Injectable } from '@nestjs/common';
import { SettingService } from '@mbc-cqrs-serverless/ui-setting';
@Injectable()
export class MyService {
constructor(private readonly settingService: SettingService) {}
async example() {
// List all settings for a tenant (テナントの全設定を一覧表示)
const settings = await this.settingService.list(tenantCode);
// Get a specific setting (特定の設定を取得)
const setting = await this.settingService.get({ pk, sk });
// Create a new setting (新しい設定を作成)
const newSetting = await this.settingService.create(
tenantCode,
createDto,
{ invokeContext }
);
// Update a setting (設定を更新)
const updated = await this.settingService.update(
{ pk, sk },
updateDto,
{ invokeContext }
);
// Delete a setting (設定を削除)
const deleted = await this.settingService.delete(
{ pk, sk },
{ invokeContext }
);
// Check if a setting code exists (設定コードの存在確認)
const exists = await this.settingService.checkExistSettingCode(
tenantCode,
code
);
}
}
設定の作成
import { CreateSettingDto } from '@mbc-cqrs-serverless/ui-setting';
const createDto: CreateSettingDto = {
code: 'user-preferences',
name: 'User Preferences',
attributes: {
description: 'User preference settings',
fields: [
{
physicalName: 'theme',
name: 'Theme',
dataType: 'string',
isRequired: true,
isShowedOnList: true,
defaultValue: 'light',
},
{
physicalName: 'language',
name: 'Language',
dataType: 'string',
isRequired: true,
isShowedOnList: true,
defaultValue: 'en',
},
{
physicalName: 'pageSize',
name: 'Page Size',
dataType: 'number',
isRequired: false,
isShowedOnList: false,
min: '10',
max: '100',
defaultValue: '20',
},
],
},
};
フィールド定義
設定内の各フィールドには以下のプロパティを設定できます:
| プロパティ | 型 | 必須 | 説明 |
|---|---|---|---|
physicalName | string | はい | フィールドの一意識別子 |
name | string | はい | 表示名 |
description | string | いいえ | フィールドの説明 |
dataType | string | はい | データ型(string、number、booleanなど) |
min | string | いいえ | 数値フィールドの最小値 |
max | string | いいえ | 数値フィールドの最大値 |
length | string | いいえ | 文字列フィールドの最大長 |
maxRow | number | いいえ | 複数行テキストの最大行数 |
defaultValue | string | いいえ | フィールドのデフォルト値 |
isRequired | boolean | はい | フィールドが必須かどうか |
isShowedOnList | boolean | はい | リストビューに表示するかどうか |
dataFormat | string | いいえ | データのフォーマット指定 |