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進捗追跡