ウィッシュリストカテゴリ管理

説明

ウィッシュリストカテゴリ管理機能は、公式ウィッシュリストコンテキスト内での包括的なカテゴリ管理機能を提供し、ユーザーがウィッシュリストグループに関連付けられたカテゴリを表示・管理できるようにします。このシステムは最適化されたデータアクセスのためのサマリーテーブルと統合し、アナライザーデータベース統合を通じてカテゴリランキング情報を提供します。

この機能は以下を備えた本番対応のカテゴリ分析に焦点を当てています:

  • ページネーション付きウィッシュリストコンテキスト内でのカテゴリ一覧表示
  • 最適化されたカテゴリデータアクセスのためのサマリーテーブルとの統合
  • アナライザーデータベースからのカテゴリランキング統合
  • グループベースアクセス制御とフィルタリング
  • リアルタイムカテゴリステータス追跡と管理
  • モール固有のカテゴリ名解決

システムは適切な関係管理を通じてデータ整合性を確保し、包括的な分析と戦略的インサイトのためのカテゴリデータへの効率的なアクセスを提供します。

アクティビティ図

---
config:
  theme: base
  layout: dagre
  flowchart:
    curve: linear
    htmlLabels: true
  themeVariables:
    edgeLabelBackground: "transparent"
---
flowchart TB
    %% Main components
    UserRequest[ユーザーリクエスト]
    Database[(Database)]
    
    subgraph Controllers
        CategoryController[WishlistCategoryController]
    end
    
    subgraph Repositories
        CategoryRepo[[SummaryWishlistCategoryRepository]]
        WishlistRepo[[WishlistToGroupRepository]]
        RankingRepo[[CategoryRankingRepository]]
    end
    
    subgraph Middleware
        AuthMiddleware{AuthMiddleware}
    end
    
    UserRequest --- Step1[
        <div style='text-align: center'>
            <span style='display: inline-block; background-color: #6699cc !important; color:white; width: 28px; height: 28px; line-height: 28px; border-radius: 50%; font-weight: bold'>1</span>
            <p style='margin-top: 8px'>認証・ウィッシュリスト検証</p>
        </div>
    ]
    Step1 --> AuthMiddleware
    AuthMiddleware --> CategoryController

    CategoryController --- Step2[
        <div style='text-align: center'>
            <span style='display: inline-block; background-color: #6699cc !important; color:white; width: 28px; height: 28px; line-height: 28px; border-radius: 50%; font-weight: bold'>2</span>
            <p style='margin-top: 8px'>カテゴリデータ取得・サマリー統合</p>
        </div>
    ]
    Step2 --> WishlistRepo
    WishlistRepo --> CategoryRepo

    CategoryRepo --- Step3[
        <div style='text-align: center'>
            <span style='display: inline-block; background-color: #6699cc !important; color:white; width: 28px; height: 28px; line-height: 28px; border-radius: 50%; font-weight: bold'>3</span>
            <p style='margin-top: 8px'>カテゴリランキング統合・名前解決</p>
        </div>
    ]
    Step3 --> RankingRepo
    CategoryRepo --> Database
    RankingRepo --> Database

    RankingRepo --- Step4[
        <div style='text-align: center'>
            <span style='display: inline-block; background-color: #6699cc !important; color:white; width: 28px; height: 28px; line-height: 28px; border-radius: 50%; font-weight: bold'>4</span>
            <p style='margin-top: 8px'>データフォーマット・レスポンス生成</p>
        </div>
    ]
    Step4 --> CategoryController

    %% Styling
    style UserRequest fill:#e6f3ff,stroke:#0066cc,stroke-width:2px
    style Database fill:#ffe6cc,stroke:#ff9900,stroke-width:2px
    style Controllers fill:#e6f3ff
    style Repositories fill:#fff0f5
    style Middleware fill:#f5f0ff
    style Step1 fill:transparent,stroke:transparent,stroke-width:1px
    style Step2 fill:transparent,stroke:transparent,stroke-width:1px
    style Step3 fill:transparent,stroke:transparent,stroke-width:1px
    style Step4 fill:transparent,stroke:transparent,stroke-width:1px

詳細データフロー依存関係

ステップバイステッププロセス

ステップ1: 認証・ウィッシュリスト検証

  • 説明: カテゴリ操作のためのユーザー認証とウィッシュリストアクセスを検証
  • アクション: ユーザーセッション認証、ウィッシュリスト所有権検証、ウィッシュリスト存在チェック
  • 入力: ユーザー認証情報、ウィッシュリストスラッグ
  • 出力: ウィッシュリストアクセス確認付きの検証されたユーザーコンテキスト
  • 依存関係: ユーザー認証サービス、ウィッシュリストリポジトリ
  • 外部サービス: 認証プロバイダー

ステップ2: カテゴリデータ取得・サマリー統合

  • 説明: ウィッシュリスト情報を取得し、グループベースフィルタリングでカテゴリデータを処理
  • アクション: スラッグでウィッシュリスト検索、グループフィルタリング付きサマリーカテゴリクエリ、ページネーション適用
  • 入力: ウィッシュリストスラッグ、ページネーションパラメータ、グループコンテキスト
  • 出力: サマリー情報とグループフィルタリング付きのページネーションカテゴリデータ
  • 依存関係: ウィッシュリストリポジトリ、サマリーカテゴリリポジトリ、グループ検証
  • 外部サービス: データベースクラスター、グループ管理サービス

ステップ3: カテゴリランキング統合・名前解決

  • 説明: アナライザーデータベースからカテゴリランキングデータを統合してカテゴリ名を解決
  • アクション: カテゴリID抽出、カテゴリランキングクエリ、カテゴリデータへのカテゴリ名マッピング
  • 入力: サマリーデータからのカテゴリID、ランキングクエリパラメータ
  • 出力: アナライザーデータベースから解決されたカテゴリ名付きの拡張カテゴリデータ
  • 依存関係: カテゴリランキングリポジトリ、アナライザーデータベース統合
  • 外部サービス: アナライザーデータベース、カテゴリマッピングサービス

ステップ4: データフォーマット・レスポンス生成

  • 説明: 適切な構造とページネーション付きのAPIレスポンス用にカテゴリデータをフォーマット
  • アクション: データをAPI形式に変換、カテゴリ名マッピング適用、レスポンス構造生成
  • 入力: 拡張カテゴリデータ、ページネーションメタデータ、レスポンス形式要件
  • 出力: ページネーションとカテゴリ名付きのフォーマットされたAPIレスポンス
  • 依存関係: データ変換サービス、レスポンスフォーマット
  • 外部サービス: APIレスポンスサービス、データシリアライゼーション

データベース関連テーブル・フィールド

データベース: gb_console, gb_analyzer

erDiagram
    "gb_console.wishlist_categories" {
        bigint id PK
        bigint group_id FK
        bigint wishlist_to_group_id FK
        bigint summary_wishlist_category_id FK
        integer status "0: 非アクティブ, 1: アクティブ"
    }
    
    "gb_console.summary_wishlist_categories" {
        bigint id PK
        string category_id "モール内のカテゴリID"
        bigint mall_id FK
        integer sending_status "クローラーへの送信ステータス"
        integer crawl_status "クローリングのステータス"
        integer status "商品のステータス"
    }
    
    "gb_analyzer.category_rankings" {
        bigint id PK
        string mall_category_id
        string mall_category_name
        integer mall_id
    }
    
    "gb_console.wishlist_to_groups" {
        bigint id PK
        string name "ウィッシュリストの名前"
        string slug "ウィッシュリストのスラッグ"
        integer status "0: 非アクティブ, 1: アクティブ, 3: キャンセル"
    }
    
    "gb_console.malls" {
        bigint id PK
        string name
    }
    
    "gb_console.wishlist_categories" }|--|| "gb_console.wishlist_to_groups" : "所属"
    "gb_console.wishlist_categories" }|--|| "gb_console.summary_wishlist_categories" : "参照"
    "gb_console.summary_wishlist_categories" }|--|| "gb_console.malls" : "所属"

ケースドキュメント

ケース1: ウィッシュリストカテゴリ一覧

API: ウィッシュリストカテゴリ一覧

シーケンス図

sequenceDiagram
    participant Client
    participant Controller as WishlistCategoryController
    participant WishlistRepo as WishlistToGroupRepository
    participant CategoryRepo as SummaryWishlistCategoryRepository
    participant RankingRepo as CategoryRankingRepository
    participant Database
    
    Note over Client,Database: ウィッシュリストカテゴリ一覧フロー
    
    rect rgb(255, 255, 200)
    Note right of Client: 認証フェーズ
    Client->>Controller: GET /api/v1/wishlist-to-group/{slug}/wishlist-category
    Controller->>Controller: ユーザー認証
    end
    
    rect rgb(200, 230, 255)
    Note right of Controller: ウィッシュリスト検証
    Controller->>WishlistRepo: findBySlug(slug)
    WishlistRepo->>Database: wishlist_to_groupsからSELECT
    Database-->>WishlistRepo: ウィッシュリストレコード
    WishlistRepo-->>Controller: ウィッシュリストまたはnull
    end
    
    rect rgb(200, 255, 255)
    Note right of Controller: カテゴリデータ取得
    alt ウィッシュリスト見つかった
        Controller->>CategoryRepo: serverPaginationFilteringFor(params, wishlistId)
        CategoryRepo->>Database: グループフィルタリングとページネーション付きSELECT
        Database-->>CategoryRepo: ページネーションカテゴリ
        CategoryRepo-->>Controller: カテゴリコレクション
    else ウィッシュリスト見つからない
        Controller-->>Client: エラーレスポンス
    end
    end
    
    rect rgb(255, 230, 200)
    Note right of Controller: カテゴリ名解決
    Controller->>Controller: カテゴリID抽出
    Controller->>RankingRepo: IDでカテゴリランキングクエリ
    RankingRepo->>Database: category_rankingsからSELECT
    Database-->>RankingRepo: カテゴリランキング
    RankingRepo-->>Controller: カテゴリ名マッピング
    end
    
    rect rgb(230, 200, 255)
    Note right of Controller: データ拡張
    Controller->>Controller: カテゴリにカテゴリ名をマッピング
    Controller->>Controller: カテゴリデータ拡張
    end
    
    rect rgb(200, 255, 200)
    Note right of Controller: 成功レスポンス
    Controller->>Controller: リソースに変換
    Controller-->>Client: 拡張カテゴリ付きJSONレスポンス
    end

ステップ

  1. 認証: ユーザーセッションを検証
  2. ウィッシュリスト検証: スラッグでウィッシュリストを検索し存在を検証
  3. カテゴリデータ取得: グループフィルタリングとページネーション付きサマリーカテゴリをクエリ
  4. カテゴリ名解決: カテゴリIDを抽出しアナライザーデータベースでカテゴリ名をクエリ
  5. データ拡張: カテゴリデータにカテゴリ名をマッピング
  6. レスポンス生成: APIリソースに変換しフォーマットされたレスポンスを返却

エラーハンドリング

  • 401 Unauthorized: 無効な認証
  • 404 Not Found: ウィッシュリストが見つからない
  • 500 Internal Server Error: データベースまたはシステムエラー