Онлайн-версия игры «Своя игра» на Flutter Web + Firebase.
- Установить зависимости:
flutter pub get- Убедиться, что заполнен локальный Firebase-конфиг:
- Файл:
config/firebase.web.json - Пример:
config/firebase.web.example.json
- Запустить 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=...).
- Собрать web:
flutter build web --dart-define-from-file=config/firebase.web.jsonE2E_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=trueAuthentication -> Sign-in method -> Anonymousвключен.- Firestore создан в
Native mode.
firebase deploy --only firestore:rules,firestore:indexesflutter build web --dart-define-from-file=config/firebase.web.json
firebase deploy --only hostingfirebase.jsonfirestore.rulesfirestore.indexes.jsonconfig/firebase.web.example.jsonconfig/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.
Требуется 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"