docs: update wiki for web batch bulk operations
@@ -57,14 +57,15 @@ Blazor Server-приложение использует cookie auth и Telegram
|
|||||||
Основные сервисы:
|
Основные сервисы:
|
||||||
|
|
||||||
- `TelegramAuthService` валидирует HMAC-SHA256 подпись Telegram Login Widget и `auth_date`.
|
- `TelegramAuthService` валидирует HMAC-SHA256 подпись Telegram Login Widget и `auth_date`.
|
||||||
- `SessionService` читает и обновляет группы/сессии через Dapper.
|
- `SessionService` читает и обновляет группы/сессии через Dapper, включая bulk-операции по `batch_id`.
|
||||||
|
- `BatchSchedulePlanner` задаёт детерминированные правила fixed-interval переноса и clone-смещения batch.
|
||||||
- `AuthorizedSessionService` проверяет, что текущий Telegram ID является ГМом группы.
|
- `AuthorizedSessionService` проверяет, что текущий Telegram ID является ГМом группы.
|
||||||
|
|
||||||
Основные страницы:
|
Основные страницы:
|
||||||
|
|
||||||
- `/login` — вход через Telegram.
|
- `/login` — вход через Telegram.
|
||||||
- `/` — список групп ГМа.
|
- `/` — список групп ГМа.
|
||||||
- `/group/{GroupId}` — будущие сессии группы.
|
- `/group/{GroupId}` — будущие сессии группы и batch bulk-операции.
|
||||||
- `/session/edit/{SessionId}` — редактирование названия, времени и ссылки.
|
- `/session/edit/{SessionId}` — редактирование названия, времени и ссылки.
|
||||||
|
|
||||||
## Общий домен
|
## Общий домен
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# База данных
|
# База данных
|
||||||
|
|
||||||
GM-Relay **v1.3.0** использует PostgreSQL. Изменения схемы управляются DbUp-миграциями, встроенными в `GmRelay.Bot` как embedded resources.
|
GM-Relay **v1.4.0** использует PostgreSQL. Изменения схемы управляются DbUp-миграциями, встроенными в `GmRelay.Bot` как embedded resources.
|
||||||
|
|
||||||
## Миграции
|
## Миграции
|
||||||
|
|
||||||
@@ -57,6 +57,8 @@ Telegram-группы, где организуются игры.
|
|||||||
- `thread_id` — ID Telegram forum topic, если тема была создана.
|
- `thread_id` — ID Telegram forum topic, если тема была создана.
|
||||||
- `batch_message_id` — ID исходного Telegram-сообщения с расписанием пачки.
|
- `batch_message_id` — ID исходного Telegram-сообщения с расписанием пачки.
|
||||||
|
|
||||||
|
Bulk-операции Web в версии `1.4.0` не требуют новых таблиц: общий title/link обновляется по `batch_id`, перенос пересчитывает `scheduled_at` существующих строк, а clone создаёт новый `batch_id` и новые строки `sessions` без копирования `session_participants`.
|
||||||
|
|
||||||
Для активных статусов есть partial index `ix_sessions_pending` по `scheduled_at`.
|
Для активных статусов есть partial index `ix_sessions_pending` по `scheduled_at`.
|
||||||
|
|
||||||
### session_participants
|
### session_participants
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Быстрый старт
|
# Быстрый старт
|
||||||
|
|
||||||
Эта страница описывает минимальный запуск текущей версии GM-Relay **v1.3.0**.
|
Эта страница описывает минимальный запуск текущей версии GM-Relay **v1.4.0**.
|
||||||
|
|
||||||
## Требования
|
## Требования
|
||||||
|
|
||||||
@@ -41,8 +41,8 @@ docker compose up -d
|
|||||||
Compose поднимает:
|
Compose поднимает:
|
||||||
|
|
||||||
- `db`: PostgreSQL 17 Alpine, БД `gmrelay_db`, пользователь `gmrelay`.
|
- `db`: PostgreSQL 17 Alpine, БД `gmrelay_db`, пользователь `gmrelay`.
|
||||||
- `bot`: образ `git.codeanddice.ru/toutsu/gmrelay-bot:1.3.0`.
|
- `bot`: образ `git.codeanddice.ru/toutsu/gmrelay-bot:1.4.0`.
|
||||||
- `web`: образ `git.codeanddice.ru/toutsu/gmrelay-web:1.3.0`.
|
- `web`: образ `git.codeanddice.ru/toutsu/gmrelay-web:1.4.0`.
|
||||||
|
|
||||||
Web UI будет доступен на `http://localhost:8080`, если `GMRELAY_WEB_PORT` не переопределён.
|
Web UI будет доступен на `http://localhost:8080`, если `GMRELAY_WEB_PORT` не переопределён.
|
||||||
|
|
||||||
@@ -74,3 +74,4 @@ dotnet run --project src/GmRelay.AppHost
|
|||||||
- В сообщении расписания у активной сессии должны быть кнопки записи и `Выйти`.
|
- В сообщении расписания у активной сессии должны быть кнопки записи и `Выйти`.
|
||||||
- Web-панель должна перенаправлять неавторизованного пользователя на `/login`.
|
- Web-панель должна перенаправлять неавторизованного пользователя на `/login`.
|
||||||
- После входа через Telegram GM видит только группы, где он записан как `gm_telegram_id`.
|
- После входа через Telegram GM видит только группы, где он записан как `gm_telegram_id`.
|
||||||
|
- На странице группы GM видит блоки batch-операций: общий title/link, перенос всей пачки и клонирование batch.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Развёртывание
|
# Развёртывание
|
||||||
|
|
||||||
Текущий production-like способ запуска GM-Relay **v1.3.0** — Docker Compose из `compose.yaml`.
|
Текущий production-like способ запуска GM-Relay **v1.4.0** — Docker Compose из `compose.yaml`.
|
||||||
|
|
||||||
## Сервисы Docker Compose
|
## Сервисы Docker Compose
|
||||||
|
|
||||||
@@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
`bot`:
|
`bot`:
|
||||||
|
|
||||||
- образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.3.0`;
|
- образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.4.0`;
|
||||||
- запускается после успешного healthcheck сервиса `db`;
|
- запускается после успешного healthcheck сервиса `db`;
|
||||||
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`.
|
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`.
|
||||||
|
|
||||||
`web`:
|
`web`:
|
||||||
|
|
||||||
- образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.3.0`;
|
- образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.4.0`;
|
||||||
- запускается после успешного healthcheck сервиса `db`;
|
- запускается после успешного healthcheck сервиса `db`;
|
||||||
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`;
|
- переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`;
|
||||||
- порт: `${GMRELAY_WEB_PORT:-8080}:8080`;
|
- порт: `${GMRELAY_WEB_PORT:-8080}:8080`;
|
||||||
@@ -92,7 +92,7 @@ docker compose down -v
|
|||||||
|
|
||||||
## Поведение миграций
|
## Поведение миграций
|
||||||
|
|
||||||
Бот применяет DbUp-миграции при старте до обработки Telegram updates. В версии `1.3.0` новых миграций нет: самостоятельная отмена записи использует существующую таблицу `session_participants` и waitlist-схему из `V006__add_session_capacity_waitlist.sql`. После обновления стоит проверить логи `bot`, чтобы убедиться, что миграции применились без ошибок.
|
Бот применяет DbUp-миграции при старте до обработки Telegram updates. В версии `1.4.0` новых миграций нет: bulk-операции Web используют существующие поля `sessions.batch_id`, `sessions.batch_message_id`, `sessions.title`, `sessions.join_link` и `sessions.scheduled_at`. После обновления стоит проверить логи `bot`, чтобы убедиться, что миграции применились без ошибок.
|
||||||
|
|
||||||
## Безопасность
|
## Безопасность
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ dotnet run --project src/GmRelay.AppHost
|
|||||||
|
|
||||||
`Directory.Build.props` задаёт:
|
`Directory.Build.props` задаёт:
|
||||||
|
|
||||||
- `Version`: `1.3.0`.
|
- `Version`: `1.4.0`.
|
||||||
- `TargetFramework`: `net10.0`.
|
- `TargetFramework`: `net10.0`.
|
||||||
- `LangVersion`: `preview`.
|
- `LangVersion`: `preview`.
|
||||||
- `Nullable`: `enable`.
|
- `Nullable`: `enable`.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Руководство ГМа
|
# Руководство ГМа
|
||||||
|
|
||||||
Руководство описывает пользовательские сценарии бота и Web-панели для GM-Relay **v1.3.0**.
|
Руководство описывает пользовательские сценарии бота и Web-панели для GM-Relay **v1.4.0**.
|
||||||
|
|
||||||
## Кто считается ГМом
|
## Кто считается ГМом
|
||||||
|
|
||||||
@@ -60,6 +60,16 @@ GM может поднять первого игрока из очереди:
|
|||||||
|
|
||||||
Повышение возможно только если в основном составе есть свободное место. Если лимит заполнен, сначала увеличьте `Мест:` в Web-редактировании сессии. При самостоятельном выходе активного игрока первый ожидающий повышается автоматически.
|
Повышение возможно только если в основном составе есть свободное место. Если лимит заполнен, сначала увеличьте `Мест:` в Web-редактировании сессии. При самостоятельном выходе активного игрока первый ожидающий повышается автоматически.
|
||||||
|
|
||||||
|
## Bulk-операции для batch в Web
|
||||||
|
|
||||||
|
На странице группы Web-панель показывает отдельный блок для каждой видимой пачки игр. GM может:
|
||||||
|
|
||||||
|
- обновить общий `title` и `link` сразу у всех сессий batch;
|
||||||
|
- перенести всю пачку, задав новую первую дату и фиксированный шаг между играми в днях;
|
||||||
|
- клонировать batch на следующую неделю или следующий календарный месяц.
|
||||||
|
|
||||||
|
Редактирование title/link и перенос перерисовывают исходное Telegram-сообщение расписания. Клонирование создаёт новую пачку с новым `batch_id`, новым Telegram-сообщением и пустым составом игроков.
|
||||||
|
|
||||||
## Отмена и удаление
|
## Отмена и удаление
|
||||||
|
|
||||||
- `Отменить <дата> (ГМ)` в сообщении расписания меняет статус сессии на `Cancelled` и оставляет её в истории пачки.
|
- `Отменить <дата> (ГМ)` в сообщении расписания меняет статус сессии на `Cancelled` и оставляет её в истории пачки.
|
||||||
@@ -99,6 +109,7 @@ Web UI доступен после входа через Telegram Login Widget.
|
|||||||
- открыть список предстоящих сессий группы;
|
- открыть список предстоящих сессий группы;
|
||||||
- видеть заполненность и размер листа ожидания;
|
- видеть заполненность и размер листа ожидания;
|
||||||
- редактировать название, время, ссылку и лимит мест;
|
- редактировать название, время, ссылку и лимит мест;
|
||||||
- поднять первого игрока из листа ожидания, если есть свободное место.
|
- поднять первого игрока из листа ожидания, если есть свободное место;
|
||||||
|
- выполнять bulk-операции над batch: общий title/link, перенос пачки и клонирование на неделю или месяц.
|
||||||
|
|
||||||
При сохранении изменений Web-панель обновляет запись в БД, отправляет уведомление в Telegram-группу и пытается перерисовать исходное сообщение расписания пачки.
|
При сохранении отдельной сессии Web-панель обновляет запись в БД, отправляет уведомление в Telegram-группу и пытается перерисовать исходное сообщение расписания пачки. Bulk-операции обновляют исходное batch-сообщение, а clone публикует новое сообщение для новой пачки.
|
||||||
|
|||||||
+3
-2
@@ -1,10 +1,10 @@
|
|||||||
# Главная
|
# Главная
|
||||||
|
|
||||||
GM-Relay — Telegram-бот и Blazor-панель для организации TTRPG-сессий. Текущее состояние документации соответствует репозиторию `Toutsu/GmRelayBot` и релизу **v1.3.0**.
|
GM-Relay — Telegram-бот и Blazor-панель для организации TTRPG-сессий. Текущее состояние документации соответствует репозиторию `Toutsu/GmRelayBot` и релизу **v1.4.0**.
|
||||||
|
|
||||||
## Текущий стек
|
## Текущий стек
|
||||||
|
|
||||||
- Версия проекта: `1.3.0`.
|
- Версия проекта: `1.4.0`.
|
||||||
- Платформа: `.NET 10`, C# preview, nullable reference types, warnings as errors.
|
- Платформа: `.NET 10`, C# preview, nullable reference types, warnings as errors.
|
||||||
- Оркестрация разработки: `.NET Aspire 13` через `src/GmRelay.AppHost`.
|
- Оркестрация разработки: `.NET Aspire 13` через `src/GmRelay.AppHost`.
|
||||||
- Runtime бота: `Worker Service`, Telegram long polling, Native AOT.
|
- Runtime бота: `Worker Service`, Telegram long polling, Native AOT.
|
||||||
@@ -29,6 +29,7 @@ GM-Relay — Telegram-бот и Blazor-панель для организаци
|
|||||||
- Отправка ссылки на подключение за 5 минут до подтверждённой игры.
|
- Отправка ссылки на подключение за 5 минут до подтверждённой игры.
|
||||||
- Экспорт будущих запланированных сессий в `.ics` через `/exportcalendar`.
|
- Экспорт будущих запланированных сессий в `.ics` через `/exportcalendar`.
|
||||||
- Web-панель для GM: список групп, список сессий, редактирование названия, времени, ссылки и лимита мест.
|
- Web-панель для GM: список групп, список сессий, редактирование названия, времени, ссылки и лимита мест.
|
||||||
|
- Bulk-операции в Web Dashboard: общий `title/link` для batch, перенос всей пачки на фиксированный шаг и клонирование на следующую неделю или месяц с новым Telegram-сообщением.
|
||||||
|
|
||||||
## Разделы
|
## Разделы
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user