← スライドへ戻る

Roop · DB 設計

Firestore のコレクション構造と書き込みパターン

全体構造

// Firestore ルート構造 /users/{uid} // ユーザードキュメント └── runs/{runId} // サブコレクション (1 走行 = 1 ドキュメント)

ユーザーごとに完全に分離。{uid} は Firebase Auth が発行する一意 ID。

users ドキュメント

1 ユーザー = 1 ドキュメント。設定値をフラットなフィールドで持つ。

/users/{uid}
フィールド説明
defaultDistanceKmnumber前回入力した距離 (デフォルト 3.0)
lastModestring"jogging" / "walking"
moodnumber0.0 (静か) 〜 1.0 (賑やか) — UI 非表示
foodnumber0.0 (食事少) 〜 1.0 (食事多)
naturenumber0.0 (街中) 〜 1.0 (自然)
terrainnumber0.0 (平坦) 〜 1.0 (起伏)

runs サブコレクション

1 走行を 1 ドキュメントで表現。走行開始時に作成し、走行中に actualTrack へ座標を追記、終了時に status を確定。

/users/{uid}/runs/{runId}
フィールド説明
idstringFirestore ドキュメント ID と同じ値を冗長で保存
startedAttimestamp走行開始日時
completedAttimestamp?走行終了日時 (完了 or 中断時にセット)
statusstring"in_progress" / "completed" / "aborted"
modestring"jogging" / "walking"
sliderValuesmapmood / food / nature / terrain (0.0〜1.0)
plannedRoutemapAI が選んだ計画ルート (下記参照)
actualTrackarray実走した座標点列 (5 秒ごとに追記)
caloriesKcalnumber?消費カロリー (終了時に確定)
lapRecordsarray1km ラップ記録

plannedRoute (ネスト)

distanceMetersnumber道なり距離 (Routes API の戻り値)
durationSecondsnumber予想時間
encodedPolylinestring圧縮ポリライン (Google polyline format)
waypointsarray経由地リスト ({lat, lng, name, placeId, type})
← スライドへ戻る