Initialize project with basic structure, including Docker configuration, backend and frontend setup, environment configuration, and essential files for development.
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
CI / compose (push) Has been cancelled

This commit is contained in:
2026-07-19 00:17:31 +03:00
parent d401e9009c
commit 1239fcee08
69 changed files with 12391 additions and 10 deletions

View File

@@ -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;
- игрок самостоятельно указывает рейтинг 1100 для каждой роли;
- игрок самостоятельно указывает Overwatch-ранг от Bronze 5 до Champion 1 для каждой роли;
- балансировщик автоматически назначает роли и собирает команды 1/2/2;
- предпочтения ролей и союзников учитываются как мягкие штрафы после требований баланса;
- участники сверх полного состава остаются в резерве;
- первая турнирная сетка — single elimination;
- игрок отмечается на микс через календарь;
@@ -63,6 +66,6 @@
## Ближайший следующий шаг
Создать full-stack каркас и первый вертикальный сценарий: Discord-вход → профиль с рейтингами → календарь → отметка участия → админка регистраций → список участников события.
Развернуть тестовый экземпляр через Coolify, настроить Discord OAuth и выполнить приёмочное тестирование полного сценария на реальных аккаунтах и PostgreSQL.
Открытое продуктовое решение, которое не блокирует каркас: как выбирается Hybrid/Escort для второй карты — заранее организатором, случайно или отдельным действием команд.

View File

@@ -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 140 только для внутренних вычислений. Жёсткие ограничения обеспечивают состав 1/2/2 и уникальность игроков. Мягкие штрафы учитывают общий и ролевой разброс рейтинга, назначение вне предпочитаемой роли и разделение желаемых союзников. После построения нескольких начальных вариантов выполняется локальный поиск обменами игроков одной роли.
Алгоритм располагается в доменном слое и не зависит от БД. При росте сообщества его можно заменить на CP-SAT/MILP solver без изменения API сценария.
### Драфт как конечный автомат

View File

@@ -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 140.
Игрок редактирует ранги самостоятельно; Admin может видеть время последнего изменения. Игрок выбирает любое число предпочитаемых ролей и до трёх желаемых союзников. Предпочтения являются мягкими пожеланиями, а не гарантией состава.
### Account
@@ -86,12 +88,15 @@
- разницу средних рейтингов по ролям;
- корректность состава 1 Tank / 2 Damage / 2 Support;
- предпочтения игроков;
- назначение игроков на предпочитаемые роли;
- попадание выбранных игроком союзников в одну команду;
- запрет повторения составов при регулярных играх;
- заранее заданные пары или ограничения «вместе/раздельно».
Алгоритм должен возвращать не только составы, но и понятную оценку качества и причины оставшегося дисбаланса.
Жёсткие ограничения 1/2/2 и уникальности игроков всегда важнее предпочтений. Разница рейтингов имеет больший вес, чем пожелания. В MVP используется детерминированная эвристика: несколько начальных назначений, взвешенная целевая функция и локальные обмены игроков одной роли. Архитектура допускает замену на CP-SAT/MILP solver.
## Доменные события
- EventCreated;

View File

@@ -7,10 +7,12 @@ Mixmaker — веб-приложение для организации люби
## Основные задачи
- регистрация участников и оценка их силы по ролям;
- вход через Discord и самостоятельное редактирование игроком своих рейтингов;
- вход через Discord и самостоятельный выбор ранга Bronze 5 → Champion 1 для каждой роли;
- выбор предпочитаемых ролей и до трёх желаемых союзников;
- переключение интерфейса между русским и английским языком;
- календарь запланированных миксов и отметки об участии;
- административная панель для управления событиями, участниками и их отметками;
- автоматическая балансировка нескольких команд;
- автоматическая балансировка нескольких команд с мягким учётом предпочтений;
- назначение капитанов сформированных команд;
- проведение жеребьёвки;
- пошаговые баны карт и героев с автоматической проверкой правил;

View File

@@ -1,5 +1,7 @@
# Дорожная карта
Статус на 19 июля 2026: технический MVP этапов 04 реализован. Следующий контрольный рубеж — развёртывание в Coolify и приёмочное тестирование с реальными Discord-аккаунтами; улучшения этапа 5 остаются будущей работой.
## Этап 0 — уточнение продукта
- согласовать способ оценки игроков и рейтинг по ролям;
@@ -21,11 +23,13 @@
- добавить роли Admin/Player и безопасное начальное назначение Admin по Discord ID;
- зафиксировать OpenAPI-контракт;
- реализовать базовую навигацию и дизайн-систему;
- добавить переключение RU/EN и локализовать все пользовательские строки;
- добавить автоматические проверки и тесты.
## Этап 2 — игроки и балансировка
- самостоятельное заполнение профиля и рейтингов по ролям;
- выбор предпочитаемых ролей и до трёх желаемых союзников;
- календарь будущих миксов;
- статусы участия Going / Maybe / NotGoing;
- админку для событий, игроков и регистраций;
@@ -34,6 +38,7 @@
- назначение доступных ролей;
- генерация нескольких вариантов команд;
- оценка качества баланса;
- мягкий учёт ролевых и командных предпочтений в целевой функции;
- ручная перестановка игроков с пересчётом показателей.
- назначение и переназначение капитана каждой команды.