106 lines
7.9 KiB
Markdown
106 lines
7.9 KiB
Markdown
# Дорожная карта
|
||
|
||
Статус на 19 июля 2026: полный versioned production-пайплайн между событием, составами, live-серией и турнирной сеткой реализован. Backend, admin roster editor, live/spectator UI, SSE и проверки контракта связаны в единый сценарий.
|
||
|
||
## Завершённый контрольный рубеж — полный пайплайн скрима
|
||
|
||
- [x] закрыть регистрацию и зафиксировать Going-участников;
|
||
- [x] сгенерировать и выбрать вариант баланса;
|
||
- [x] дать Admin обменивать игроков одинаковой роли и заменять их резервными;
|
||
- [x] пересчитывать показатели после каждой ручной правки;
|
||
- [x] подтвердить составы 1/2/2 и капитанов;
|
||
- [x] редактировать произвольный граф Bo3 через Team / Winner / Loser и запускать все готовые пары;
|
||
- [x] связать жеребьёвку, map draft, hero draft и результаты карт единым versioned FSM;
|
||
- [x] блокировать обычное изменение составов после старта;
|
||
- [x] разрешить аудируемую аварийную замену Admin;
|
||
- [x] синхронизировать admin/live/spectator экраны через SSE;
|
||
- [x] показывать сохранённые составы на публичной странице события после балансировки;
|
||
- [x] уведомлять участника звуком, когда сервер передаёт ход его команде;
|
||
- [x] покрыть переходы и конфликты версий unit-, integration- и UI-тестами.
|
||
|
||
## Этап 0 — уточнение продукта
|
||
|
||
- согласовать способ оценки игроков и рейтинг по ролям;
|
||
- определить размеры команд и число одновременно создаваемых команд;
|
||
- выбрать первый формат турнирной сетки;
|
||
- подтвердить редактируемые части регламента;
|
||
- подготовить wireframes ключевых экранов.
|
||
|
||
## Этап 1 — фундамент
|
||
|
||
- создать Go backend и React frontend;
|
||
- подготовить отдельный Compose для локальной разработки;
|
||
- подготовить production Compose для Coolify без пользовательских сетей;
|
||
- добавить multi-stage Dockerfile для frontend и backend;
|
||
- настроить PostgreSQL в составе production-стека, persistent volume и миграции;
|
||
- добавить healthcheck и graceful shutdown сервисов;
|
||
- описать переменные Coolify и настройку внешних резервных копий БД;
|
||
- реализовать Discord OAuth и серверные сессии;
|
||
- добавить роли Admin/Player и безопасное начальное назначение Admin по Discord ID;
|
||
- зафиксировать OpenAPI-контракт;
|
||
- реализовать базовую навигацию и дизайн-систему;
|
||
- добавить переключение RU/EN и локализовать все пользовательские строки;
|
||
- добавить автоматические проверки и тесты.
|
||
|
||
## Этап 2 — игроки и балансировка
|
||
|
||
- самостоятельное заполнение профиля и рейтингов по ролям;
|
||
- выбор предпочитаемых ролей, до трёх желаемых союзников и до трёх avoid-игроков;
|
||
- календарь будущих миксов;
|
||
- статусы участия Going / Maybe / NotGoing;
|
||
- админку для событий, игроков и регистраций;
|
||
- изменение Admin статуса участия за другого игрока с аудитом;
|
||
- подтверждение списка участников Admin;
|
||
- назначение доступных ролей;
|
||
- генерация нескольких вариантов команд;
|
||
- оценка качества баланса;
|
||
- мягкий учёт ролевых, командных и avoid-предпочтений в целевой функции;
|
||
- ручная перестановка игроков с пересчётом показателей.
|
||
- назначение и переназначение капитана каждой команды.
|
||
|
||
## Этап 3 — проведение серии
|
||
|
||
- создание пары команд;
|
||
- серверная жеребьёвка с прозрачным результатом;
|
||
- драфт карт по выбранному ruleset;
|
||
- бан героев с проверкой ролей и истории серии;
|
||
- фиксация победителя или ничьей каждой карты;
|
||
- автоматический счёт серии и определение победителя;
|
||
- исправление ошибочного результата с аудитом;
|
||
- синхронизация клиентов в реальном времени.
|
||
|
||
## Этап 4 — турнир
|
||
|
||
- versioned drag-and-drop редактор произвольной сетки;
|
||
- автоматическое создание следующих пар по Winner/Loser-зависимостям;
|
||
- экран трансляции/зрителя;
|
||
- история результатов игрового вечера.
|
||
|
||
## Этап 5 — удобство сообщества
|
||
|
||
- пресеты регламентов;
|
||
- [x] публичные профили игроков, статистика Bo3/карт и история последних матчей;
|
||
- статистика команд;
|
||
- повторная жеребьёвка с защитой от одинаковых составов;
|
||
- [x] Discord-анонс нового микса с `@everyone` и ссылкой на регистрацию;
|
||
- [x] event-specific Discord-роли ответа и статусов Going/Maybe/NotGoing;
|
||
- обновление анонса, напоминания, публикация составов и результатов;
|
||
- [x] идемпотентная синхронизация временных Discord team/captain и Tank/Damage/Support ролей;
|
||
- [x] отдельные member-list группы для команд и зарегистрированных участников;
|
||
- [x] пятиминутная глобальная сверка и восстановление managed Discord-ролей;
|
||
- [x] уникальные nickname, BattleTag и настраиваемая Admin ссылка на Discord в FAQ;
|
||
- создание и очистка временных командных голосовых каналов;
|
||
- импорт данных и резервное копирование.
|
||
|
||
## Идеи после MVP
|
||
|
||
- режим «капитанский драфт» игроков;
|
||
- ограничения «хочу вместе» и «не ставить вместе»;
|
||
- сезонный рейтинг сообщества;
|
||
- прогноз вероятности победы и подсветка причин дисбаланса;
|
||
- голосование зрителей за карту или MVP;
|
||
- публичный overlay для стрима;
|
||
- PWA с push-уведомлением о начале матча;
|
||
- синхронизация событий с внешним календарём через iCalendar;
|
||
- библиотека версионируемых регламентов под разные патчи.
|