• v3.7.0 6951c72f3c

    Release v3.7.0 — Приватные клубные витрины
    Deploy Telegram Bot / build-and-push (push) Successful in 5m29s
    Deploy Telegram Bot / scan-images (push) Successful in 1m29s
    Deploy Telegram Bot / deploy (push) Successful in 39s
    Stable

    Toutsu released this 2026-06-03 11:58:07 +03:00 | 57 commits to main since this release

    🛠 Release v3.7.0 — Приватные клубные витрины

    Issue #110: GM теперь может публиковать сессии только в клубной витрине, не показывая их в общем каталоге. Доступ к таким играм — только для одобренных участников клуба.

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

    Data model (миграция V030)

    • Новая таблица club_memberships со статусами Pending/Active/Rejected/Left, частичный уникальный индекс ux_club_memberships_one_active.
    • sessions.publication_mode (None/Catalog/ClubOnly/Both) вместо is_public, CHECK-ограничение и пересозданные partial-индексы.
    • portfolio_games.publication_mode (default Both) для совместимости с Portfolio-фичей.

    Domain

    • GmRelay.Shared.Domain.PublicationMode с методами ToDatabaseValue, FromDatabaseValue, IsVisibleInCatalog, IsVisibleToClubMembers.

    Сервисы

    • ISessionStore расширен 12 методами для membership/showcase.
    • AuthorizedMembershipService (новый) — подача заявки, одобрение/отклонение GM-ом с проверкой прав.
    • SessionService — SQL с учётом членства (EXISTS на club_memberships со статусом Active).
    • AuthorizedSessionServiceSetSessionPublic* переименованы в SetSessionPublicationMode*.

    UI

    • MyClubMemberships.razor (/profile/memberships) — Active/Pending/History + кнопки покинуть/отозвать.
    • ClubApplications.razor (/group/{GroupId}/applications) — owner/co-GM, approve/reject.
    • PublicClub.razor — публичная и members-only секции, CTA «Подать заявку» и «Войти как участник».
    • PublicMasterProfile.razor — member-aware видимость клубных сессий.
    • EditSession.razor и GroupDetails.razor — булев toggle заменён на 4-state <select>.
    • GroupDetails.razor — карточка «Заявки участников (N)» со ссылкой на /applications.
    • NavMenu.razor — ссылка «Мои клубы» → /profile/memberships, версия v3.7.0.
    • PublicLayout.razor — ссылка «Клубы» → /showcase.

    Тесты (493 всего, все проходят)

    • Новые файлы: PublicationModeTests, ClubMembershipsTests, ClubShowcaseSourceTests, AuthorizedMembershipServiceTests.
    • Обновлены: PublicClubPagesTests, AuthorizedSessionServiceTests, AuthorizedPortfolioServiceTests, CampaignTemplatesNavigationTests.

    Версионирование

    • Directory.Build.props, compose.yaml, .gitea/workflows/deploy.yml, NavMenu.razor — синхронизированы на 3.7.0.

    🗡 Что это даёт

    • Клубы получают приватную витрину: игры видны только одобренным участникам, а не всему каталогу.
    • GM сами управляют составом клуба: заявка (Pending) → одобрение (Active) или отказ (Rejected).
    • Никаких сюрпризов в общем /showcase — ClubOnly-игры туда не попадают.
    • Управление режимом публикации — в Web-дашборде (тот же UX, что и раньше, но с 4 опциями вместо 2).

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

    • Версия обновлена до 3.7.0 (Directory.Build.props, NavMenu.razor, compose.yaml, deploy.yml).
    • Docker-образы опубликованы с тегом 3.7.0.
    • Gitea Actions run #287 (PR checks) — success.
    • Gitea Actions run #288 (deploy) — success (bot, discord, web — healthy).
    • PR #119 — merged.
    Downloads