From 173b1bdcb148d483d099910b5bd2a05f001eb2d1 Mon Sep 17 00:00:00 2001 From: Toutsu Date: Tue, 5 May 2026 13:06:32 +0300 Subject: [PATCH] docs: update wiki for v1.9.9 telegram smoke --- ...85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0.md | 2 +- ...0%D0%B7%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.md | 4 ++-- ...2%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82.md | 8 ++++---- ...91%D1%80%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.md | 9 +++++---- ...B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0.md | 4 +++- ...E%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md | 4 ++-- Home.md | 9 +++++++-- 7 files changed, 24 insertions(+), 16 deletions(-) diff --git a/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0.md b/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0.md index de92298..54693ef 100644 --- a/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0.md +++ b/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0.md @@ -59,7 +59,7 @@ GM-Relay состоит из нескольких .NET-проектов и об ## Web UI Blazor Server-приложение использует cookie auth и Telegram Login Widget. -Начиная с `1.9.0`, тот же Web UI открывается как Telegram Mini App через `/miniapp`; в `1.9.6` основной вход по-прежнему проверяет Telegram `initData`, а fallback `/login` использует callback-mode Telegram Login Widget и endpoint `/auth/telegram-login`, чтобы cookie выставлялась внутри активного Mini App WebView без ручного закрытия и повторного открытия. +Начиная с `1.9.0`, тот же Web UI открывается как Telegram Mini App через `/miniapp`; в `1.9.9` основной вход по-прежнему проверяет Telegram `initData`, а fallback `/login` использует callback-mode Telegram Login Widget и endpoint `/auth/telegram-login`, чтобы cookie выставлялась внутри активного Mini App WebView без ручного закрытия и повторного открытия. Основные сервисы: diff --git a/%D0%91%D0%B0%D0%B7%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.md b/%D0%91%D0%B0%D0%B7%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.md index 6fffa80..e3d0c89 100644 --- a/%D0%91%D0%B0%D0%B7%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.md +++ b/%D0%91%D0%B0%D0%B7%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.md @@ -1,6 +1,6 @@ # База данных -GM-Relay **v1.9.6** использует PostgreSQL. Изменения схемы управляются DbUp-миграциями, встроенными в `GmRelay.Bot` как embedded resources. +GM-Relay **v1.9.9** использует PostgreSQL. Изменения схемы управляются DbUp-миграциями, встроенными в `GmRelay.Bot` как embedded resources. ## Миграции @@ -17,7 +17,7 @@ GM-Relay **v1.9.6** использует PostgreSQL. Изменения схем - `V009__add_multi_option_reschedule_votes.sql` — дедлайн и выбранный вариант в `reschedule_proposals`, таблицы `reschedule_options` и `reschedule_option_votes` для голосования по нескольким слотам. - `V010__add_campaign_templates.sql` — таблица `campaign_templates` для сохранённых шаблонов кампаний и быстрого создания повторяющихся batch-расписаний из Web. -Версия `1.9.6` не добавляет новую миграцию: обложка batch-поста отправляется в Telegram как отдельное photo message перед расписанием, а перенос GM-кнопок из основного сообщения в `/listsessions` использует существующие `batch_message_id`, `sessions`, `group_managers` и `session_participants`. +Версия `1.9.9` не добавляет новую миграцию: релиз добавляет функциональный smoke-тест Telegram-сценария и использует существующие `batch_message_id`, `sessions`, `group_managers` и `session_participants` без изменения схемы БД. ## Основные таблицы diff --git a/%D0%91%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82.md b/%D0%91%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82.md index a7597ca..ae09242 100644 --- a/%D0%91%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82.md +++ b/%D0%91%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82.md @@ -1,6 +1,6 @@ # Быстрый старт -Эта страница описывает минимальный запуск текущей версии GM-Relay **v1.9.6**. +Эта страница описывает минимальный запуск текущей версии GM-Relay **v1.9.9**. ## Требования @@ -42,8 +42,8 @@ docker compose up -d Compose поднимает: - `db`: PostgreSQL 17 Alpine, БД `gmrelay_db`, пользователь `gmrelay`. -- `bot`: образ `git.codeanddice.ru/toutsu/gmrelay-bot:1.9.6`. -- `web`: образ `git.codeanddice.ru/toutsu/gmrelay-web:1.9.6`. +- `bot`: образ `git.codeanddice.ru/toutsu/gmrelay-bot:1.9.9`. +- `web`: образ `git.codeanddice.ru/toutsu/gmrelay-web:1.9.9`. Web UI будет доступен на `http://localhost:8080`, если `GMRELAY_WEB_PORT` не переопределён. @@ -80,6 +80,6 @@ dotnet run --project src/GmRelay.AppHost - Web-панель должна перенаправлять неавторизованного пользователя на `/login`. - После входа через Telegram пользователь видит группы, где он назначен owner или co-GM. - `/miniapp` вне Telegram показывает диагностичный fallback на обычный вход, а внутри Telegram ждёт `initData`, отправляет его на `/auth/telegram-webapp` и открывает тот же dashboard в мобильной раскладке. Если нужен fallback `/login`, Telegram Login Widget работает через `data-onauth`: payload отправляется на `/auth/telegram-login`, cookie выставляется в текущем WebView, и страница сразу возвращается на `/`. -- Для v1.9.6 не нужны новые переменные окружения или действия в BotFather, если домен и menu button уже указывают на HTTPS URL `/miniapp` из `TELEGRAM_MINI_APP_URL`. +- Для v1.9.9 не нужны новые переменные окружения или действия в BotFather, если домен и menu button уже указывают на HTTPS URL `/miniapp` из `TELEGRAM_MINI_APP_URL`. - В левом меню есть вкладка `Шаблоны` для управления сохранёнными шаблонами кампаний. - На странице группы owner видит блок управления co-GM, а owner/co-GM применяют существующие шаблоны и видят batch-операции: общий title/link, режим уведомлений, перенос всей пачки и клонирование batch. diff --git a/%D0%A0%D0%B0%D0%B7%D0%B2%D1%91%D1%80%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.md b/%D0%A0%D0%B0%D0%B7%D0%B2%D1%91%D1%80%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.md index db3ffec..163a84c 100644 --- a/%D0%A0%D0%B0%D0%B7%D0%B2%D1%91%D1%80%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.md +++ b/%D0%A0%D0%B0%D0%B7%D0%B2%D1%91%D1%80%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5.md @@ -1,6 +1,6 @@ # Развёртывание -Текущий production-like способ запуска GM-Relay **v1.9.6** — Docker Compose из `compose.yaml`. +Текущий production-like способ запуска GM-Relay **v1.9.9** — Docker Compose из `compose.yaml`. ## Сервисы Docker Compose @@ -15,13 +15,13 @@ `bot`: -- образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.9.6`; +- образ: `git.codeanddice.ru/toutsu/gmrelay-bot:1.9.9`; - запускается после успешного healthcheck сервиса `db`; - переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__MiniAppUrl`. `web`: -- образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.9.6`; +- образ: `git.codeanddice.ru/toutsu/gmrelay-web:1.9.9`; - запускается после успешного healthcheck сервиса `db`; - переменные окружения: `ConnectionStrings__gmrelaydb`, `Telegram__BotToken`, `Telegram__BotUsername`, `Telegram__MiniAppUrl`; - порт: `${GMRELAY_WEB_PORT:-8080}:8080`; @@ -94,7 +94,7 @@ docker compose down -v ## Поведение миграций -Бот применяет DbUp-миграции при старте до обработки Telegram updates. Начиная с версии `1.8.0` доступна миграция `V010__add_campaign_templates.sql`: она создаёт таблицу `campaign_templates` для Web-шаблонов кампаний и быстрого создания повторяющихся batch-расписаний. Версия `1.9.6` не добавляет новую миграцию: обложки batch-постов отправляются как отдельные Telegram photo messages, а GM-кнопки перенесены из основного сообщения расписания в `/listsessions` без изменения схемы БД. После обновления стоит проверить логи `bot`, чтобы убедиться, что миграции применились без ошибок. +Бот применяет DbUp-миграции при старте до обработки Telegram updates. Начиная с версии `1.8.0` доступна миграция `V010__add_campaign_templates.sql`: она создаёт таблицу `campaign_templates` для Web-шаблонов кампаний и быстрого создания повторяющихся batch-расписаний. Версия `1.9.9` не добавляет новую миграцию: релиз добавляет функциональный smoke-тест Telegram-сценария, обновляет версии образов и не меняет схему БД. После обновления стоит проверить логи `bot`, чтобы убедиться, что миграции применились без ошибок. ## Безопасность @@ -114,3 +114,4 @@ docker compose down -v 7. Проверить `/miniapp` из Telegram: пользователь owner/co-GM должен попасть в мобильный dashboard без повторного открытия Mini App после входа; если сработал fallback `/login`, callback Telegram Login Widget должен сразу вернуть пользователя на `/` в текущем WebView. 8. На телефоне проверить, что верхняя навигация и карточки dashboard начинаются ниже системного статус-бара и панели Telegram; Mini App использует Telegram `safeAreaInset` / `contentSafeAreaInset` и browser `env(safe-area-inset-*)` fallback. 9. Проверить Telegram-группу: новый `/newsession` с фото или `Картинка:` публикует обложку перед расписанием, а основное сообщение содержит только кнопки записи и выхода; GM-действия доступны через `/listsessions`. +10. Для регрессионной проверки без внешнего Telegram API выполнить `dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage"`: начиная с v1.9.9 набор включает smoke обещаний лендинга для Telegram. diff --git a/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0.md b/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0.md index b34b2f6..9b52b2e 100644 --- a/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0.md +++ b/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0.md @@ -26,7 +26,7 @@ dotnet run --project src/GmRelay.AppHost `Directory.Build.props` задаёт: -- `Version`: `1.9.6`. +- `Version`: `1.9.9`. - `TargetFramework`: `net10.0`. - `LangVersion`: `preview`. - `Nullable`: `enable`. @@ -79,6 +79,7 @@ V006__add_example_column.sql - Telegram auth в web; - Telegram Mini App `initData` auth и entry points; - authorization для web-сессий и шаблонов кампаний. +- functional smoke обещаний лендинга для Telegram: batch-сессии, inline-кнопки, лимиты/waitlist, автоповышение, голосование за перенос и dashboard-sync через fake Telegram messenger без внешнего Telegram API. Новые тесты стоит класть рядом с feature area, например: @@ -105,3 +106,4 @@ Mini App изменения должны переиспользовать те - Не добавлять dynamic SQL-mapping без DTO: это ломает предсказуемость Dapper.AOT. - Любое изменение статусов должно быть согласовано с `SessionStatus`, миграциями и renderer/UI. - Если web меняет данные сессии, нужно учитывать синхронизацию Telegram-сообщения через `SessionBatchRenderer`. +- Начиная с v1.9.9, smoke `tests/GmRelay.Bot.Tests/Features/Landing/TelegramLandingPromisesSmokeTests.cs` должен оставаться быстрым и автономным: он не ходит во внешний Telegram API и проверяет пользовательский сценарий через доменные правила, renderer и fake messenger. diff --git a/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md b/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md index 44ab397..90bea0e 100644 --- a/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md +++ b/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE-%D0%93%D0%9C%D0%B0.md @@ -1,6 +1,6 @@ # Руководство ГМа -Руководство описывает пользовательские сценарии бота, Telegram Mini App и Web-панели для GM-Relay **v1.9.8**. +Руководство описывает пользовательские сценарии бота, Telegram Mini App и Web-панели для GM-Relay **v1.9.9**. ## Кто управляет группой @@ -185,6 +185,6 @@ Owner и co-GM могут открыть dashboard прямо внутри Teleg - через default menu button бота, если настроен `TELEGRAM_MINI_APP_URL`; - через кнопку `Открыть dashboard` в ответе на `/start`. -Mini App открывает `/miniapp`, ждёт `Telegram.WebApp.initData`, отправляет его на серверный endpoint `/auth/telegram-webapp` и проходит HMAC-проверку токеном бота. После проверки пользователь получает обычную cookie-сессию dashboard. Если нужен fallback-вход, `/login` использует callback Telegram Login Widget: подтверждение Telegram отправляется на `/auth/telegram-login`, cookie появляется в текущем Mini App WebView, и dashboard открывается без ручного закрытия и повторного запуска Mini App. Интерфейс v1.9.6 также учитывает safe-area телефона и Telegram, поэтому верхняя навигация не должна перекрываться статус-баром. +Mini App открывает `/miniapp`, ждёт `Telegram.WebApp.initData`, отправляет его на серверный endpoint `/auth/telegram-webapp` и проходит HMAC-проверку токеном бота. После проверки пользователь получает обычную cookie-сессию dashboard. Если нужен fallback-вход, `/login` использует callback Telegram Login Widget: подтверждение Telegram отправляется на `/auth/telegram-login`, cookie появляется в текущем Mini App WebView, и dashboard открывается без ручного закрытия и повторного запуска Mini App. Интерфейс v1.9.9 также учитывает safe-area телефона и Telegram, поэтому верхняя навигация не должна перекрываться статус-баром. Функционально Mini App использует те же страницы, что и Web Dashboard: список групп, карточки сессий, редактирование, очередь ожидания, применение шаблонов и bulk-операции batch. Доступ к чужим группам не появляется, потому что все операции продолжают проходить через `AuthorizedSessionService` и роль owner/co-GM. diff --git a/Home.md b/Home.md index 94a3a59..bf30e09 100644 --- a/Home.md +++ b/Home.md @@ -1,10 +1,10 @@ # Главная -GM-Relay — Telegram-бот, Telegram Mini App и Blazor-панель для организации TTRPG-сессий. Текущее состояние документации соответствует репозиторию `Toutsu/GmRelayBot` и релизу **v1.9.6**. +GM-Relay — Telegram-бот, Telegram Mini App и Blazor-панель для организации TTRPG-сессий. Текущее состояние документации соответствует репозиторию `Toutsu/GmRelayBot` и релизу **v1.9.9**. ## Текущий стек -- Версия проекта: `1.9.6`. +- Версия проекта: `1.9.9`. - Платформа: `.NET 10`, C# preview, nullable reference types, warnings as errors. - Оркестрация разработки: `.NET Aspire 13` через `src/GmRelay.AppHost`. - Runtime бота: `Worker Service`, Telegram long polling, Native AOT. @@ -36,6 +36,7 @@ GM-Relay — Telegram-бот, Telegram Mini App и Blazor-панель для о - Шаблоны кампаний в Web Dashboard: отдельная вкладка для управления сохранёнными параметрами кампаний и применение шаблонов на странице группы по первой дате. - Bulk-операции в Web Dashboard: общий `title/link` для batch, перенос всей пачки на фиксированный шаг и клонирование на следующую неделю или месяц с новым Telegram-сообщением. - Настройка режима уведомлений для batch: `В группе и в личку` или `Только в группе`, при этом групповые сообщения сохраняются всегда. +- Smoke-покрытие обещаний лендинга для Telegram: функциональный тест фиксирует batch-сессии, inline-кнопки, лимиты/waitlist, автоповышение, голосование за перенос и синхронизацию Telegram batch-поста после dashboard-изменений без внешнего Telegram API. - CSS-fix Web Dashboard: раскрывающиеся списки используют контрастный фон и текст в native select dropdown. - CSS-fix sidebar: пункты меню рендерятся отдельными строками с корректным отступом между `Панель управления` и `Шаблоны`. @@ -48,6 +49,10 @@ GM-Relay — Telegram-бот, Telegram Mini App и Blazor-панель для о - [Развёртывание](Развёртывание) — Docker Compose, окружение и эксплуатация. - [База данных](База-данных) — схема БД, миграции и статусная модель. +## v1.9.9 + +Patch-релиз закрывает issue **#18** из этапа «Версия 1.0 — Telegram Bot + Mini App Dashboard»: добавлен функциональный smoke-сценарий обещаний лендинга для Telegram. Тест проходит без внешнего Telegram API через fake Telegram messenger и фиксирует ключевой пользовательский путь: создание batch-сессий на несколько дат, кнопки записи/выхода, лимит мест и waitlist, автоповышение ожидающего игрока, голосование за перенос, direct-notification mode и обновление Telegram batch-сообщения после dashboard-изменений. Новых миграций и новых переменных окружения нет. + ## v1.9.6 Patch-релиз улучшает Telegram-посты записи: GM может добавить обложку к batch через прикреплённое фото или строку `Картинка:`, а публичное сообщение расписания больше не перегружено кнопками owner/co-GM. Управление отменой, переносом, повышением из листа ожидания и удалением перенесено в `/listsessions`; доступ по-прежнему проверяется через owner/co-GM. Новых миграций нет.