Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

BrainBlitz

Онлайн-версия игры «Своя игра» на Flutter Web + Firebase.

Быстрый старт

  1. Установить зависимости:
flutter pub get
  1. Убедиться, что заполнен локальный Firebase-конфиг:
  • Файл: config/firebase.web.json
  • Пример: config/firebase.web.example.json
  1. Запустить web:
flutter run -d chrome --dart-define-from-file=config/firebase.web.json

Для прод-конфига функций используется регион europe-central2 (можно переопределить через --dart-define=FIREBASE_FUNCTIONS_REGION=...). Для Firestore используется БД databasewarsaw (можно переопределить через --dart-define=FIREBASE_FIRESTORE_DATABASE_ID=...).

  1. Собрать web:
flutter build web --dart-define-from-file=config/firebase.web.json

Runtime флаги

  • E2E_BYPASS_PROFILE_UPSERT=true — не отправлять upsertProfile в backend (для E2E).
  • E2E_AUTO_FLOW=true — включить автопилот игровых переходов в комнате (для E2E/демо). По умолчанию выключен.

Пример:

flutter run -d chrome \
  --dart-define-from-file=config/firebase.web.json \
  --dart-define=E2E_AUTO_FLOW=true

Firebase

Требования в консоли Firebase

  • Authentication -> Sign-in method -> Anonymous включен.
  • Firestore создан в Native mode.

Деплой правил/индексов Firestore

firebase deploy --only firestore:rules,firestore:indexes

Деплой web в Firebase Hosting

flutter build web --dart-define-from-file=config/firebase.web.json
firebase deploy --only hosting

Файлы конфигурации Firebase

  • firebase.json
  • firestore.rules
  • firestore.indexes.json
  • config/firebase.web.example.json
  • config/firebase.web.json (локальный, в git не коммитится)

Паритет с оригинальной игрой (чеклист)

  • Базовые фазы игры: lobby -> board_select -> question/answer -> final -> game_over
  • Поддержка спецтипов вопросов: cat_in_bag, wager, closest_number, legacy-синонимы
  • Финал: удаление тем, ставки, порядок ответов, reveal, начисление/списание
  • Роли: host/player/editor/spectator, смена ролей и ограничения команд
  • Таймерные автопереходы (включая auto-heal на отключениях)
  • Поддержка разного числа участников (1..N активных игроков + зрители) в серверной логике
  • Локализация ключевых игровых экранов и событий
  • Полный e2e прогон через Firebase Emulator Suite без SKIP (functions/tests/gameCommand.emulator.test.js)

Статус паритета

  • Расширены Flutter UI-тесты экранов игры с мокингом room/players/questions/events потоков и user uid через провайдеры.
  • Покрыты unit-тестами ключевые ветки RoomAutoFlowController (board/cat/wager/answer/final/timer/anti-duplication).
  • Добавлены e2e-регрессии final-команд, включая запрет open_final_answers до получения ставок от всех eligible игроков.
  • Добавлена совместимость с alias-типом bagcat из оригинального SI (bagcat -> cat_in_bag) в backend и Flutter-моделях.
  • Добавлена e2e-регрессия паузы/продолжения: при pause/resume сохраняется остаток таймера и корректно сдвигается timerDeadlineAtMs.

Команда полного emulator e2e прогона

Требуется JDK 21+.

export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH"
export JAVA_HOME="/opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home"
firebase emulators:exec --only firestore,auth "cd functions && node --test tests/gameCommand.emulator.test.js"

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages