コンテンツにスキップ

データベース概要

使用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 フィールドを持たない。