• v2.5.0 9ff5cc4a67

    Release v2.5.0 — Discord join/leave с лимитами и waitlist
    Deploy Telegram Bot / build-and-push (push) Successful in 4m54s
    Deploy Telegram Bot / scan-images (push) Successful in 1m22s
    Deploy Telegram Bot / deploy (push) Successful in 15s
    Stable

    Toutsu released this 2026-05-20 10:34:47 +03:00 | 244 commits to main since this release

    🛠 Minor 2.5.0 — Discord join/leave с лимитами и waitlist

    Релиз закрывает issue #29: Discord schedule messages теперь обрабатывают кнопки Join/Leave через общую platform-neutral бизнес-логику, включая лимит мест, waitlist, повторные клики и обновление расписания после изменения состава.

    Решённые issues

    • #29 — feat: подключить Discord join/leave с лимитами и waitlist

    🧩 Что вошло в релиз

    • src/GmRelay.DiscordBot/Features/Sessions/DiscordSessionInteractionModule.cs — обработка Discord component interactions join_session / leave_session с deferred ephemeral ответами.
    • src/GmRelay.DiscordBot/Features/Sessions/DiscordSessionInteractionMapper.cs — маппинг Discord interaction payload в platform-neutral команды.
    • src/GmRelay.Shared/Features/Sessions/CreateSession/JoinSessionHandler.cs и LeaveSessionHandler.cs — общие handlers для Telegram и Discord, с сохранением лимитов, waitlist и stale-session поведения.
    • src/GmRelay.Shared/Features/Sessions/CreateSession/ScheduleMessageUpdateLock.cs — сериализация обновлений одного schedule message при конкурентных кликах.
    • src/GmRelay.Shared/DapperAotModule.cs и GmRelay.Shared.csproj — Dapper.AOT включён в shared assembly, где теперь находятся Dapper call-sites для join/leave.
    • README.md и docs/c4-system-context.md — документация обновлена под Discord join/leave flow.
    • Тесты — добавлены проверки Discord interaction mapping/module, lock behavior, stale cancelled join guard и Dapper.AOT конфигурации Shared.
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml, README.md2.5.0.

    🛡 Что это даёт

    • Игроки могут записываться и выходить из Discord-сессий кнопками прямо в расписании.
    • При заполненном лимите Discord-пользователь попадает в waitlist, а при освобождении места первый ожидающий продвигается.
    • Telegram и Discord используют одну бизнес-логику join/leave, что снижает риск расхождения поведения.
    • Конкурентные клики по одной сессии не должны приводить к stale schedule edits.

    📦 Версия и деплой

    • версия обновлена до 2.5.0
    • Docker-образы используют тег 2.5.0
    • PR #86 — merged via fallback local merge commit 9ff5cc4a6763bae0e0aa6705f0ca8f5b288ac51f
    • Gitea Actions run #200 (PR checks) — success
    • Gitea Actions run #201 (deploy) — success
    Downloads
  • v2.4.0 90da33154c

    Release v2.4.0
    Deploy Telegram Bot / build-and-push (push) Successful in 4m19s
    Deploy Telegram Bot / scan-images (push) Successful in 1m17s
    Deploy Telegram Bot / deploy (push) Successful in 13s
    Stable

    Toutsu released this 2026-05-19 12:54:40 +03:00 | 247 commits to main since this release

    Discord /newsession and /listsessions. See PR #85.

    Downloads
  • v2.3.0 21760ae6f7

    Release v2.3.0 — DiscordSessionBatchRenderer для Embed и Buttons
    Deploy Telegram Bot / build-and-push (push) Successful in 4m7s
    Deploy Telegram Bot / scan-images (push) Successful in 1m13s
    Deploy Telegram Bot / deploy (push) Successful in 12s
    Stable

    Toutsu released this 2026-05-18 19:03:10 +03:00 | 256 commits to main since this release

    🛠 Версия 2.3.0 — Реализация DiscordSessionBatchRenderer

    Реализован рендерер расписания сессий для Discord (Embed + Buttons).

    🧩 Что вошло в релиз

    • src/GmRelay.DiscordBot/Rendering/DiscordSessionBatchRenderer.cs — рендерер Embed + Button на NetCord
    • tests/GmRelay.Bot.Tests/Rendering/DiscordSessionBatchRendererTests.cs — 7 тестов на key states
    • Удалён старый stub src/GmRelay.Shared/Rendering/DiscordSessionBatchRenderer.cs
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 2.3.0

    🗡 Что это даёт

    • Один и тот же SessionBatchViewModel можно отрисовать и в Telegram, и в Discord
    • Discord-бот получает rich embed с игрой, датой, игроками, заполненностью, листом ожидания и статусом
    • Кнопки actions мапятся в platform-neutral command payload ({actionKey}:{sessionId})

    📦 Версия и деплой

    • версия обновлена до 2.3.0
    • Docker-образы используют тег 2.3.0
    • Gitea Actions run #195 (PR checks) — success
    • Gitea Actions run #196 (deploy) — success
    Downloads
  • v2.2.0 745a65818d

    Release v2.2.0 — Discord Gateway worker
    Deploy Telegram Bot / build-and-push (push) Successful in 4m9s
    Deploy Telegram Bot / scan-images (push) Successful in 1m6s
    Deploy Telegram Bot / deploy (push) Successful in 12s
    Stable

    Toutsu released this 2026-05-18 16:19:45 +03:00 | 260 commits to main since this release

    🛠 Minor 2.2.0 — Discord Gateway worker

    Релиз закрывает issue #26: в solution добавлен отдельный Discord worker на NetCord Gateway. Telegram worker остается отдельным сервисом и не получает Discord-зависимости.

    Решённые issues

    • #26 — feat: добавить src/GmRelay.DiscordBot на NetCord Gateway

    🧩 Что вошло в релиз

    • src/GmRelay.DiscordBot — новый .NET worker с NetCord Gateway, slash-командой /ping, component interaction service registration и lifecycle logging.
    • DiscordOptions — явная startup-валидация Discord:Token / Discord__Token без записи значения токена в репозиторий.
    • compose.yaml — добавлен сервис discord с тем же PostgreSQL connection string и отдельным DISCORD_BOT_TOKEN.
    • src/GmRelay.AppHost — Discord worker подключен к Aspire orchestration и PostgreSQL resource.
    • .gitea/workflows — PR checks собирают Discord project; deploy собирает, пушит, сканирует и поднимает Docker-образ gmrelay-discord-bot.
    • README.md — обновлены версия, env-настройки и структура проекта.
    • Тесты — добавлен TDD-срез на project isolation, token validation, startup wiring, runtime wiring и version synchronization.
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml, README.md2.2.0.

    🛡 Что это даёт

    • Discord adapter можно развивать независимо от Telegram worker без отката Telegram-сервиса при изменениях Discord-интеграции.
    • Production path явно падает без Discord__Token, а секрет хранится в Gitea Actions secrets.
    • CI/CD теперь покрывает новый Discord Docker image теми же build/scan/deploy шагами.

    📦 Версия и деплой

    • версия обновлена до 2.2.0
    • Docker-образы используют тег 2.2.0
    • Gitea Actions run #193 (PR checks) — success
    • Gitea Actions run #194 (deploy) — success
    • PR #83 — merged via fallback local merge commit 745a65818d9886df11b01cfa23812fe7ba809547
    Downloads
  • v2.1.1 ab59d234f3

    Release v2.1.1 — platform-neutral join/leave
    Deploy Telegram Bot / build-and-push (push) Successful in 3m45s
    Deploy Telegram Bot / scan-images (push) Successful in 1m0s
    Deploy Telegram Bot / deploy (push) Successful in 11s
    Stable

    Toutsu released this 2026-05-18 13:46:24 +03:00 | 262 commits to main since this release

    🔧 Patch 2.1.1 — platform-neutral запись и выход

    Join/leave interactions больше не завязаны на Telegram-specific command model. Telegram callback-и остаются прежними, но router переводит их в platform-neutral PlatformUser, PlatformGroup и PlatformMessageRef, чтобы следующий Discord-срез мог переиспользовать ту же бизнес-логику.

    🧩 Что вошло в релиз

    • JoinSessionHandler — принимает platform-neutral identity, пишет игроков по (platform, external_user_id) и обновляет расписание через IPlatformMessenger.
    • LeaveSessionHandler — ищет участника по platform-neutral identity, сохраняя текущую семантику выхода, лимита мест и waitlist promotion.
    • UpdateRouter — адаптирует текущие Telegram callback data join_session / leave_session в neutral command model.
    • V017__allow_platform_neutral_players.sql — разрешает игроков без legacy telegram_id для non-Telegram платформ.
    • Тесты — добавлен TDD-срез на neutral command model, SQL-инварианты и миграцию V017.
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml2.1.1.

    🛡 Что это даёт

    • Discord-интеграция сможет использовать join/leave flow без Telegram types в handler-ах.
    • Telegram кнопки записи и выхода сохраняют прежние callback data и пользовательскую семантику.
    • Waitlist и лимит мест остаются защищены существующими правилами и новыми regression tests.

    📦 Версия и деплой

    • Версия обновлена до 2.1.1.
    • Docker-образы используют тег 2.1.1.
    • Gitea Actions run #191 (PR checks) — success.
    • Gitea Actions run #192 (deploy) — success.
    Downloads
  • v2.1.0 cb515b0e05

    Release v2.1.0 — Редизайн дашборда в стиле fantasy RPG
    Deploy Telegram Bot / build-and-push (push) Successful in 3m57s
    Deploy Telegram Bot / scan-images (push) Successful in 1m4s
    Deploy Telegram Bot / deploy (push) Successful in 11s
    Stable

    Toutsu released this 2026-05-18 11:35:35 +03:00 | 264 commits to main since this release

    🎨 Patch 2.1.0 — Редизайн дашборда в стиле fantasy RPG

    Полный редизайн панели управления GM-Relay с атмосферой тёмного fantasy.

    🧩 Что вошло в релиз

    • src/GmRelay.Web/wwwroot/app.css — полная переработка стилей: glass-morphism карточки, градиентные рамки, анимации, шрифты Cinzel + Jura
    • src/GmRelay.Web/Components/App.razor — обновлены Google Fonts (Cinzel Decorative, Cinzel, Jura)
    • src/GmRelay.Web/Components/Layout/NavMenu.razor.css — стили навигации под новый дизайн
    • src/GmRelay.Web/Components/Layout/MainLayout.razor.css — обновления макета
    • Удалена директория k8s/ — манифесты перенесены в репозиторий Toutsu/gmrelay-k8s
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 2.1.0

    🗡 Что это даёт

    • Дашборд выглядит как полноценное RPG-приложение, а не generic Bootstrap
    • Улучшена читаемость и визуальная иерархия
    • Единый стиль для всех компонентов

    📦 Версия и деплой

    • версия обновлена до 2.1.0
    • Docker-образы используют тег 2.1.0
    • Gitea Actions run #189 (PR checks) — success
    • Gitea Actions run #190 (deploy) — success
    Downloads
  • v2.0.1 df01aa9f3e

    Release v2.0.1 — Platform messenger contracts
    Deploy Telegram Bot / build-and-push (push) Successful in 6m52s
    Deploy Telegram Bot / scan-images (push) Successful in 3m37s
    Deploy Telegram Bot / deploy (push) Successful in 19s
    Stable

    Toutsu released this 2026-05-15 19:00:03 +03:00 | 268 commits to main since this release

    🔧 Patch 2.0.1 — Platform messenger contracts

    Релиз закрывает issue #24: в shared-слое появились платформенно-нейтральные контракты для пользователей, групп и отправки сообщений, а Telegram-поток переведён на adapter без изменения поведения.

    Решённые issues

    • #24 — refactor: ввести PlatformKind, PlatformUser, PlatformGroup и IPlatformMessenger

    🧩 Что вошло в релиз

    • src/GmRelay.Shared/Platform — добавлены PlatformKind, PlatformUser, PlatformGroup, PlatformMessageRef, PlatformScheduleMessage, PlatformPrivateMessage, PlatformInteractionReply, PlatformCalendarFile и IPlatformMessenger.
    • src/GmRelay.Bot/Infrastructure/Telegram/TelegramPlatformMessenger.cs — Telegram adapter для schedule create/update, group/private messages, callback answers и calendar files.
    • src/GmRelay.Bot/Infrastructure/Telegram/TelegramPlatformIds.cs — конвертация Telegram chat/user/message identifiers в neutral platform records.
    • Session flows Join/Leave/Cancel/Promote/Reschedule/Calendar — outbound Telegram work переведён на IPlatformMessenger там, где это покрывает новый контракт.
    • TelegramPlatformMessenger.UpdateScheduleAsync — добавлена валидация platform и group/thread identity для existing message reference перед редактированием.
    • tests/GmRelay.Bot.Tests/Platform/PlatformContractsTests.cs, TelegramPlatformMessengerSourceTests.cs, TelegramPlatformMessengerTests.cs — TDD coverage для neutral contracts, adapter wiring и schedule-update target validation.
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, .gitea/workflows/deploy.yml, README.md2.0.1.

    🗡 Что это даёт

    • DiscordBot и будущие adapters могут ссылаться на shared messaging contract без зависимости от Telegram assemblies.
    • Telegram-specific отправка и редактирование расписаний сконцентрированы в одном adapter-е.
    • Существующее Telegram-поведение сохранено: HTML parse mode, callback answers, forum topic/thread routing, batch schedule edits, private notifications и calendar export.
    • Контракт обновления расписания защищён от случайного редактирования не того chat/thread/message.

    📦 Версия и деплой

    • версия обновлена до 2.0.1
    • Docker-образы используют тег 2.0.1
    • Gitea Actions run #186 (PR #80 checks) — success
    • Gitea Actions run #187 (deploy main) — success
    • Merge commit: df01aa9f3e5f6dd17a5232e78d1d74183e53e10e
    Downloads
  • v2.0.0 7cecb722d8

    Release v2.0.0 — Platform identity и health checks для production
    Deploy Telegram Bot / build-and-push (push) Successful in 7m11s
    Deploy Telegram Bot / scan-images (push) Successful in 2m41s
    Deploy Telegram Bot / deploy (push) Successful in 17s
    PR Checks / test-and-build (pull_request) Successful in 11m17s
    Stable

    Toutsu released this 2026-05-15 11:56:53 +03:00 | 272 commits to main since this release

    🚀 Major 2.0.0 — Platform identity и health checks для production

    Релиз закрепляет подготовку GM Relay к мультиплатформенной архитектуре и production-мониторингу. Версия 2.0.0 взята из PR #79; health check изменения из PR #63 включены в тот же итоговый merge-коммит 7cecb72, поэтому отдельный релиз 1.16.0 не выпускается.

    Решённые issues

    • #23 — chore: добавить platform identity и platform_messages в БД
    • #58 — infra: добавить health check endpoints в Bot и Web

    🧩 Что вошло в релиз

    • src/GmRelay.Bot/Migrations/V016__add_platform_identity.sql — добавлены platform, external_user_id, external_username для players, platform identity поля для game_groups, новая таблица platform_messages и backfill существующих Telegram-данных.
    • src/GmRelay.Bot/Migrations/V012__add_attendance_stats.sql и src/GmRelay.Web/Services/SessionService.cs — attendance stats используют COALESCE(external_username, telegram_username).
    • CreateSessionHandler и JoinSessionHandler — запись новых platform identity полей без удаления legacy telegram_* данных.
    • src/GmRelay.Web/Program.cs и src/GmRelay.Web/Health/NpgsqlHealthCheck.cs — endpoints /health и /alive, readiness-проверка PostgreSQL через SELECT 1.
    • src/GmRelay.Bot/Infrastructure/Health/BotHealthCheckHostedService.cs — lightweight HTTP health endpoint для Bot на порту 8081.
    • compose.yaml, Dockerfiles Bot/Web — healthcheck секции, EXPOSE 8081, runtime-зависимости для container health checks.
    • tests/GmRelay.Bot.Tests/Database/PlatformIdentityMigrationTests.cs, tests/GmRelay.Bot.Tests/Web/WebHealthEndpointTests.cs, tests/GmRelay.Bot.Tests/Infrastructure/Health/BotHealthCheckHostedServiceTests.cs — smoke/regression tests для миграции и health endpoints.
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, .gitea/workflows/deploy.yml2.0.0.

    🗡 Что это даёт

    • Схема БД готова к Discord adapter-у и другим платформам без перегруза legacy Telegram-полей.
    • Существующие Telegram-сценарии сохраняют обратную совместимость через backfill и dual-write.
    • Web и Bot теперь имеют health endpoints для Docker Compose, внешнего мониторинга и автоматической диагностики.
    • Docker Compose может показывать состояние healthy для обоих сервисов и быстрее обнаруживать деградацию БД/Web/Bot.

    📦 Версия и деплой

    • версия обновлена до 2.0.0
    • Docker-образы используют тег 2.0.0
    • Gitea Actions run #181 (PR #79 checks) — success
    • Gitea Actions run #183 (PR #63 checks after version reconciliation) — success
    • Gitea Actions run #182 (deploy main) — success
    Downloads
  • Release v1.15.1 — Добавление MIT LICENSE
    Deploy Telegram Bot / build-and-push (push) Successful in 3m57s
    Deploy Telegram Bot / scan-images (push) Successful in 2m4s
    Deploy Telegram Bot / deploy (push) Successful in 12s
    Stable

    Toutsu released this 2026-05-12 17:08:37 +03:00 | 277 commits to main since this release

    🔧 Patch 1.15.1 — Добавление MIT LICENSE

    В репозиторий добавлен файл LICENSE с текстом MIT License. README.md уже содержал ссылку ./LICENSE, но сам файл отсутствовал, что создавало юридическую неопределённость.

    🧩 Что вошло в релиз

    • LICENSE — добавлен MIT License, Copyright (c) 2026 Toutsu
    • tests/GmRelay.Bot.Tests/Project/LicenseFileTests.cs — TDD-тесты на существование и содержимое LICENSE
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 1.15.1

    🗡 Что это даёт

    • Код получил явную MIT-лицензию — можно безопасно форкать и использовать в коммерческих целях
    • Gitea UI корректно отображает лицензию в sidebar репозитория

    📦 Версия и деплой

    • версия обновлена до 1.15.1
    • Docker-образы используют тег 1.15.1
    • Gitea Actions run #175 (PR checks) — success
    • Gitea Actions run #176 (deploy) — success
    Downloads
  • Release v1.15.0 — PostgreSQL Backup и восстановление
    Deploy Telegram Bot / build-and-push (push) Successful in 3m58s
    Deploy Telegram Bot / scan-images (push) Successful in 1m44s
    Deploy Telegram Bot / deploy (push) Successful in 14s
    Stable

    Toutsu released this 2026-05-12 14:24:28 +03:00 | 280 commits to main since this release

    🛠 Minor 1.15.0 — PostgreSQL Backup и восстановление

    Этот minor-релиз закрывает критический блокер issue #57: добавлена автоматическая стратегия резервного копирования PostgreSQL.

    Решённые issues

    • #57 — infra: ежедневный backup PostgreSQL через pg_dump в отдельный volume

    🧩 Что вошло в релиз

    • compose.yaml — добавлен сервис db-backup (postgres:17-alpine) с cron-задачей pg_dump в 03:00, volume pgbackups для хранения дампов, ротация по BACKUP_RETENTION_DAYS.
    • .env.example — добавлены BACKUP_RETENTION_DAYS (default: 7) и BACKUP_VOLUME_NAME.
    • scripts/restore.sh — bash-скрипт для восстановления из последнего (или указанного) дампа с подтверждением перезаписи БД и передачей PGPASSWORD.
    • README.md — раздел «💾 Backup и восстановление» с инструкциями по проверке, ручному дампу и восстановлению.
    • Синхронизированы версии: Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml → 1.15.0

    🗡 Что это даёт

    • Защита от потери данных: ежедневные сжатые дампы БД автоматически создаются и хранятся 7 дней.
    • Простое восстановление: ./scripts/restore.sh находит и разворачивает последний бэкап с подтверждением.
    • Ротация без ручного управления: старые дампы удаляются автоматически по mtime.
    • Volume pgbackups не удаляется при docker compose down — данные сохраняются независимо от контейнеров.

    📦 Версия и деплой

    • версия обновлена до 1.15.0
    • Docker-образы используют тег 1.15.0
    • Gitea Actions run #172 (PR checks) — success
    • Gitea Actions run #173 (deploy) — success
    Downloads