Files
scrabble-game/docs/FUNCTIONAL_ru.md
T
Ilia Denisov effe6675bc
Tests · Go / test (push) Successful in 32s
Stage 0: scaffold monorepo, backend skeleton, docs, CI
- go.work (Go 1.26.3) with backend module; deps added incrementally (gin+zap only)

- backend: /healthz + /readyz, env config, graceful shutdown

- docs: ARCHITECTURE, FUNCTIONAL (+ru mirror), TESTING

- PLAN.md (stage tracker + per-stage open details) and CLAUDE.md (per-stage workflow)

- .gitea go-unit CI (gofmt/vet/build/test)
2026-06-02 11:57:58 +02:00

4.5 KiB

Scrabble Game — Функциональная спецификация

Пользовательские сценарии по доменам: что делает каждая видимая пользователю операция. Это зеркало FUNCTIONAL.md для владельца проекта; авторитетна английская версия. Любую точечную правку переносим в том же патче (переводим только изменённые абзацы). Разделы наполняются по мере этапов; (Stage N) помечает, где пишется детализация.

Домены

Личность и сессии (Stage 1 / 6)

Игрок приходит с платформы (сначала Telegram), через email-вход или как эфемерный гость. Gateway один раз валидирует доступ и выдаёт тонкий session-токен; backend сопоставляет его с внутренним user_id. Гость — только сессия, с урезанными функциями (только авто-подбор; без друзей, статистики и истории).

Аккаунты, привязка и слияние (Stage 1 / 10)

Первый контакт с платформы заводит постоянный аккаунт. Из профиля игрок привязывает другие платформенные личности или email через confirm-поток; привязка личности, у которой уже есть история, сливает её в текущий аккаунт (статистика суммируется, игры/друзья переносятся).

Лобби и подбор (Stage 4)

Нижнее tab-меню: мои игры, профиль. Авто-подбор (всегда 2 игрока) встаёт в пул по (вариант, язык); через 10 с без человека подставляется робот. Игры с друзьями (2–4) формируются по списку друзей, внутреннему ID или deep-link.

Игровой процесс (Stage 3)

Выкладывание фишек, пас, обмен или сдача. Ход проверяется по словарю при сдаче и считается. Одна подсказка на партию показывает лучший ход. Инструмент проверки слова безлимитный и предлагает пожаловаться. Партия завершается, когда мешок пуст и игрок выложил стойку, после 6 подряд бесплодных ходов, либо по таймауту хода в 24 часа (авто-сдача).

Робот-соперник (Stage 5)

Неотличимый от человека дублёр в авто-подборе. Один раз решает, играть ли на победу (~40%), целится в небольшой отрыв по очкам, ходит с человеческим таймингом и ночным сном, делает и принимает nudge как человек.

Социальное: друзья, блок, чат, nudge (Stage 4)

Добавление в друзья; независимая блокировка чата и/или заявок в друзья; чат в рамках партии; nudge ожидаемого соперника не чаще раза в час (платформенное уведомление).

Профиль и настройки (Stage 4)

Язык (en/ru), отображаемое имя, привязанные аккаунты, привязка email, таймзона, переключатели блокировок.

История и статистика (Stage 3)

Завершённые партии архивируются в независимом от словаря виде и экспортируются в GCG. Статистика: победы, поражения, макс. очков за партию, макс. очков за слово.

Администрирование (Stage 9)

Админ (Basic Auth на gateway) разбирает жалобы на слова, управляет версиями словаря, смотрит пользователей/игры.