コンテンツにスキップ

GraphQL スキーマ設計

概要

VendureのGraphQL APIスキーマとカスタム拡張の設計書です。

スキーマ設計原則

  1. 型安全性: TypeScript型定義との完全な一致
  2. 効率性: N+1問題を避けるDataLoaderパターンの活用
  3. セキュリティ: 適切な認可制御とレート制限
  4. 拡張性: プラグインによる段階的なスキーマ拡張

主要なカスタムタイプ

B2B顧客管理

type B2BCustomer {
  id: ID!
  company: String!
  customerStatus: CustomerStatusType!
  discountRate: Float!
  creditLimit: Float!
  purchaseRestrictions: [PurchaseRestriction!]!
}

enum CustomerStatusType {
  PREMIUM
  STANDARD
  LIMITED
  # ... 他12種類
}

キャンペーン管理

type Campaign {
  id: ID!
  name: String!
  type: CampaignType!
  conditions: [CampaignCondition!]!
  benefits: [CampaignBenefit!]!
  startDate: DateTime!
  endDate: DateTime!
  isActive: Boolean!
}

enum CampaignType {
  PERCENTAGE_DISCOUNT
  FIXED_AMOUNT_DISCOUNT
  FREE_SHIPPING
  GIFT_PRODUCT
  VOLUME_DISCOUNT
  LOYALTY_POINTS
}

直送モード

type DirectShippingMode {
  isEnabled: Boolean!
  surchargeRate: Float! # 10%
  applicableProducts: [Product!]!
  restrictions: [ShippingRestriction!]!
}

カスタムResolver

顧客別価格計算

extend type Product {
  customerSpecificPrice(customerId: ID!): Money!
  volumeDiscountTiers: [VolumeTier!]!
}

type VolumeTier {
  minQuantity: Int!
  discountRate: Float!
}

月次割戻金計算

type MonthlyRebate {
  customerId: ID!
  period: String!
  totalPurchaseAmount: Money!
  rebateAmount: Money!
  rebateRate: Float!
}

extend type Query {
  calculateMonthlyRebate(customerId: ID!, period: String!): MonthlyRebate!
}

セキュリティとパフォーマンス

認証・認可

  • JWT トークンベース認証
  • 顧客ステータスに基づく権限制御
  • 商品・価格情報への顧客別アクセス制御

レート制限

  • IPアドレス単位: 1000 requests/hour
  • 認証済みユーザー: 5000 requests/hour
  • 管理者: 無制限

キャッシュ戦略

  • Redis を使用した結果キャッシュ
  • 商品情報: 30分キャッシュ
  • 価格情報: 10分キャッシュ
  • 在庫情報: リアルタイム

スキーマ生成

Vendure CLI v3.5.0 による自動生成

# 全スキーマ生成
pnpm run schema:generate

# 個別生成
pnpm run schema:admin
pnpm run schema:shop

出力先: packages/contract/schema/

  • admin.graphql - Admin API スキーマ
  • shop.graphql - Shop API スキーマ

新機能 (v3.5.0)

  • サーバー起動不要: 設定ファイルから直接スキーマ生成
  • Monorepo対応: 複数設定ファイルの自動検出
  • IDE統合: GraphQLプラグインでの自動補完

今後の作業

  • 完全なスキーマ定義ファイルの作成 (Vendure CLI自動生成)
  • Resolver実装仕様書の作成
  • API テストスイートの作成
  • パフォーマンステスト計画書の作成