🎯 既存スキーマのオーバーライド
このガイドでは、検証ルールのカスタマイズ、新しいフィールドの追加、または既存フィールド制約の変更のために既存のNodeBlocksスキーマをオーバーライドおよび拡張する方法を説明します。組み込みの userSchema
にカスタム検証ルールと追加の必須フィールドを追加する方法を示します。
🏗️ スキーマオーバーライドアーキテクチャ
スキーマオーバーライドでは、以下が可能になります:
- 既存スキーマの拡張 - SDKの定義済みスキーマを基盤に構築
- カスタム検証の追加 - ドメイン固有の検証ルールを実装
- フィールド制約の変更 - 最小/最大値、パターン、または型を変更
- 必須フィールドの制御 - 必要に応じてフィールドを必須またはオプションに設定
1️⃣ 組み込みスキーマの理解
NodeBlocks は一般的なエンティティ用に事前構築されたスキーマを提供します。 userSchema
には標準的なユーザーフィールドが含まれます:
// 組み込み userSchema 構造
{
type: 'object',
properties: {
email: { type: 'string' }, // メールアドレス
name: { type: 'string' }, // ユーザー名
status: { type: 'string' } // ステータス
// ... その他の組み込みプロパティ
},
additionalProperties: false // 追加プロパティを許可しない
}
2️⃣ 基本スキーマオーバーライド
既存のスキーマをカスタム検証でオーバーライドする方法は以下の通りです:
src/schemas/customUserSchema.ts
import {
primitives,
schemas,
} from '@nodeblocks/backend-sdk';
const { withSchema } = primitives;
const { userSchema } = schemas;
export const createUserSchema = withSchema({
requestBody: {
content: {
'application/json': {
schema: {
// 既存スキーマを展開
...userSchema,
properties: {
// 既存プロパティを展開
...userSchema.properties,
// 新しいプロパティをオーバーライドまたは追加
age: {
type: 'number', // 年齢フィールド
minimum: 18, // 最小値18歳
maximum: 100, // 最大値100歳
}
},
// 既存必須フィールドに加えてageを必須に
required: ['age'],
},
},
},
required: true, // リクエストボディ必須
},
});
3️⃣ スキーマオーバーライドパターン
パターン1: フィールドの追加
// 新しいオプションフィールドを追加
schema: {
...existingSchema,
properties: {
...existingSchema.properties,
newField: { type: 'string' } // 新しいフィールド
}
}
パターン2: フィールドを必須に設定
// 既存のオプションフィールドを必須に設定
schema: {
...existingSchema,
required: [...(existingSchema.required || []), 'existingField'] // 必須フィールドに追加
}
パターン3: フィールド制約のオーバーライド
// 既存フィールドをより厳格な検証でオーバーライド
properties: {
...existingSchema.properties,
email: {
...existingSchema.properties.email,
pattern: '^[company-domain]@company\\.com$' // 会社ドメインのみ許可
}
}
パターン4: フィールドの削除
// 分割代入によりフィールドを削除
const { unwantedField, ...allowedProperties } = existingSchema.properties;
schema: {
...existingSchema,
properties: allowedProperties // 不要なフィールドを除去したプロパティ
}
➡️ 次のステップ
これでスキーマを強化できるようになりました:
- カスタム検証ルールの追加 - ビジネス固有の制約を実装
- 再利用可能なスキーマコンポーネントの作成 - 一般的なスキーマパターンのライブラリを構築
- 複雑な検証の実装 - 条件付きスキーマとカスタムバリデーションを使用
- スキーマ検証のテスト - オーバーライド用の包括的なテストスイートを作成
🔗 関連項目
- 複合サービスの作成 - カスタムスキーマで複数のサービスを組み合わせる
- サービスコンポーネント - サービスアーキテクチャを理解
- 機能コンポーネント - 機能構成について学習
- エラーハンドリング - 検証エラーを適切に処理