ウィッシュリストシステム概要

説明

ウィッシュリストシステムは、ユーザーがEコマース商品を監視し、市場トレンドを分析し、AI搭載のインサイトを生成できる包括的な商品追跡・分析プラットフォームです。このシステムは、一時的なウィッシュリスト準備と公式ウィッシュリスト監視の2段階ワークフローで動作し、AI搭載ビューポイント生成のためのOpenAI、データセット分析のためのTV Python API、Pusherを通じたリアルタイム通知などの外部サービスと統合されています。

データベースアーキテクチャ:

  • プライマリデータベース: gb_console - すべてのユーザーデータ、ウィッシュリストデータ、サブスクリプションデータ、ビジネスロジックを格納
  • 分析データベース: gb_analyzer - 処理済み分析データ、商品、レビュー、ランキングへの読み取り専用アクセス

このシステムは、Trend Viewerプラットフォームの中核機能として機能し、ユーザーが以下のことを可能にします:

  • 複数のEコマースプラットフォーム(Amazon、楽天)にわたる商品コレクションの作成と管理
  • OpenAIを使用したAI搭載カテゴリ説明と特定のビューポイントの生成
  • TV Python API統合による包括的な市場分析の実行
  • 価格変動、ランキング、トレンドのリアルタイム追跡
  • サブスクリプションベースのクォータ管理によるユーザーグループ内でのウィッシュリストでの協力
  • 一括操作のためのCSVによるデータのインポート/エクスポート

アーキテクチャ概要

ウィッシュリストシステムは、関心事の明確な分離を持つ構造化されたアーキテクチャに従います:

  • APIコントローラー: HTTPリクエストの処理、入力の検証、レスポンスの調整
  • サービス層: ビジネスロジック、データ変換、外部サービス統合の実装
  • リポジトリ層: リポジトリパターン実装によるデータアクセスの管理
  • モデル: データ構造とシステムエンティティ間の関係の定義
  • 外部サービス: OpenAI、TV Python API、Pusher、Stripeとの統合

このシステムは、カスタムhaldata/laravel-repositoryパッケージを使用してLaravelのリポジトリパターンを実装し、ビジネスロジックとデータアクセスの関心事の間の明確な分離を確保しています。認証は、すべてのエンドポイントに対する包括的なミドルウェア保護を備えたLaravel Sanctumを介して処理されます。

システム概要図

---
config:
  theme: base
  layout: dagre
  flowchart:
    curve: basis
    htmlLabels: true
  themeVariables:
    edgeLabelBackground: "transparent"
---
flowchart TB
    %% Main components with clearer hierarchy
    Client[フロントエンドアプリケーション] 
    
    %% External Services with distinctive styling
    subgraph ExternalServices["外部サービス"]
        OpenAI((OpenAI API))
        TVPythonAPI((TV Python API))
        StripeAPI((Stripe API))
        PusherAPI((Pusher API))
    end
    
    %% Controllers with clear grouping
    subgraph APILayer["APIコントローラー層"]
        subgraph TempControllers["一時ウィッシュリストコントローラー"]
            TempWishlistController[TempWishlistToGroupController]
            TempViewpointController[TempViewpointController]
        end
        
        subgraph OfficialControllers["公式ウィッシュリストコントローラー"]
            WishlistController[WishlistToGroupController]
            WishlistViewpointController[WishlistViewpointController]
            AnalysisController[AnalysisController]
        end
    end
    
    %% Services with logical grouping
    subgraph ServiceLayer["ビジネスロジックサービス"]
        subgraph TempServices["一時ウィッシュリストサービス"]
            TempWishlistService(TempWishlistToGroupService)
            TempViewpointService(TempViewpointService)
        end
        
        subgraph OfficialServices["公式ウィッシュリストサービス"]
            WishlistService(WishlistToGroupService)
            DatasetService(DatasetService)
        end
        
        subgraph IntegrationServices["統合サービス"]
            OpenAIService(OpenAIService)
            AnalyzerAPIService(AnalyzerAPIService)
            SubscriptionService(SubscriptionService)
        end
    end
    
    %% Repositories with clear grouping
    subgraph DatabaseLayer["データアクセス層"]
        subgraph TempRepositories["一時ウィッシュリストリポジトリ"]
            TempWishlistRepo[(TempWishlistToGroupRepository)]
        end
        
        subgraph OfficialRepositories["公式ウィッシュリストリポジトリ"]
            WishlistRepo[(WishlistToGroupRepository)]
            ViewpointRepo[(WishlistViewpointRepository)]
            SummaryRepo[(SummaryWishlistRepository)]
        end
        
        subgraph AnalyzerRepositories["アナライザーリポジトリ"]
            AnalyzerRepo[(AnalyzerRepository)]
        end
    end
    
    %% Database structure with clearer separation
    subgraph Databases["データベース層"]
        subgraph gb_console["gb_console (プライマリビジネスデータベース)"]
            TempWishlistDB[(temp_wishlist_to_groups)]
            WishlistDB[(wishlist_to_groups)]
            TempViewpointDB[(temp_wl_cat_vps)]
            ViewpointDB[(wl_cat_vps)]
            SummaryDB[(summary_wishlist_*)]
        end
        
        subgraph gb_analyzer["gb_analyzer (分析データベース - 読み取り専用)"]
            ProductsDB[(products)]
            ReviewsDB[(reviews)]
            RankingsDB[(rankings)]
            AnalysisDB[(analysis_data)]
        end
    end
    
    %% User flow with numbered steps
    Client --- 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 --> TempWishlistController
    
    Client --- 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'>AIビューポイント生成</p>
        </div>
    ]
    Step2 --> TempViewpointController
    
    Client --- 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 --> TempWishlistController
    TempWishlistController -.-> WishlistController
    
    Client --- 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 --> WishlistController
    WishlistController -.-> AnalysisController
    
    Client --- Step5[
        <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'>5</span>
            <p style='margin-top: 8px'>サブスクリプション管理</p>
        </div>
    ]
    Step5 --> WishlistController
    WishlistController -.-> SubscriptionService
    
    %% Key controller-to-service connections
    TempWishlistController ==> TempWishlistService
    TempViewpointController ==> TempViewpointService
    WishlistController ==> WishlistService
    AnalysisController ==> DatasetService
    
    %% Key service integrations
    TempViewpointService --> OpenAIService
    OpenAIService --> OpenAI
    DatasetService --> AnalyzerAPIService
    AnalyzerAPIService --> TVPythonAPI
    SubscriptionService --> StripeAPI
    WishlistService --> PusherAPI
    
    %% Repository connections
    TempWishlistService --> TempWishlistRepo
    TempViewpointService --> TempWishlistRepo
    WishlistService --> WishlistRepo
    WishlistService --> ViewpointRepo
    WishlistService --> SummaryRepo
    DatasetService --> AnalyzerRepo
    
    %% Database connections
    TempWishlistRepo --> TempWishlistDB
    TempWishlistRepo --> TempViewpointDB
    WishlistRepo --> WishlistDB
    ViewpointRepo --> ViewpointDB
    SummaryRepo --> SummaryDB
    AnalyzerRepo --> ProductsDB
    AnalyzerRepo --> ReviewsDB
    AnalyzerRepo --> RankingsDB
    AnalyzerRepo --> AnalysisDB
    
    %% Style definitions
    classDef clientStyle fill:#e6f7ff,stroke:#1890ff,stroke-width:2px
    classDef apiStyle fill:#f6ffed,stroke:#52c41a,stroke-width:2px
    classDef serviceStyle fill:#fff7e6,stroke:#fa8c16,stroke-width:2px
    classDef repoStyle fill:#f9f0ff,stroke:#722ed1,stroke-width:2px
    classDef externalStyle fill:#fff1f0,stroke:#f5222d,stroke-width:2px
    classDef dbStyle fill:#fcffe6,stroke:#7cb305,stroke-width:2px
    
    class Client clientStyle
    class TempControllers,OfficialControllers apiStyle
    class TempServices,OfficialServices,IntegrationServices serviceStyle
    class TempRepositories,OfficialRepositories,AnalyzerRepositories repoStyle
    class ExternalServices externalStyle
    class gb_console,gb_analyzer dbStyle
    
    %% Transparent step nodes
    style Step1 fill:transparent,stroke:transparent,stroke-width:0px
    style Step2 fill:transparent,stroke:transparent,stroke-width:0px
    style Step3 fill:transparent,stroke:transparent,stroke-width:0px
    style Step4 fill:transparent,stroke:transparent,stroke-width:0px
    style Step5 fill:transparent,stroke:transparent,stroke-width:0px

シーケンス図

以下のシーケンス図は、ウィッシュリストシステムの主要なフローを示しています:

sequenceDiagram
    participant User as ユーザー
    participant TempWishlist as 一時ウィッシュリスト
    participant OfficialWishlist as 公式ウィッシュリスト
    participant OpenAI
    participant TVPythonAPI
    participant PusherService
    participant StripeAPI
    
    Note over User,StripeAPI: 完全なウィッシュリストワークフロー
    
    rect rgb(230, 240, 255)
    Note right of User: 一時ウィッシュリスト段階
    User->>TempWishlist: 一時ウィッシュリスト作成
    User->>TempWishlist: 商品/カテゴリ/検索クエリ追加
    User->>TempWishlist: AIビューポイント生成リクエスト
    TempWishlist->>OpenAI: ビューポイント生成
    OpenAI-->>TempWishlist: AI生成コンテンツ返却
    TempWishlist-->>User: ビューポイント表示
    end
    
    rect rgb(240, 255, 240)
    Note right of User: 公式ウィッシュリストへの変換
    User->>TempWishlist: 公式ウィッシュリストに変換
    TempWishlist->>StripeAPI: サブスクリプション検証
    StripeAPI-->>TempWishlist: サブスクリプション状態確認
    TempWishlist->>OfficialWishlist: データ転送
    OfficialWishlist-->>User: 公式状態確認
    end
    
    rect rgb(255, 245, 230)
    Note right of User: 分析統合
    User->>OfficialWishlist: データセット作成リクエスト
    OfficialWishlist->>TVPythonAPI: 分析データセット作成
    TVPythonAPI-->>OfficialWishlist: データセット作成確認
    TVPythonAPI->>PusherService: ステータス更新送信
    PusherService-->>User: リアルタイムステータス通知
    TVPythonAPI->>OfficialWishlist: 分析完了
    OfficialWishlist-->>User: 分析結果表示
    end

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

ウィッシュリストシステムは、複数の外部サービスを統合し、一時的状態と公式状態間でデータの一貫性を維持する洗練されたデータフローを通じて動作します:

1. 一時ウィッシュリスト段階

  • 目的: サブスクリプションクォータに影響を与えることなく準備と実験
  • データフロー: ユーザー入力 → 一時テーブル → AI強化 → 検証
  • 主要機能:
    • 一括操作のためのCSVインポート/エクスポート
    • OpenAI統合によるAI搭載ビューポイント生成
    • 包括的な入力検証とサニタイゼーション
    • グループメンバーとのリアルタイム協力
    • クォータ消費なしの一時保存

2. 公式ウィッシュリスト段階

  • 目的: サブスクリプションクォータ強制によるアクティブ監視と分析
  • データフロー: 一時データ → 公式テーブル → サマリーテーブル → TV Python API → 分析結果
  • 主要機能:
    • TV Python API統合によるデータセット作成
    • サブスクリプション検証とクォータ管理
    • ランキング分析と競合インテリジェンス
    • Pusherによるリアルタイム通知
    • 請求とサブスクリプション管理のためのStripe統合

3. AI統合フロー

  • トリガー: ユーザーがカテゴリ詳細または特定のビューポイント生成をリクエスト
  • プロセス: カテゴリ名 → OpenAI API → 生成コンテンツ → データベース保存 → ユーザーアクションログ
  • 機能:
    • 異なる使用ケースのための設定可能なAIプロンプト
    • API障害のための再試行メカニズム
    • 生成コンテンツのトランザクション安全保存
    • パフォーマンスのための一般的な応答のキャッシュ

4. 分析統合フロー

  • トリガー: ユーザーが公式ウィッシュリストから分析データセットを作成
  • プロセス: ウィッシュリストデータ → TV Python API → データセット作成 → ステータス追跡 → 結果配信
  • 機能:
    • ステータス追跡による非同期処理
    • Pusherによるリアルタイム通知
    • エラーハンドリングと回復メカニズム
    • トラブルシューティングのための包括的ログ

5. サブスクリプション管理フロー

  • トリガー: ユーザーサブスクリプションイベント(作成、更新、キャンセル)
  • プロセス: サブスクリプションアクション → Stripe API → クォータ更新 → 機能アクセス制御
  • 機能:
    • Stripe請求とのシームレス統合
    • 自動クォータ強制
    • サブスクリプションレベル機能アクセス制御
    • 請求履歴と管理

中核コンポーネント

APIコントローラー

  • TempWishlistToGroupController: 一時ウィッシュリストCRUD操作の管理
  • WishlistToGroupController: 公式ウィッシュリスト管理の処理
  • TempViewpointController: 一時ウィッシュリストのAIビューポイント生成制御
  • WishlistViewpointController: 公式ウィッシュリストのビューポイント管理
  • AnalysisController: データセット作成と分析操作の調整

サービス

  • TempWishlistToGroupService: 一時ウィッシュリストのビジネスロジック実装
  • WishlistToGroupService: 公式ウィッシュリストビジネス操作の処理
  • TempViewpointService: 一時アイテムのAIビューポイント生成調整
  • OpenAIService: コンテンツ生成のためのOpenAI APIとの統合
  • AnalyzerAPIService: 分析のためのTV Python APIとの通信
  • SubscriptionService: ユーザーサブスクリプションとクォータの管理
  • DatasetService: データセット作成とステータス追跡の処理

リポジトリ

  • TempWishlistToGroupRepository: 一時ウィッシュリストのデータアクセス
  • WishlistToGroupRepository: 公式ウィッシュリストのデータアクセス
  • WishlistViewpointRepository: ビューポイントデータアクセスの管理
  • SummaryWishlistRepository: サマリーデータ操作の処理
  • AnalyzerRepository: 分析データへのアクセス提供

主要データベーステーブル

  • gb_console: temp_wishlist_to_groups, wishlist_to_groups, temp_wl_cat_vps, wl_cat_vps
  • gb_analyzer: products, reviews, rankings, analysis_data

操作のタイムライン

timeline
    title ウィッシュリストシステム操作
    section ユーザー操作
        一時ウィッシュリスト作成 : 商品追加 : カテゴリ追加 : 検索クエリ追加
        AIビューポイント生成 : OpenAI統合 : 編集・レビュー
        公式に変換 : サブスクリプション検証 : データ転送
        データ分析 : データセット作成 : 結果分析
    section システム操作
        認証 : ユーザー認証 : グループ権限検証
        データ検証 : 入力サニタイゼーション : 重複検出
        外部API統合 : OpenAI : TV Python API : Stripe
        通知 : Pusher統合 : ステータス更新
    section バックグラウンド処理
        データセット処理 : 分析ステータス追跡
        サブスクリプション管理 : クォータ強制 : 請求更新
        データクリーンアップ : 一時データ期限切れ : キャッシュ管理

期待される成果

ウィッシュリストシステムが正常に動作すると、以下を提供します:

  • 効率的な商品管理: ユーザーは複数のEコマースプラットフォームにわたって商品を整理・追跡でき、リアルタイム更新が可能
  • AI強化インサイト: OpenAI搭載のカテゴリ説明と特定のビューポイントが、インテリジェントな分析と推奨を提供
  • 包括的市場分析: TV Python API統合により、深い市場トレンド分析とランキングインサイトが可能
  • 協力的ワークフロー: リアルタイム通知とサブスクリプションクォータ共有によるグループベースのウィッシュリスト管理
  • スケーラブルなデータ処理: CSVインポート/エクスポート機能による大規模商品データセットの効率的処理
  • サブスクリプション統合: Stripe統合によるシームレスなクォータ管理と請求
  • リアルタイムユーザーエクスペリエンス: 協力機能とステータス変更のためのPusher搭載ライブ更新

エラーハンドリング

システムは包括的なエラーハンドリングを実装しています:

  • 入力検証: 詳細な検証ルールを持つForm Requestクラス
  • トランザクション安全性: データ一貫性のためのデータベーストランザクション
  • APIエラーハンドリング: すべてのAPIエンドポイントの構造化エラーレスポンス
  • ログ: システム操作とエラーの包括的ログ
  • 再試行メカニズム: 一時的な外部API障害の自動再試行
  • ユーザー通知: ユーザーフィードバックのための明確なエラーメッセージ

モジュール一覧

名前 概要リンク 説明
一時ウィッシュリスト管理 一時ウィッシュリスト概要 AI統合とCSV操作を備えた完全な一時ウィッシュリストシステム
公式ウィッシュリスト管理 ウィッシュリスト概要 分析統合とサブスクリプション管理を備えた本番ウィッシュリストシステム
一時ウィッシュリスト商品管理 一時商品管理 一時ウィッシュリストの商品管理
一時ウィッシュリストカテゴリ管理 一時カテゴリ管理 一時ウィッシュリストのカテゴリ管理
一時ウィッシュリスト検索クエリ管理 一時検索クエリ管理 一時ウィッシュリストの検索クエリ管理
AIビューポイント生成 AIビューポイント生成 ビューポイント生成のためのOpenAI統合
CSVインポート/エクスポート CSV操作 CSVインポート/エクスポートによる一括操作
ユニーク商品CSVインポート ユニーク商品CSVインポート 商品分析のためのユニークコード追跡による高度なCSVインポート
ウィッシュリストグループ管理 ウィッシュリストグループ管理 公式ウィッシュリストグループの管理
データセット作成 データセット作成 分析データセットの作成
ウィッシュリスト商品管理 ウィッシュリスト商品管理 公式ウィッシュリストの商品管理
ウィッシュリストカテゴリ管理 ウィッシュリストカテゴリ管理 公式ウィッシュリストのカテゴリ管理
ウィッシュリスト検索クエリ管理 ウィッシュリスト検索クエリ管理 公式ウィッシュリストの検索クエリ管理
ランキング分析 ランキング分析 商品ランキングの分析
ビューポイント分析 ビューポイント分析 AI生成ビューポイントの分析