メインコンテンツまでスキップ
バージョン: 0.4.2

🔍 商品スキーマブロック

商品スキーマブロックは、Nodeblocksアプリケーションにおける商品データ検証のためのJSONスキーマ定義を提供します。これらのスキーマは、データ整合性を確保し、商品関連のAPIエンドポイントの明確な契約を提供します。


🎯 概要

商品スキーマブロックは以下を目的として設計されています:

  • 処理前の商品データの検証
  • 商品属性とバリエーション管理のサポート
  • 在庫追跡と価格設定の処理
  • 商品検索とフィルタリング機能の実現
  • バッチ操作と一括処理のサポート
  • 商品カテゴリ化と組織化の提供

📋 商品スキーマ種類

ベース商品スキーマ

他のスキーマの基盤として使用されるコア商品構造。

商品作成スキーマ

必須フィールド検証による商品作成のためのスキーマ。

商品更新スキーマ

オプションフィールド検証による商品変更のためのスキーマ。

商品クエリスキーマ

商品フィルタリングとページネーションパラメータのためのスキーマ。


🔧 利用可能な商品スキーマ

productSchema

商品データの構造を定義するベース商品スキーマ。

目的: 価格と在庫情報付き商品データの構造を定義

スキーマ詳細:

  • タイプ: object
  • 必須フィールド: なし(ベーススキーマ)
  • 追加プロパティ: false(厳密な検証)
  • プロパティ:
    • name?: string - 商品名
    • description?: string - 商品説明
    • price?: number - 商品価格(最小0)
    • currency?: string - 価格通貨
    • sku?: string - 商品コード(SKU)
    • stock?: number - 在庫数(最小0)
    • categoryId?: string - カテゴリID
    • organizationId?: string - 組織ID
    • status?: string - 商品ステータス

使用方法:

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

const { productSchema } = schemas;

const productSchema = productSchema({});
const validate = ajv.compile(productSchema.schemas as SchemaDefinition);
const isValid = validate({
name: 'ワイヤレスヘッドホン',
description: '高品質なオーディオ体験',
price: 15000,
currency: 'JPY',
sku: 'WH-001',
stock: 50
});

createProductSchema

新しい商品のための必須フィールド付き商品作成スキーマ。

目的: 作成時の商品データを検証

スキーマ詳細:

  • タイプ: object
  • 必須フィールド: name, price, currency
  • オプションフィールド: description, sku, stock, categoryId, organizationId, status
  • 追加プロパティ: false(厳密な検証)
  • コンテンツタイプ: application/json
  • リクエストボディ: required

使用方法:

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

const { createProductSchema } = schemas;

const productSchema = createProductSchema({});
const validate = ajv.compile(productSchema.schemas as SchemaDefinition);
const isValid = validate({
name: 'スマートウォッチ',
description: '健康管理とフィットネス追跡',
price: 25000,
currency: 'JPY',
sku: 'SW-002',
stock: 30
});

updateProductSchema

商品変更のための商品更新スキーマ。

目的: 部分的な商品更新を検証

スキーマ詳細:

  • タイプ: object
  • 必須フィールド: なし(すべてオプション)
  • オプションフィールド: name, description, price, currency, sku, stock, categoryId, status
  • 追加プロパティ: false(厳密な検証)
  • パラメータ: productId(パスパラメータ)

使用方法:

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

const { updateProductSchema } = schemas;

const productSchema = updateProductSchema({});
const validate = ajv.compile(productSchema.schemas as SchemaDefinition);
const isValid = validate({
price: 22000,
stock: 25,
status: 'active'
});

📦 バッチ操作スキーマ

productBatchSchema

複数商品の一括操作のためのバッチスキーマ。

目的: バッチ操作で複数商品の処理を検証

スキーマ詳細:

  • タイプ: object
  • 必須フィールド: products
  • プロパティ:
    • products: Array<ProductData> - 商品データの配列

使用方法:

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

const { productBatchSchema } = schemas;

const validate = ajv.compile(productBatchSchema);
const isValid = validate({
products: [
{ name: '商品A', price: 1000, currency: 'JPY' },
{ name: '商品B', price: 2000, currency: 'JPY' }
]
});

createProductBatchSchema

バッチ商品作成のための商品作成スキーマ。

目的: 一括作成のための商品データ配列を検証

スキーマ詳細:

  • タイプ: array
  • 必須フィールド: 各項目にname, price, currency
  • 追加プロパティ: false(厳密な検証)
  • コンテンツタイプ: application/json
  • リクエストボディ: required

使用方法:

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

const { createProductBatchSchema } = schemas;

const schema = createProductBatchSchema({});
const validate = ajv.compile(schema.schemas as SchemaDefinition);
const isValid = validate([
{ name: '商品A', price: 1000, currency: 'JPY' },
{ name: '商品B', price: 2000, currency: 'JPY' }
]);

updateProductBatchSchema

同じデータでの複数商品更新のための商品バッチ更新スキーマ。

目的: 商品IDと更新データによる一括更新を検証

スキーマ詳細:

  • タイプ: object
  • 必須フィールド: ids, data
  • 追加プロパティ: false(厳密な検証)
  • コンテンツタイプ: application/json
  • リクエストボディ: required

使用方法:

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

const { updateProductBatchSchema } = schemas;

const schema = updateProductBatchSchema({});
const validate = ajv.compile(schema.schemas as SchemaDefinition);
const isValid = validate({ ids: ['id1', 'id2'], data: { name: '更新' } });

deleteProductBatchSchema

IDによる複数商品削除のための商品バッチ削除スキーマ。

目的: 一括削除のための商品ID配列を検証

スキーマ詳細:

  • タイプ: array
  • 項目: string(商品ID)
  • コンテンツタイプ: application/json
  • リクエストボディ: required

使用方法:

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

const { deleteProductBatchSchema } = schemas;

const schema = deleteProductBatchSchema({});
const validate = ajv.compile(schema.schemas as SchemaDefinition);
const isValid = validate(['id1', 'id2', 'id3']);

copyProductBatchSchema

IDによる複数商品複製のための商品バッチコピースキーマ。

目的: 一括複製のための商品ID配列を検証

スキーマ詳細:

  • タイプ: array
  • 項目: string(商品ID)
  • コンテンツタイプ: application/json
  • リクエストボディ: required

使用方法:

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

const { copyProductBatchSchema } = schemas;

const schema = copyProductBatchSchema({});
const validate = ajv.compile(schema.schemas as SchemaDefinition);
const isValid = validate(['id1', 'id2', 'id3']);

getProductSchema

IDによる単一商品取得のための商品取得スキーマ。

目的: 特定商品取得リクエストを検証

スキーマ詳細:

  • パラメータ: productId(パスパラメータ)
  • 目的: 特定商品取得リクエストを検証

使用方法:

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

const { getProductSchema } = schemas;

const schema = getProductSchema({});
const validate = ajv.compile(schema.schemas as SchemaDefinition);
const isValid = validate({ productId: 'prod123' });

deleteProductSchema

IDによる商品削除のための商品削除スキーマ。

目的: 特定商品削除リクエストを検証

スキーマ詳細:

  • パラメータ: productId(パスパラメータ)
  • 目的: 特定商品削除リクエストを検証

使用方法:

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

const { deleteProductSchema } = schemas;

const schema = deleteProductSchema({});
const validate = ajv.compile(schema.schemas as SchemaDefinition);
const isValid = validate({ productId: 'prod123' });

copyProductSchema

IDによる商品複製のための商品コピースキーマ。

目的: 特定商品複製リクエストを検証

スキーマ詳細:

  • パラメータ: productId(パスパラメータ)
  • 目的: 特定商品複製リクエストを検証

使用方法:

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

const { copyProductSchema } = schemas;

const schema = copyProductSchema({});
const validate = ajv.compile(schema.schemas as SchemaDefinition);
const isValid = validate({ productId: 'prod123' });

findProductsSchema

フィルタリングとページネーション付き商品検索のための商品検索スキーマ。

目的: 商品検索とページングリクエストを検証

スキーマ詳細:

  • クエリパラメータ:
    • name?: string - 商品名でのフィルタ
    • description?: string - 商品説明でのフィルタ
    • page?: number - ページネーションのページ番号
    • limit?: number - ページネーションの制限
  • 目的: 商品検索とページングリクエストを検証

使用方法:

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

const { findProductsSchema } = schemas;

const schema = findProductsSchema({});
const validate = ajv.compile(schema.schemas as SchemaDefinition);
const isValid = validate({ name: '商品', page: 1, limit: 10 });

🔗 関連ドキュメント