-
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(defaultBoth) для совместимости с Portfolio-фичей.
Domain
GmRelay.Shared.Domain.PublicationModeс методамиToDatabaseValue,FromDatabaseValue,IsVisibleInCatalog,IsVisibleToClubMembers.
Сервисы
ISessionStoreрасширен 12 методами для membership/showcase.AuthorizedMembershipService(новый) — подача заявки, одобрение/отклонение GM-ом с проверкой прав.SessionService— SQL с учётом членства (EXISTSнаclub_membershipsсо статусом Active).AuthorizedSessionService—SetSessionPublic*переименованы в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).
📦 Версия и деплой
Downloads
- Новая таблица