effe6675bc
Tests · Go / test (push) Successful in 32s
- 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)
59 lines
4.5 KiB
Markdown
59 lines
4.5 KiB
Markdown
# Scrabble Game — Функциональная спецификация
|
|
|
|
Пользовательские сценарии по доменам: что делает каждая видимая пользователю
|
|
операция. Это зеркало [`FUNCTIONAL.md`](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) разбирает жалобы на слова, управляет версиями
|
|
словаря, смотрит пользователей/игры.
|