Dataset Workflow - 詳細Sequence図
Wishlist作成Sequence
sequenceDiagram
participant User
participant TrendApp as trend-viewer-app
participant TrendAPI as trend-viewer-api
participant WishlistController as WishlistToGroupController
participant WishlistService as WishlistToGroupService
participant GBConsole as gb_console DB
participant Logger
participant Slack
Note over User,Slack: Wishlist作成フロー (フェーズ1)
rect rgb(200, 255, 200)
Note right of User: 正常ケース - Wishlist登録
User->>TrendApp: wishlistデータ入力
TrendApp->>TrendAPI: POST /api/v1/general/wishlist-to-group
TrendAPI->>WishlistController: リクエスト処理
WishlistController->>WishlistService: validateAndCreate()
rect rgb(255, 255, 200)
Note right of WishlistService: オプション - データバリデーション
WishlistService->>WishlistService: 入力データバリデート
WishlistService->>WishlistService: サブスクリプション制限確認
end
WishlistService->>GBConsole: wishlist_to_groups作成
Note over GBConsole: INSERT wishlist_to_groups<br/>(status: 1 | Active)
WishlistService->>GBConsole: summary tables作成
Note over GBConsole: INSERT summary_wishlist_products<br/>(crawl_status: 0 | New)<br/>INSERT summary_wishlist_categories<br/>INSERT summary_wishlist_search_queries
GBConsole-->>WishlistService: 作成ID返却
WishlistService-->>WishlistController: 成功返却
WishlistController-->>TrendAPI: レスポンス返却
rect rgb(230, 200, 255)
Note right of TrendAPI: 成功監視
TrendAPI->>Logger: wishlist作成ログ
TrendAPI->>Slack: 作成通知送信
end
TrendAPI-->>TrendApp: 成功レスポンス返却
TrendApp-->>User: 成功メッセージ表示
end
rect rgb(255, 200, 200)
Note right of WishlistService: エラーハンドリング
rect rgb(255, 230, 230)
alt バリデーションエラー
WishlistService->>Logger: バリデーションエラーログ
WishlistService->>Slack: バリデーション失敗送信
WishlistService-->>WishlistController: エラーレスポンス返却
else データベースエラー
WishlistService->>Logger: データベースエラーログ
WishlistService->>Slack: データベース失敗送信
WishlistService->>GBConsole: トランザクションロールバック
end
end
end
データクローリングSequence
sequenceDiagram
participant TrendBackend as trend-viewer-backend
participant SendToCrawler as SendToCrawlerCommand
participant PLGApi as PLG API
participant CrawlerDB as Crawler DB
participant GBConsole as gb_console DB
participant Logger
participant Slack
Note over TrendBackend,Slack: データクローリングフロー (フェーズ2)
rect rgb(200, 230, 255)
Note right of TrendBackend: 正常ケース - スケジュールされたクローリング
TrendBackend->>SendToCrawler: クロールコマンド実行
SendToCrawler->>GBConsole: summary tables問い合わせ
Note over GBConsole: WHERE crawl_status = 0 (New)
GBConsole-->>SendToCrawler: 保留アイテム返却
SendToCrawler->>GBConsole: crawl_status = 1 (InProgress)更新
SendToCrawler->>PLGApi: クロール設定送信
PLGApi->>CrawlerDB: クロールリクエスト保存
Note over CrawlerDB: crawler_v2.configs
rect rgb(255, 255, 200)
Note right of PLGApi: オプション - 複数商品処理
PLGApi->>PLGApi: クローリングプロセス実行
PLGApi->>CrawlerDB: 成功したクロールデータ保存
Note over CrawlerDB: analyzer_v2.products<br/>analyzer_v2.reviews<br/>analyzer_v2.review_sentences
PLGApi->>CrawlerDB: クロールステータス・エラー更新
Note over CrawlerDB: crawler_v2.configs
end
SendToCrawler->>GBConsole: crawl_status = 2 (Success)更新
rect rgb(230, 200, 255)
Note right of SendToCrawler: 成功監視
SendToCrawler->>Logger: クロール成功ログ
SendToCrawler->>Slack: クロール完了通知送信
end
end
rect rgb(255, 200, 200)
Note right of PLGApi: エラーハンドリング
rect rgb(255, 230, 230)
alt クロールエラー
PLGApi->>CrawlerDB: クロールエラー・失敗ログ
Note over CrawlerDB: crawler_v2.configs
PLGApi->>Logger: クロールエラーログ
PLGApi->>Slack: クロール失敗通知送信
PLGApi-->>SendToCrawler: エラーステータス返却
SendToCrawler->>GBConsole: crawl_status = 3 (Error)更新
else タイムアウトエラー
SendToCrawler->>Logger: タイムアウトエラーログ
SendToCrawler->>GBConsole: crawl_status = 3 (Error)更新
end
end
end
Dataset作成・分析Sequence
sequenceDiagram
participant TrendBackend as trend-viewer-backend
participant CreateDataset as CreateDatasetCommand
participant CloudRunService as CloudRunJobService
participant AnalyzerBatch as analyzer_batch
participant TVDB as TV DB
participant CrawlerDB as Crawler DB
participant Logger
participant Slack
Note over TrendBackend,Slack: Dataset作成・分析フロー (フェーズ3-4)
rect rgb(255, 230, 200)
Note right of TrendBackend: 重要 - Dataset作成
TrendBackend->>CreateDataset: dataset:create実行
CreateDataset->>TVDB: wishlist準備状況確認
Note over TVDB: gb_console.wishlist_to_groups<br/>WHERE status = 1 (Active)<br/>AND crawl_status = 2 (Success)
CreateDataset->>CreateDataset: 条件バリデート
Note over CreateDataset: ✓ クロール完了<br/>✓ Embedding準備完了 (PLG API経由)<br/>✓ Prediction準備完了 (PLG API経由)
CreateDataset->>TVDB: datasetメタデータ作成
Note over TVDB: ds_analyzer.datasets<br/>(status: 1 | Pending, progress: 0)
CreateDataset->>TVDB: 履歴レコード作成
Note over TVDB: gb_console.wishlist_dataset_histories<br/>(status: 1, spvp_status: 1)
CreateDataset->>CloudRunService: analyzer_batchトリガー
CloudRunService->>AnalyzerBatch: Google Cloud Runジョブ開始
Note over AnalyzerBatch: python main.py --dataset_id={id}
end
rect rgb(200, 255, 200)
Note right of AnalyzerBatch: 正常ケース - ML分析処理
AnalyzerBatch->>TVDB: status = 2 (Processing)更新
Note over TVDB: ds_analyzer.datasets (status: 1→2)
AnalyzerBatch->>CrawlerDB: ソースデータロード
Note over CrawlerDB: analyzer_v2.products<br/>analyzer_v2.reviews<br/>analyzer_v2.review_sentences
CrawlerDB-->>AnalyzerBatch: ソースデータ返却 (progress: 0→25)
AnalyzerBatch->>AnalyzerBatch: ML処理フェーズ
Note over AnalyzerBatch: K-meansクラスタリング (progress: 25→50)<br/>OpenAI GPT-4ラベリング (progress: 50→75)<br/>商品類似度計算 (progress: 75→85)
AnalyzerBatch->>TVDB: 分析結果書き込み (7テーブル)
Note over TVDB: ds_analyzer.products<br/>ds_analyzer.product_details<br/>ds_analyzer.product_similarities<br/>ds_analyzer.ai_viewpoints<br/>ds_analyzer.review_sentence_aivp<br/>ds_analyzer.reviews<br/>ds_analyzer.review_sentences<br/>(progress: 85→100)
AnalyzerBatch->>TVDB: 分析完了
Note over TVDB: ds_analyzer.datasets<br/>(status: 3 | Completed, progress: 100)
AnalyzerBatch-->>CloudRunService: 分析完了
CloudRunService-->>CreateDataset: 完了通知
rect rgb(230, 200, 255)
Note right of CreateDataset: 成功監視
CreateDataset->>Logger: 分析完了ログ
CreateDataset->>Slack: 分析成功通知送信
end
end
rect rgb(255, 200, 200)
Note right of AnalyzerBatch: エラーハンドリング
rect rgb(255, 230, 230)
alt データロードエラー
AnalyzerBatch->>TVDB: status = 9 (Failed), error_code = 1001設定
Note over TVDB: ds_analyzer.datasets
AnalyzerBatch->>Logger: データロードエラーログ
AnalyzerBatch->>Slack: データロード失敗送信
else ML処理エラー
AnalyzerBatch->>TVDB: status = 9 (Failed), error_code = 2001-2003設定
Note over TVDB: ds_analyzer.datasets
AnalyzerBatch->>Logger: ML処理エラーログ
AnalyzerBatch->>Slack: ML処理失敗送信
else データ書き込みエラー
AnalyzerBatch->>TVDB: status = 9 (Failed), error_code = 3001設定
Note over TVDB: ds_analyzer.datasets
AnalyzerBatch->>Logger: データ書き込みエラーログ
AnalyzerBatch->>Slack: データ書き込み失敗送信
AnalyzerBatch->>TVDB: トランザクションロールバック
end
end
end
SPVP処理Sequence
sequenceDiagram
participant TrendBackend as trend-viewer-backend
participant GetStatus as GetDatasetStatusCommand
participant UpdateSPVP as UpdateSPVPStatusCommand
participant SPVPBatch as spvp_batch
participant TVDB as TV DB
participant Logger
participant Slack
Note over TrendBackend,Slack: SPVP処理フロー (フェーズ5)
rect rgb(200, 230, 255)
Note right of TrendBackend: 正常ケース - ステータス監視・SPVPトリガー
TrendBackend->>GetStatus: dataset:get-status実行
GetStatus->>TVDB: datasetステータス確認
Note over TVDB: ds_analyzer.datasets<br/>WHERE status = 3 (Completed)
GetStatus->>TVDB: 履歴ステータス更新
Note over TVDB: gb_console.wishlist_dataset_histories<br/>(status: 3, spvp_status: 2 | Analyzing)
GetStatus->>SPVPBatch: SPVP処理トリガー
SPVPBatch->>TVDB: review sentencesロード
Note over TVDB: ds_analyzer.review_sentences
SPVPBatch->>TVDB: specific viewpoints & categoriesロード
Note over TVDB: ds_analyzer.specific_viewpoints<br/>ds_analyzer.viewpoint_categories
TVDB-->>SPVPBatch: sentences, viewpoints & categories返却
SPVPBatch->>SPVPBatch: Qwenマッピング処理
Note over SPVPBatch: Qwenモデルマップ<br/>specific_viewpoints ↔ review_sentences
SPVPBatch->>TVDB: マッピング結果保存
Note over TVDB: ds_analyzer.review_sentence_spvp<br/>(sentence-viewpointマッピング)
SPVPBatch->>TVDB: viewpoint進捗更新
Note over TVDB: ds_analyzer.specific_viewpoints<br/>(last_object_id更新)
TrendBackend->>UpdateSPVP: spvp:update-status実行
UpdateSPVP->>TVDB: SPVP完了確認
Note over TVDB: ds_analyzer.specific_viewpoints<br/>全viewpoints処理確認
rect rgb(255, 255, 200)
Note right of UpdateSPVP: オプション - 完了確認
UpdateSPVP->>UpdateSPVP: SPVP完了検証
Note over UpdateSPVP: 全viewpoints処理済み?
end
UpdateSPVP->>TVDB: 最終ステータス更新
Note over TVDB: gb_console.wishlist_dataset_histories<br/>(spvp_status: 3 | Completed)
rect rgb(230, 200, 255)
Note right of UpdateSPVP: 成功監視
UpdateSPVP->>Logger: SPVP完了ログ
UpdateSPVP->>Slack: ワークフロー完了通知送信
end
end
rect rgb(255, 200, 200)
Note right of SPVPBatch: エラーハンドリング
rect rgb(255, 230, 230)
alt SPVP処理エラー
SPVPBatch->>TVDB: SPVPマッピングエラー設定
Note over TVDB: ds_analyzer.review_sentence_spvp<br/>ds_analyzer.specific_viewpoints
SPVPBatch->>Logger: SPVPエラーログ
SPVPBatch->>Slack: SPVP失敗通知送信
UpdateSPVP->>TVDB: spvp_status = 9 (Failed)設定
Note over TVDB: gb_console.wishlist_dataset_histories
else SPVPタイムアウト
UpdateSPVP->>Logger: SPVPタイムアウトログ
UpdateSPVP->>TVDB: spvp_status = 9 (Failed)設定
Note over TVDB: gb_console.wishlist_dataset_histories
end
end
end
関連ドキュメント
コアワークフローコンポーネント
関連システムドキュメント
バックエンドサービスドキュメント
- trend-viewer-backendドキュメント - 完全なバックエンドドキュメント
- Dataset Commands: link - シーケンスで参照されるコンソールコマンド
dataset:create - データセット作成コマンド(フェーズ3)
dataset:get-status - ステータス監視コマンド(フェーズ5)
dataset:update-spvp-status - SPVPステータス更新(フェーズ5)
- Crawler Integration: link - PLG API統合の詳細
SendToCrawlerCommand - データクローリングシーケンス(フェーズ2)
Processing Services(ドキュメント開発中)
analyzer_batch: Python ML/AI処理サービス
- シーケンス役割: フェーズ4 - ML分析処理
- 機能: K-meansクラスタリング、OpenAI GPT-4ラベリング、製品類似性計算
spvp_batch: Python Qwenベース特定観点処理サービス
- シーケンス役割: フェーズ5 - SPVP処理
- 機能: Qwenマッピングプロセス、SPVP進捗追跡