ウィッシュリストシステム概要
説明
ウィッシュリストシステムは、ユーザーが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生成ビューポイントの分析 |