article テーブル
概要
| 項目 | 内容 |
|---|---|
| テーブル名 | article |
| 説明 | レース(オートレース・競輪・競馬)に紐づく「レース結果10秒サマリー」記事を管理するテーブル。AI 生成(status: generating で作成され、ビルド完了後 draft になる)と手動作成の両方の記事を扱う |
| 主な用途 | 記事の作成・更新・公開管理・生成失敗の追跡 |
カラム定義
| カラム名 | データ型 | PK | FK | Unique | Nullable | デフォルト | 備考 |
|---|---|---|---|---|---|---|---|
| _id | ObjectId | ◯ | ◯ | DocumentDB自動採番 | |||
| race_id | string | auto_racing:_id / bicycle_racing:_id / horse_racing:_id | いずれかのレーステーブルの _id を参照する。インデックスあり |
||||
| title | string | ||||||
| body_html | string | HTML形式。AI 生成時は article_builder Lambda が React コンポーネント(RaceSummary)を renderToStaticMarkup で HTML 化したもの。スタイルを内包した self-contained なフラグメント |
|||||
| status | enum | draft | generating: 生成中 / draft: 下書き / published: 公開 / failed: 生成失敗 |
||||
| opening_at | number | 公開予定日時。インデックスあり | |||||
| closing_at | number | ◯ | 公開終了日時 | ||||
| accuracy_test_data | object | ◯ | 精度検証用データ。scripts/article_accuracy_test/audit.py が突合に使う |
||||
| generation_error | string | ◯ | status=failed のときの失敗理由(最大2000文字)。管理画面に表示する |
||||
| custom_prompt | string | ◯ | 再生成時に運用者が与えた追加指示。次の再生成でも引き継ぐ | ||||
| created_at | number | ||||||
| updated_at | number | 一覧取得のデフォルトは更新日時順にする | |||||
| deleted_at | number | ◯ |
category_id は持たない
article はカテゴリを持たない。カテゴリを持つのは blog / old_blog のみ。
ステータス遷移
stateDiagram-v2
[*] --> generating: POST /v1/articles/generation
[*] --> draft: POST /v1/articles(手動作成)
generating --> draft: article_builder が body_html を保存
generating --> failed: 生成が最終試行で失敗
failed --> generating: POST /v1/articles/{id}/regeneration
draft --> published: 担当者が公開
published --> draft: 担当者が非公開化
generating / failed は生成パイプラインが付けるステータスであり、
POST /v1/articles・PUT /v1/articles/{id} の入力としては指定できない(400 になる)。
accuracy_test_data の構造
{
"generated_article": {
"title": "string",
"contents": ["string", "string", "string"]
},
"race_result_in_generated_article": {},
"race_analysis": "string"
}
| キー | 内容 |
|---|---|
generated_article |
生成した記事(見出し + サマリー各行) |
race_result_in_generated_article |
記事で使用した順位・払戻金等の数字情報を、記事生成 AI が race_result と同じ形式で申告したもの |
race_analysis |
1段目(レース動画・コース画像の解析)の出力。記事の記述がレース結果と動画のどちらに由来するかを後から測るために残す |