• v1.7.0 a1ec688ec8

    Release 1.7.0: голосование за перенос сессии
    Deploy Telegram Bot / build-and-push (push) Successful in 3m44s
    Deploy Telegram Bot / deploy (push) Successful in 11s
    Stable

    Toutsu released this 2026-04-27 15:03:38 +03:00 | 0 commits to main since this release

    🚀 Этап 4 — Расширение командных сценариев

    Этот релиз закрывает следующую задачу этапа «Этап 4 — Расширение командных сценариев»: перенос сессии теперь работает как небольшое голосование по нескольким вариантам времени. GM больше не обязан угадывать единственный удобный слот — группа выбирает лучший вариант до заданного дедлайна.

    Закрытые issues

    • #11 — feat: улучшить перенос сессии до голосования по нескольким вариантам времени: owner/co-GM предлагает 2-3 новых времени и дедлайн, участники голосуют кнопками в Telegram, сообщение показывает текущие результаты, а по дедлайну бот применяет победивший вариант или отклоняет перенос при ничьей/нуле голосов.

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

    • сценарий ⏰ Перенести теперь просит 2-3 варианта времени и строку Дедлайн: ДД.ММ.ГГГГ ЧЧ:ММ;
    • добавлен парсер RescheduleVotingInput, который проверяет количество вариантов, повторы, будущие даты и дедлайн раньше первого предложенного времени;
    • голосование создаёт отдельную кнопку для каждого варианта и использует callback reschedule_vote:<optionId>;
    • Telegram-сообщение голосования показывает дедлайн, варианты, счёт по каждому слоту, проголосовавших игроков и список тех, кто ещё не выбрал время;
    • игрок может изменить голос до дедлайна: повторное нажатие обновляет его выбор вместо создания второго голоса;
    • добавлен RescheduleVotingDeadlineService, который раз в минуту финализирует просроченные голосования;
    • правило выбора зафиксировано явно: побеждает вариант с наибольшим числом голосов, а ничья или отсутствие голосов отклоняют перенос;
    • при успешном переносе бот обновляет scheduled_at, сбрасывает RSVP активных участников в Pending, очищает старые confirmation/link сообщения и перерисовывает batch-сообщение;
    • DM-режим batch теперь отправляет игрокам личные уведомления о старте голосования и об итоговом результате переноса;
    • база данных расширена миграцией V009__add_multi_option_reschedule_votes.sql: добавлены voting_deadline_at, selected_option_id, reschedule_options и reschedule_option_votes;
    • README и wiki обновлены под 1.7.0 и новый сценарий multi-slot переноса.

    🛡 Что это даёт

    • перенос стал удобнее для живых групп: GM предлагает несколько реалистичных слотов, а не один компромиссный вариант;
    • участники видят текущую картину голосования прямо в Telegram и могут поменять решение до дедлайна;
    • дедлайн убирает вечные подвисшие переносы: бот сам применяет победителя или оставляет старое время при спорном результате;
    • Web и Telegram сохраняют общий источник правды в БД, а расписание в Telegram остаётся актуальным после финализации;
    • существующие одиночные таблицы переноса не ломаются, а новые голосования используют отдельную multi-option модель.

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

    • версия проекта обновлена до 1.7.0 в Directory.Build.props, compose.yaml, README, Web design system, wiki и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация используют тег 1.7.0;
    • локально пройдены dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage" и dotnet build GM-Relay.slnx -c Release;
    • Gitea Actions run #44 успешно собрал, опубликовал и задеплоил bot/web образы.
    Downloads
  • v1.6.0 2529df4157

    Release 1.6.0: co-GM и делегирование управления
    Deploy Telegram Bot / build-and-push (push) Successful in 3m51s
    Deploy Telegram Bot / deploy (push) Successful in 11s
    Stable

    Toutsu released this 2026-04-27 14:34:18 +03:00 | 1 commits to main since this release

    🚀 Этап 4 — Расширение командных сценариев

    Этот релиз закрывает первую задачу этапа «Этап 4 — Расширение командных сценариев»: управлять группой теперь может не только один GM, но и назначенные помощники. Модель доступа разделена на owner/co-GM, а сценарии управления расписанием доступны в Telegram и Web Dashboard.

    Закрытые issues

    • #9 — feat: поддержать co-GM и делегирование управления группой: добавлена роль Owner для владельца группы и CoGm для помощников; owner назначает co-GM в Web, а co-GM может управлять сессиями и batch-сценариями.

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

    • добавлена доменная модель GroupManagerRole с ролями Owner и CoGm;
    • база данных расширена миграцией V008__add_group_managers.sql: появилась таблица group_managers, а существующие gm_telegram_id мигрируют в owner-записи;
    • /newsession теперь создаёт owner при первой регистрации группы и запрещает создание сессий посторонним пользователям в уже известной группе;
    • Telegram-кнопки отмены, удаления, переноса и повышения из листа ожидания проверяют доступ через group_managers, поэтому owner и co-GM получают одинаковые права управления расписанием;
    • /listsessions показывает кнопки удаления для owner/co-GM, а обычные игроки видят только список игр;
    • Web Dashboard показывает роль пользователя на главной странице и блок управления группой на странице группы;
    • owner может добавить co-GM по Telegram ID, имени и username, а также убрать co-GM без удаления игрока из базы;
    • AuthorizedSessionService переведён с проверки одного gm_telegram_id на проверку manager-роли группы;
    • README и wiki обновлены под 1.6.0 и новый сценарий делегирования.

    🛡 Что это даёт

    • кампанией можно управлять совместно: помощник GM может редактировать сессии, переносить игры, удалять устаревшие даты и работать с листом ожидания;
    • owner сохраняет контроль над делегированием и остаётся единственной ролью, которая назначает или снимает co-GM;
    • Telegram и Web используют одну модель доступа, поэтому права не расходятся между интерфейсами;
    • существующие группы обновляются миграцией без ручного вмешательства.

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

    • версия проекта обновлена до 1.6.0 в Directory.Build.props, compose.yaml, README, Web design system, wiki и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация используют тег 1.6.0;
    • локально пройдены dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage" и dotnet build GM-Relay.slnx -c Release;
    • Gitea Actions run #43 успешно собрал, опубликовал и задеплоил bot/web образы.
    Downloads
  • v1.5.0 a8f2b10956

    Release 1.5.0: персональные уведомления игрокам
    Deploy Telegram Bot / build-and-push (push) Successful in 3m36s
    Deploy Telegram Bot / deploy (push) Successful in 11s
    Stable

    Toutsu released this 2026-04-27 10:12:17 +03:00 | 2 commits to main since this release

    🚀 Этап 3 — Базовый продуктовый рост

    Этот релиз закрывает ещё одну продуктовую задачу этапа «Этап 3 — Базовый продуктовый рост»: важные сообщения теперь доходят не только через групповой чат, но и лично игрокам. При этом групповые уведомления сохранены как основной публичный источник состояния, а GM может управлять DM-дублированием на уровне batch.

    Закрытые issues

    • #12 — feat: отправлять персональные уведомления игрокам в личные сообщения: добавлены DM-уведомления для RSVP за 24 часа, напоминания примерно за 1 час, ссылки перед стартом, отмены и переноса сессии; для batch доступен выбор режима В группе и в личку или Только в группе.

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

    • добавлена доменная модель SessionNotificationMode с режимами GroupAndDirect и GroupOnly;
    • база данных расширена миграцией V007__add_session_notification_mode.sql: у сессий появился notification_mode, а T-1h reminder получил защиту от повторной обработки через one_hour_reminder_processed_at;
    • SessionSchedulerService теперь обрабатывает отдельный T-1h trigger для персональных напоминаний;
    • RSVP за 24 часа по-прежнему публикуется в группе, но при GroupAndDirect игроки получают личный DM с напоминанием подтвердиться в групповом сообщении;
    • ссылка перед игрой остаётся в группе и дополнительно отправляется подтверждённым игрокам в ЛС;
    • отмена и перенос сессии отправляют персональные уведомления активным игрокам, не ломая групповые сообщения и перерисовку batch;
    • добавлен graceful fallback: если Telegram не позволяет написать конкретному игроку в ЛС, ошибка логируется, а отправка остальным участникам продолжается;
    • Web Dashboard получил dropdown режима уведомлений в batch bulk-блоке;
    • clone batch наследует режим уведомлений исходной пачки;
    • README и wiki обновлены под 1.5.0 и новый сценарий личных уведомлений.

    🛡 Что это даёт

    • игроки меньше зависят от видимости группового чата и получают критичные изменения прямо в личку;
    • GM сохраняет публичную историю в группе и может отключить DM для конкретной пачки, если они не нужны;
    • переносы, отмены и предыгровые напоминания становятся заметнее без ручной рассылки;
    • отказ Telegram DM одному игроку не блокирует уведомления всей группе или остальным участникам.

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

    • версия проекта обновлена до 1.5.0 в Directory.Build.props, compose.yaml, README, Web design system, wiki и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация используют тег 1.5.0;
    • локально пройдены dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage" и dotnet build GM-Relay.slnx -c Release;
    • Gitea Actions run #42 успешно собрал, опубликовал и задеплоил bot/web образы.
    Downloads
  • v1.4.1 3228e77c7f

    Release 1.4.1: читаемые dropdown-списки в Web
    Deploy Telegram Bot / build-and-push (push) Successful in 3m29s
    Deploy Telegram Bot / deploy (push) Successful in 10s
    Stable

    Toutsu released this 2026-04-27 09:51:05 +03:00 | 3 commits to main since this release

    🛠 Web UI hotfix

    Этот релиз закрывает точечную проблему читаемости в Web Dashboard: native dropdown у bulk-операций batch-сессий больше не открывается белым списком с почти белым текстом. Варианты вроде «Следующая неделя» и «Следующий месяц» теперь используют контрастный фон и текст, согласованные с тёмной темой GM-Relay.

    Решённые issues

    • Отдельного Gitea issue для этого hotfix не было. Решён пользовательский дефект из Web Dashboard: нечитаемый шрифт в раскрытом списке выбора периода клонирования batch-сессии.

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

    • добавлено явное CSS-оформление select option через var(--bg-secondary) и var(--text-primary);
    • сохранена совместимость с текущим тёмным dashboard theme без изменения разметки и логики bulk-операций;
    • добавлен регрессионный тест WebStylesTests, который проверяет наличие контрастных стилей для native select options;
    • README, wiki, Docker Compose, Web design system и Gitea Actions workflow обновлены под 1.4.1.

    🛡 Что это даёт

    • GM может уверенно выбирать клонирование batch на следующую неделю или месяц без визуального сбоя;
    • dropdown остаётся читаемым в тёмной теме на системном native popup;
    • будущие правки CSS не смогут незаметно убрать этот стиль без падения теста.

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

    • версия проекта обновлена до 1.4.1 в Directory.Build.props, compose.yaml, README, Web UI, wiki и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация используют тег 1.4.1;
    • локально пройдены dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage" и dotnet build GM-Relay.slnx -c Release;
    • Gitea Actions run #41 успешно собрал, опубликовал и задеплоил bot/web образы.
    Downloads
  • v1.4.0 621ef553e7

    Release 1.4.0: bulk-операции batch-сессий в Web
    Deploy Telegram Bot / build-and-push (push) Successful in 3m21s
    Deploy Telegram Bot / deploy (push) Successful in 11s
    Stable

    Toutsu released this 2026-04-27 09:37:40 +03:00 | 4 commits to main since this release

    🚀 Этап 3 — Базовый продуктовый рост

    Этот релиз закрывает ещё одну продуктовую задачу этапа «Этап 3 — Базовый продуктовый рост»: Web Dashboard теперь умеет работать не только с отдельными сессиями, но и со всей пачкой игр. GM может быстро поддерживать campaign-style расписание без ручного редактирования каждой даты.

    Закрытые issues

    • #10 — feat: добавить bulk-операции для batch-сессий в Web: добавлены общий title/link для batch, массовый перенос пачки на фиксированный интервал, клонирование на следующую неделю или месяц и понятный UI на странице группы.

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

    • на странице группы появился отдельный блок batch-операций для каждой видимой пачки сессий;
    • общий title и join_link теперь можно обновить сразу для всех сессий одного batch_id;
    • массовый перенос пересчитывает даты пачки от новой первой даты с фиксированным шагом в днях;
    • clone создаёт новый batch_id, новые строки sessions, новое Telegram batch-сообщение и пустой состав игроков;
    • Web после bulk-операций перечитывает список сессий, чтобы таблица и мобильные карточки оставались синхронны;
    • исходное Telegram-сообщение расписания перерисовывается после обновления title/link и переноса;
    • добавлен BatchSchedulePlanner с unit-тестами для fixed-interval расписания и календарных clone-смещений;
    • AuthorizedSessionService получил проверки доступа на уровне batch, чтобы GM не мог менять чужие пачки по прямому GUID;
    • README, wiki, Docker Compose, Web design system и Gitea Actions workflow обновлены под 1.4.0.

    🛡 Что это даёт

    • GM может переименовать кампанию или заменить ссылку на созвон один раз для всей пачки;
    • недельные и месячные кампании можно переносить без однотипного редактирования каждой сессии;
    • повторяющееся расписание можно быстро склонировать на следующую неделю или месяц;
    • новая пачка после клонирования стартует без старых записей игроков, поэтому состав набирается заново;
    • Telegram-сообщение расписания остаётся актуальным источником правды после Web-операций.

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

    • версия проекта обновлена до 1.4.0 в Directory.Build.props, compose.yaml, README, Web UI, wiki и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация используют тег 1.4.0;
    • локально пройдены dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage" и dotnet build GM-Relay.slnx -c Release;
    • Gitea Actions run #40 успешно собрал, опубликовал и задеплоил bot/web образы.
    Downloads
  • v1.3.0 5f3516e703

    Release 1.3.0: самостоятельная отмена записи игроком
    Deploy Telegram Bot / build-and-push (push) Successful in 1m7s
    Deploy Telegram Bot / deploy (push) Successful in 13s
    Stable

    Toutsu released this 2026-04-27 09:03:35 +03:00 | 5 commits to main since this release

    🚀 Этап 3 — Базовый продуктовый рост

    Этот релиз продолжает этап «Этап 3 — Базовый продуктовый рост»: игроки теперь могут самостоятельно снять запись с сессии прямо из Telegram-сообщения расписания. Бот корректно убирает игрока из основного состава или листа ожидания, обновляет batch-сообщение и автоматически отдаёт освободившееся место первому ожидающему.

    Закрытые issues

    • #8 — feat: позволить игроку самостоятельно отменять запись на сессию: добавлена кнопка выхода из сессии, удаление записи игрока, обновление состава/очереди и автоматическое повышение из waitlist при освобождении места.

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

    • у каждой активной сессии появилась кнопка 🚪 Выйти, доступная игрокам в исходном сообщении расписания;
    • добавлен LeaveSessionHandler, который проверяет запись игрока по Telegram ID и удаляет его из session_participants;
    • если активный игрок освобождает место и в листе ожидания есть участники, бот автоматически переводит первого ожидающего в основной состав;
    • batch-сообщение перерисовывается после выхода, чтобы основной состав, занятые места и очередь оставались актуальными;
    • callback-routing получил leave_session:<sessionId>, а DI-регистрация обновлена для Native AOT-friendly маршрутизации;
    • добавлены тесты для кнопки выхода в SessionBatchRenderer и правила автоповышения после выхода участника;
    • README, Web-версия, Docker Compose, deploy workflow и wiki обновлены под 1.3.0;
    • Gitea Actions workflow адаптирован под registry после обновления Gitea 1.26: публикация образов выполняется через обычные docker build / docker push шаги.

    🛡 Что это даёт

    • игрок может освободить место без участия GM;
    • GM больше не нужно вручную чистить основной состав или очередь при отказах до игры;
    • waitlist становится живой очередью: освободившееся место сразу получает первый ожидающий;
    • Telegram-сообщение расписания остаётся единым источником актуального состава.

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

    • версия проекта обновлена до 1.3.0 в Directory.Build.props, compose.yaml, README, Web UI, wiki и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация используют тег 1.3.0;
    • локально пройдены dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage" и dotnet build GM-Relay.slnx -c Release;
    • Gitea Actions run #39 успешно собрал, опубликовал и задеплоил bot/web образы.
    Downloads
  • v1.2.0 9c91057798

    Release 1.2.0: лимит мест и лист ожидания
    Deploy Telegram Bot / build-and-push (push) Failing after 4m42s
    Deploy Telegram Bot / deploy (push) Has been skipped
    Stable

    Toutsu released this 2026-04-24 13:37:25 +03:00 | 10 commits to main since this release

    🚀 Этап 3 — Базовый продуктовый рост

    Этот релиз закрывает продуктовую задачу этапа «Этап 3 — Базовый продуктовый рост»: сессии теперь могут иметь лимит мест, а игроки сверх лимита попадают в лист ожидания вместо обычной записи. ГМ видит заполненность, очередь ожидания и может повышать игроков в основной состав из Telegram или Web.

    Закрытые issues

    • #7 — feat: добавить лимит мест в сессии и лист ожидания: добавлены лимит мест, лист ожидания, продвижение игроков ГМом и отображение мест/очереди в Telegram и Web.

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

    • /newsession получил опциональное поле Мест: / Лимит: / Максимум: для задания вместимости сессии;
    • база данных расширена миграцией V006__add_session_capacity_waitlist.sql: у сессий появился max_players, у участников — статус регистрации и порядок попадания в очередь;
    • запись через Telegram теперь добавляет игрока в основной состав при наличии мест или в лист ожидания при полном составе;
    • карточки сессий показывают заполненность, основной состав и лист ожидания отдельными блоками;
    • ГМ может повысить первого ожидающего игрока кнопкой в Telegram или через Web-интерфейс группы;
    • RSVP-ответы, переносы и напоминания работают только с активными участниками, не трогая лист ожидания до повышения;
    • Web теперь показывает занятые места, очередь ожидания, позволяет менять лимит мест и повышать игроков из ожидания;
    • README и wiki обновлены под версию 1.2.0 и новый сценарий работы с лимитом мест;
    • зависимости OpenTelemetry обновлены до безопасных patch-версий, чтобы сборка с warnings-as-errors не падала на NU1902.

    🛡 Что это даёт

    • ГМ может заранее ограничить размер партии без ручной модерации записей;
    • игроки не теряются при переполненной сессии и сохраняют понятную очередь ожидания;
    • основной состав, свободные места и ожидание видны в одном сообщении;
    • игроки из листа ожидания не получают RSVP и ссылки на созвон до фактического повышения;
    • Web и Telegram теперь отражают одинаковую модель регистрации.

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

    • версия проекта обновлена до 1.2.0 в Directory.Build.props, compose.yaml, README, wiki и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация теперь используют тег 1.2.0;
    • локально пройдены dotnet test tests/GmRelay.Bot.Tests/GmRelay.Bot.Tests.csproj --collect:"XPlat Code Coverage" и dotnet build GM-Relay.slnx -c Release;
    • Gitea Actions run #34 успешно собрал, опубликовал и задеплоил образы после повторного запуска workflow.
    Downloads
  • v1.1.5 675ac1226e

    Release 1.1.5: переносимый Docker Compose запуск
    Deploy Telegram Bot / build-and-push (push) Successful in 40s
    Deploy Telegram Bot / deploy (push) Successful in 17s
    Stable

    Toutsu released this 2026-04-24 10:48:08 +03:00 | 11 commits to main since this release

    🧰 Dev/Runtime контур

    Этот релиз закрывает задачу этапа «Этап 2 — Dev/Runtime контур»: Docker Compose теперь запускает PostgreSQL, bot и Web через обычную bridge-сеть без host networking и без заранее созданного external volume. Локальный старт стал переносимым для Windows, macOS и Linux.

    Закрытые issues

    • #6 — chore: сделать compose-конфигурацию переносимой для локального запуска: убран network_mode: host, сервисы переведены на обращение к PostgreSQL по db:5432, volume БД создаётся compose-файлом, README обновлён под docker compose up -d.

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

    • bot и web подключены к обычной Docker bridge-сети gmrelay и используют service name db в connection string;
    • Web публикует порт через GMRELAY_WEB_PORT со значением 8080 по умолчанию;
    • PostgreSQL и Data Protection volumes стали обычными named volumes, создаваемыми при первом запуске compose;
    • обязательные переменные окружения теперь валидируются compose-файлом до старта контейнеров;
    • README и .env.example обновлены под новый переносимый сценарий локального запуска.

    🛡 Что это даёт

    • docker compose up -d больше не требует ручного создания game_pgdata;
    • локальный запуск не зависит от Linux-only network_mode: host;
    • bot/web используют одинаковый Docker service discovery на Linux, Windows и macOS;
    • существующий volume game_pgdata сохраняет совместимость, но больше не обязан быть external.

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

    • версия проекта обновлена до 1.1.5 в Directory.Build.props, compose.yaml и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация теперь используют тег 1.1.5;
    • Gitea Actions run #32 успешно собрал, опубликовал и задеплоил образы.
    Downloads
  • v1.1.4 b80002aa36

    Release 1.1.4: единая модель статусов сессий
    Deploy Telegram Bot / build-and-push (push) Successful in 4m47s
    Deploy Telegram Bot / deploy (push) Successful in 19s
    Stable

    Toutsu released this 2026-04-24 10:27:24 +03:00 | 12 commits to main since this release

    🧪 Стабилизация платформы

    Этот релиз закрывает ещё один пункт этапа «Стабилизация платформы»: статусы игровых сессий приведены к единой модели без устаревших значений. Теперь bot, Shared-рендеринг, Web UI и SQL-код опираются на один согласованный набор Planned / ConfirmationSent / Confirmed / Cancelled.

    Закрытые issues

    • #5 — refactor: привести статусы сессий к единой модели без устаревших значений: удалены legacy-ветки Recruiting / RecruitmentClosed, добавлен общий источник истины для допустимых session-status значений, а использование статусов в bot/web/shared приведено к SessionStatus.

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

    • SessionStatus расширен до общего источника истины: добавлен canonical-набор All и helper для проверки отменённых сессий;
    • SessionBatchRenderer больше не содержит отдельную ветку RecruitmentClosed и использует SessionStatus.Cancelled для закрытия кнопок отменённых сессий;
    • Web-страница группы убрана от legacy-переводов Recruiting / RecruitmentClosed, а Planned получил явное отображение и стиль;
    • session-status SQL в bot-коде переведён с строковых литералов на параметры из SessionStatus для создания, отмены, списков, календаря и reschedule-потоков;
    • добавлены регрессионные тесты, которые фиксируют canonical-набор статусов и запрещают возврат legacy-значений в production-исходники.

    🛡 Что это даёт

    • UI и Telegram-рендеринг больше не расходятся в понимании жизненного цикла сессии;
    • новые изменения сложнее случайно привязать к старым статусам, потому что тесты ловят такие регрессии;
    • SQL-запросы, бизнес-логика и Web теперь используют одну доменную модель статусов.

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

    • версия проекта обновлена до 1.1.4 в Directory.Build.props, compose.yaml и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация теперь используют тег 1.1.4.
    Downloads
  • v1.1.3 bb8cbb7a40

    Release 1.1.3: Стабилизация платформы и тестовое покрытие
    Deploy Telegram Bot / build-and-push (push) Successful in 4m18s
    Deploy Telegram Bot / deploy (push) Successful in 20s
    Stable

    Toutsu released this 2026-04-23 21:09:19 +03:00 | 13 commits to main since this release

    🧪 Стабилизация платформы

    Этот релиз продолжает этап «Стабилизация платформы» и закрывает задачу по тестовому покрытию ключевых сценариев бота и Web. Тестовый проект перестал быть заглушкой и теперь проверяет критичную бизнес-логику, на которой держатся расписания, RSVP и доступ в веб-интерфейсе.

    Закрытые issues

    • #4 — Test Coverage: пустой smoke test заменён на осмысленный набор unit-тестов для парсинга /newsession, TelegramAuthService.Verify, SessionBatchRenderer, RSVP flow (confirm/decline), переноса сессии и голосования, а также кейсов доступа к чужим группам и сессиям в Web.

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

    • добавлен тестируемый парсер NewSessionCommandParser для разбора /newsession и валидации дат;
    • вынесены правила RsvpFlowRules и RescheduleVoteRules, чтобы покрыть переходы состояний RSVP и голосования без хрупкой привязки к инфраструктуре;
    • добавлены тесты для TelegramAuthService, SessionBatchRenderer, reschedule voting message и AuthorizedSessionService;
    • пакет тестов теперь покрывает ключевые bot/web-сценарии вместо одного пустого smoke test.

    🛡 Что это даёт

    • регрессии в расписаниях, подтверждениях участия и переносах будут ловиться до деплоя;
    • изменения в Telegram auth и web-доступе теперь защищены автоматическими проверками;
    • доработка бизнес-логики бота стала дешевле и безопаснее, потому что основные переходы состояний зафиксированы тестами.

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

    • версия проекта обновлена до 1.1.3 в Directory.Build.props, compose.yaml и Gitea Actions workflow;
    • Docker-образы и deploy-конфигурация теперь используют тег 1.1.3.
    Downloads