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

🔍 注文スキーマブロック

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


🎯 概要

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

  • 処理前の注文データの検証
  • 品目と価格設定による複雑な注文構造のサポート
  • 複数通貨と税金計算の処理
  • 様々なライフサイクル状態を通じた注文ステータスの追跡
  • 注文検索とフィルタリング機能の実現
  • 組織とユーザー関連付けのサポート

📋 注文スキーマ種類

ベース注文スキーマ

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

注文作成スキーマ

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

注文更新スキーマ

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

注文クエリスキーマ

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


🔧 利用可能な注文スキーマ

orderSchema

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

目的: 品目付き注文データの構造を定義

スキーマ詳細:

  • タイプ: object
  • 必須フィールド: なし(ベーススキーマ)
  • 追加プロパティ: false(厳密な検証)
  • プロパティ:
    • currency?: string - 注文通貨
    • items?: Array<{productId: string, quantity: number, price: number}> - 注文品目
    • organizationId?: string - 組織ID(UUIDフォーマット)
    • status?: string - 注文ステータス
    • subtotal?: number - 注文小計(最小0)
    • tax?: number - 税額(最小0)
    • total?: number - 合計金額(最小0)
    • userId?: string - ユーザーID(UUIDフォーマット)

使用方法:

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

const { orderSchema } = schemas;

const orderSchema = orderSchema({});
const validate = ajv.compile(orderSchema.schemas as SchemaDefinition);
const isValid = validate({
currency: 'JPY',
items: [{ productId: '123e4567-e89b-12d3-a456-426614174000', quantity: 2, price: 2999 }],
total: 5998
});

createOrderSchema

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

目的: 作成時の注文データを検証

スキーマ詳細:

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

使用方法:

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

const { createOrderSchema } = schemas;

const orderSchema = createOrderSchema({});
const validate = ajv.compile(orderSchema.schemas as SchemaDefinition);
const isValid = validate({
currency: 'JPY',
items: [
{ productId: '123e4567-e89b-12d3-a456-426614174000', quantity: 1, price: 1500 },
{ productId: '123e4567-e89b-12d3-a456-426614174001', quantity: 2, price: 2000 }
],
subtotal: 5500,
tax: 550,
total: 6050
});

updateOrderSchema

注文変更のための注文更新スキーマ。

目的: 部分的な注文更新を検証

スキーマ詳細:

  • タイプ: object
  • 必須フィールド: なし(すべてオプション)
  • オプションフィールド: status, items, total, currency, subtotal, tax
  • 追加プロパティ: false(厳密な検証)
  • パラメータ: orderId(パスパラメータ)

使用方法:

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

const { updateOrderSchema } = schemas;

const orderSchema = updateOrderSchema({});
const validate = ajv.compile(orderSchema.schemas as SchemaDefinition);
const isValid = validate({
status: 'shipped',
total: 6500
});

getOrderSchema

単一注文取得のための注文取得スキーマ。

目的: 特定注文取得リクエストを検証

スキーマ詳細:

  • パラメータ: orderId(パスパラメータ)
  • 目的: 特定注文取得リクエストを検証

使用方法:

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

const { getOrderSchema } = schemas;

const orderSchema = getOrderSchema({});
const validate = ajv.compile(orderSchema.schemas as SchemaDefinition);
const isValid = validate({
orderId: 'order123'
});

deleteOrderSchema

注文削除のための注文削除スキーマ。

目的: 特定注文削除リクエストを検証

スキーマ詳細:

  • パラメータ: orderId(パスパラメータ)
  • 目的: 特定注文削除リクエストを検証

使用方法:

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

const { deleteOrderSchema } = schemas;

const orderSchema = deleteOrderSchema({});
const validate = ajv.compile(orderSchema.schemas as SchemaDefinition);
const isValid = validate({
orderId: 'order123'
});

findOrdersSchema

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

目的: 注文の検索とページングリクエストを検証

スキーマ詳細:

  • クエリパラメータ:
    • currency?: string - 通貨でのフィルタ
    • organizationId?: string - 組織でのフィルタ
    • status?: string - ステータスでのフィルタ
    • subtotal?: number - 小計でのフィルタ(最小0)
    • tax?: number - 税額でのフィルタ(最小0)
    • total?: number - 合計金額でのフィルタ(最小0)
    • userId?: string - ユーザーでのフィルタ
    • page?: number - ページネーションのページ番号
    • limit?: number - ページネーションの制限
  • 目的: 注文の検索とページングリクエストを検証

使用方法:

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

const { findOrdersSchema } = schemas;

const ordersSchema = findOrdersSchema({});
const validate = ajv.compile(ordersSchema.schemas as SchemaDefinition);
const isValid = validate({
status: 'pending',
currency: 'JPY',
page: 1,
limit: 10
});

🔗 関連ドキュメント