Skip to content

Firestore

quiz.runtime=prod 時のバックエンドです。セットアップ手順は docs/DEVELOPMENT.md、詳細スキーマは docs/FIRESTORE.md を参照してください。

コレクション概要

folders/{folderId}
  name, description, sortOrder, title
  questions: array<map>   # single_choice | multiple_choice | reorder
  updatedAtEpochMillis?

appConfig/default
  activeFolderId          # 参加者向け公開中フォルダ
  sitePublished           # サイト/受付の公開可否(既定 false)
  updatedAtEpochMillis?

staffAppRelease/latest    # スタッフ Desktop 最新版(認証必須)
  version, versionCode, storagePath, sha256, releaseNotes, publishedAtEpochMillis?

folders/{folderId}/rankings/{entryId}
  nickname, score, completedAtEpochMillis, dateKey

フォルダ ID とクイズセット ID は 1:1 です。

Storage(スタッフ DMG)

releases/staff-desktop/{version}.dmg — 認証済みスタッフのみ読取。

セキュリティ(要点)

パス読取書込
folders / appConfig全員認証済みスタッフのみ
rankings全員create(参加者スコア)。delete は認証済みスタッフのみ。update 不可
staffAppRelease認証済みスタッフクライアント不可(CD / Admin SDK)
Storage releases/staff-desktop/**認証済みスタッフクライアント不可(CD / Admin SDK)

アプリからのマッピング

RepositoryFirestore / Storage
RemoteQuizCatalogRepositoryfolders, appConfig/defaultactiveFolderId / sitePublished
RemoteRankingRepositoryfolders/{id}/rankings
RemoteStaffAppReleaseRepositorystaffAppRelease/latest + Storage DMG

参加者の問題取得は getActiveFolderIdgetQuizSet2 読み取りで足ります。

CD(ルール)

master への firestore.rules / storage.rules 変更は GitHub Actions が自動デプロイします。必要な Secret は FIREBASE_SERVICE_ACCOUNT(手順: DEVELOPMENT.md)。