データベース概要
使用DB
Amazon DocumentDB(MongoDB 互換)を使用する。
接続は Beanie(Motor)を利用し、既定のデータベース名は jester。
テーブル一覧
| テーブル名 | 説明 |
|---|---|
| article | レース(オートレース・競輪・競馬)に紐づく「レース結果10秒サマリー」記事。タイトル・本文・公開ステータスなどを管理する |
| category | ブログのカテゴリ(大分類)。blog_builder の記事テンプレート選択にも使われる |
| media | アップロードされたメディアファイル(画像・動画)と AI が生成したサムネイル画像 |
| ng_word | 生成テキストの検査に使用するNGワード |
| auto_racing | オートレースのレース情報・レース結果・AI予想 |
| bicycle_racing | 競輪のレース情報・レース結果・AI予想 |
| horse_racing | 競馬のレース情報・レース結果・AI予想 |
| old_blog | 移行対象の過去ブログ記事(リライトの入力) |
| blog | AI が生成したブログ記事(過去ブログのリライト/レース回顧・予想の書き下ろし) |
共通ルール
| ルール | 内容 |
|---|---|
| 主キー | _id(DocumentDB が自動採番する ObjectId。ただし racing 系テーブル(auto_racing / bicycle_racing / horse_racing)は外部のレース ID を格納する) |
| 日時フィールド | UNIX タイムスタンプ(ミリ秒)で管理 |
| 削除方式 | 論理削除(deleted_at フィールドで管理する) |
| 配列フィールド | DocumentDB のネイティブ配列として格納 |
| 一覧取得 | デフォルトは更新日時(updated_at)順にする(racing 系のみ name 順) |
論理削除の例外
生成途中で失敗した article / blog(status=generating のまま本文が空のレコード)は、
SQS の最終試行で失敗したときに限り物理削除する。公開されない不完全な生成物が一覧に残ると
再生成の妨げになるため。詳細は各 Lambda のドキュメントを参照。
なお article は物理削除をやめ、status=failed として理由(generation_error)を残す方式に変更されている
(article_builder のビルド失敗時のみ物理削除が残る)。
レース情報の扱い
レース情報は競技種別ごとに auto_racing / bicycle_racing / horse_racing の3コレクションに分かれている。
_id(= レース結果 JSON の race_id)は競技をまたいで一意であり、API(/v1/races)は
3コレクションを横断検索して該当レースを特定する。競技種別はコレクションそのもので表現するため、
レースドキュメント自体は type フィールドを持たない。