Initialize project with basic structure, including Docker configuration, backend and frontend setup, environment configuration, and essential files for development.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
## Текущее состояние
|
||||
|
||||
Проект начинается с нуля. Сформированы исходный контекст, предметная модель, архитектурное направление и предварительная дорожная карта.
|
||||
Собран и проверен full-stack MVP: Go API с PostgreSQL, Discord OAuth и серверными сессиями, React-интерфейс, календарь и RSVP, административные сценарии, preference-aware балансировка 1/2/2, капитаны, Bo3-драфты и результаты, single-elimination сетка, SSE и RU/EN локализация. Добавлены Docker Compose для локальной разработки и Coolify, миграции, OpenAPI-контракт и CI.
|
||||
|
||||
## Подтверждённые требования
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
- backend на Go с Clean Architecture;
|
||||
- современный frontend на фреймворке;
|
||||
- Discord OAuth и самостоятельное заполнение игроком рейтингов Tank, Damage и Support;
|
||||
- выбор игроком предпочитаемых ролей и до трёх желаемых союзников;
|
||||
- переключение всего интерфейса между RU и EN;
|
||||
- календарь запланированных миксов со статусами Going / Maybe / NotGoing;
|
||||
- административная панель управления событиями, игроками и регистрациями;
|
||||
- возможность Admin отметить участие за другого игрока;
|
||||
@@ -49,8 +51,9 @@
|
||||
## Принятые решения для MVP
|
||||
|
||||
- игрок входит через Discord;
|
||||
- игрок самостоятельно указывает рейтинг 1–100 для каждой роли;
|
||||
- игрок самостоятельно указывает Overwatch-ранг от Bronze 5 до Champion 1 для каждой роли;
|
||||
- балансировщик автоматически назначает роли и собирает команды 1/2/2;
|
||||
- предпочтения ролей и союзников учитываются как мягкие штрафы после требований баланса;
|
||||
- участники сверх полного состава остаются в резерве;
|
||||
- первая турнирная сетка — single elimination;
|
||||
- игрок отмечается на микс через календарь;
|
||||
@@ -63,6 +66,6 @@
|
||||
|
||||
## Ближайший следующий шаг
|
||||
|
||||
Создать full-stack каркас и первый вертикальный сценарий: Discord-вход → профиль с рейтингами → календарь → отметка участия → админка регистраций → список участников события.
|
||||
Развернуть тестовый экземпляр через Coolify, настроить Discord OAuth и выполнить приёмочное тестирование полного сценария на реальных аккаунтах и PostgreSQL.
|
||||
|
||||
Открытое продуктовое решение, которое не блокирует каркас: как выбирается Hybrid/Escort для второй карты — заранее организатором, случайно или отдельным действием команд.
|
||||
|
||||
@@ -42,6 +42,7 @@ backend/
|
||||
- React + TypeScript;
|
||||
- Vite;
|
||||
- TanStack Router и TanStack Query;
|
||||
- собственный типизированный слой локализации RU/EN с сохранением языка в localStorage;
|
||||
- Tailwind CSS;
|
||||
- shadcn/ui как основа компонентов;
|
||||
- Framer Motion для умеренных анимаций;
|
||||
@@ -63,7 +64,7 @@ frontend/src/
|
||||
|
||||
## Границы модулей
|
||||
|
||||
- Players: профили, рейтинги и предпочтения ролей;
|
||||
- Players: профили, рейтинги, предпочтения ролей и желаемых союзников;
|
||||
- Auth: Discord OAuth, сессии и роли доступа;
|
||||
- Admin: управление игроками, регистрациями, событиями и капитанами;
|
||||
- Events: календарь, регистрации участников и состояние игрового вечера;
|
||||
@@ -77,7 +78,9 @@ frontend/src/
|
||||
|
||||
### Балансировщик
|
||||
|
||||
В MVP — детерминированный оптимизатор с весовой функцией качества и ограниченным поиском вариантов. Алгоритм располагается в доменном слое и не зависит от БД. Позже его можно заменить на constraint solver без изменения API сценария.
|
||||
В MVP — детерминированный оптимизатор с весовой функцией качества и ограниченным поиском вариантов. Overwatch-ранги Bronze 5 → Champion 1 отображаются в ordinal 1–40 только для внутренних вычислений. Жёсткие ограничения обеспечивают состав 1/2/2 и уникальность игроков. Мягкие штрафы учитывают общий и ролевой разброс рейтинга, назначение вне предпочитаемой роли и разделение желаемых союзников. После построения нескольких начальных вариантов выполняется локальный поиск обменами игроков одной роли.
|
||||
|
||||
Алгоритм располагается в доменном слое и не зависит от БД. При росте сообщества его можно заменить на CP-SAT/MILP solver без изменения API сценария.
|
||||
|
||||
### Драфт как конечный автомат
|
||||
|
||||
|
||||
@@ -4,7 +4,9 @@
|
||||
|
||||
### Player
|
||||
|
||||
Игрок связан с Discord-аккаунтом и имеет отображаемое имя и собственный рейтинг для каждой роли: Tank, Damage, Support. Игрок редактирует свои рейтинги самостоятельно; организатор может видеть время последнего изменения. Дополнительно можно хранить предпочитаемые роли, BattleTag и историю участия.
|
||||
Игрок связан с Discord-аккаунтом и имеет отображаемое имя и собственный Overwatch-ранг для каждой роли: Tank, Damage, Support. Лестница содержит 40 значений от Bronze 5 до Champion 1: Bronze, Silver, Gold, Platinum, Diamond, Master, Grandmaster, Champion, каждый с дивизионами 5 → 1. Для вычислений значения преобразуются в ordinal 1–40.
|
||||
|
||||
Игрок редактирует ранги самостоятельно; Admin может видеть время последнего изменения. Игрок выбирает любое число предпочитаемых ролей и до трёх желаемых союзников. Предпочтения являются мягкими пожеланиями, а не гарантией состава.
|
||||
|
||||
### Account
|
||||
|
||||
@@ -86,12 +88,15 @@
|
||||
|
||||
- разницу средних рейтингов по ролям;
|
||||
- корректность состава 1 Tank / 2 Damage / 2 Support;
|
||||
- предпочтения игроков;
|
||||
- назначение игроков на предпочитаемые роли;
|
||||
- попадание выбранных игроком союзников в одну команду;
|
||||
- запрет повторения составов при регулярных играх;
|
||||
- заранее заданные пары или ограничения «вместе/раздельно».
|
||||
|
||||
Алгоритм должен возвращать не только составы, но и понятную оценку качества и причины оставшегося дисбаланса.
|
||||
|
||||
Жёсткие ограничения 1/2/2 и уникальности игроков всегда важнее предпочтений. Разница рейтингов имеет больший вес, чем пожелания. В MVP используется детерминированная эвристика: несколько начальных назначений, взвешенная целевая функция и локальные обмены игроков одной роли. Архитектура допускает замену на CP-SAT/MILP solver.
|
||||
|
||||
## Доменные события
|
||||
|
||||
- EventCreated;
|
||||
|
||||
@@ -7,10 +7,12 @@ Mixmaker — веб-приложение для организации люби
|
||||
## Основные задачи
|
||||
|
||||
- регистрация участников и оценка их силы по ролям;
|
||||
- вход через Discord и самостоятельное редактирование игроком своих рейтингов;
|
||||
- вход через Discord и самостоятельный выбор ранга Bronze 5 → Champion 1 для каждой роли;
|
||||
- выбор предпочитаемых ролей и до трёх желаемых союзников;
|
||||
- переключение интерфейса между русским и английским языком;
|
||||
- календарь запланированных миксов и отметки об участии;
|
||||
- административная панель для управления событиями, участниками и их отметками;
|
||||
- автоматическая балансировка нескольких команд;
|
||||
- автоматическая балансировка нескольких команд с мягким учётом предпочтений;
|
||||
- назначение капитанов сформированных команд;
|
||||
- проведение жеребьёвки;
|
||||
- пошаговые баны карт и героев с автоматической проверкой правил;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
# Дорожная карта
|
||||
|
||||
Статус на 19 июля 2026: технический MVP этапов 0–4 реализован. Следующий контрольный рубеж — развёртывание в Coolify и приёмочное тестирование с реальными Discord-аккаунтами; улучшения этапа 5 остаются будущей работой.
|
||||
|
||||
## Этап 0 — уточнение продукта
|
||||
|
||||
- согласовать способ оценки игроков и рейтинг по ролям;
|
||||
@@ -21,11 +23,13 @@
|
||||
- добавить роли Admin/Player и безопасное начальное назначение Admin по Discord ID;
|
||||
- зафиксировать OpenAPI-контракт;
|
||||
- реализовать базовую навигацию и дизайн-систему;
|
||||
- добавить переключение RU/EN и локализовать все пользовательские строки;
|
||||
- добавить автоматические проверки и тесты.
|
||||
|
||||
## Этап 2 — игроки и балансировка
|
||||
|
||||
- самостоятельное заполнение профиля и рейтингов по ролям;
|
||||
- выбор предпочитаемых ролей и до трёх желаемых союзников;
|
||||
- календарь будущих миксов;
|
||||
- статусы участия Going / Maybe / NotGoing;
|
||||
- админку для событий, игроков и регистраций;
|
||||
@@ -34,6 +38,7 @@
|
||||
- назначение доступных ролей;
|
||||
- генерация нескольких вариантов команд;
|
||||
- оценка качества баланса;
|
||||
- мягкий учёт ролевых и командных предпочтений в целевой функции;
|
||||
- ручная перестановка игроков с пересчётом показателей.
|
||||
- назначение и переназначение капитана каждой команды.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user