feat: добавить каталог игр и витрину ваншотов (issue #39) #109

Closed
Toutsu wants to merge 0 commits from feature/issue-39-game-catalog into main
Owner

Summary

Реализует публичный каталог игр /showcase и обновляет карточку сессии /s/{id} с поддержкой прямой записи. Closes #39.

Changes

  • Database (V027): добавлены поля is_one_shot, system, description, cover_image_url, duration_minutes, format, allow_direct_registration в sessions, создан partial index ix_sessions_showcase.
  • Domain: GameSystem enum с 21 системой + Other, ToDisplayName(), TryParseFuzzy() для парсинга из пользовательского ввода.
  • Shared DTOs: ShowcaseSessionDto, ShowcaseFilter (DateFilter, SeatFilter).
  • Web — /showcase: фильтруемая страница-каталог с сеткой карточек, пагинацией и фильтрами по дате, системе, наличию мест и формату.
  • Web — /s/{id}: обновлённая публичная карточка с обложкой, бейджами, описанием, длительностью. Поддержка ?register=1 для прямой записи авторизованных пользователей.
  • Web — SessionService: GetShowcaseSessionsAsync с динамическим SQL и LATERAL join для подсчёта участников; RegisterFromShowcaseAsync с FOR UPDATE, ON CONFLICT и интеграцией с SessionCapacityRules.
  • Shared — CreateSession: обновлён CreateSessionCommand и CreateSessionHandler для поддержки новых полей (System, Description, Format, DurationMinutes, IsOneShot).
  • Tests: тесты для GameSystem.TryParseFuzzy, SessionCapacityRules (boundary cases), обновлён DiscordProjectStructureTests на версию 3.4.0.
  • Version bump: 3.4.0 во всех 4 файлах (Directory.Build.props, compose.yaml, .gitea/workflows/deploy.yml, NavMenu.razor) + README.md.

Test plan

  • dotnet build — 0 errors, 0 warnings
  • dotnet test — 328 passed, 0 failed
  • Миграция V027 применяется при старте бота (DbUp)

Workflow

  • CI passes
  • Code review approved
  • Deployed
  • Release published
## Summary Реализует публичный каталог игр `/showcase` и обновляет карточку сессии `/s/{id}` с поддержкой прямой записи. Closes #39. ## Changes - **Database (V027):** добавлены поля `is_one_shot`, `system`, `description`, `cover_image_url`, `duration_minutes`, `format`, `allow_direct_registration` в `sessions`, создан partial index `ix_sessions_showcase`. - **Domain:** `GameSystem` enum с 21 системой + `Other`, `ToDisplayName()`, `TryParseFuzzy()` для парсинга из пользовательского ввода. - **Shared DTOs:** `ShowcaseSessionDto`, `ShowcaseFilter` (DateFilter, SeatFilter). - **Web — `/showcase`:** фильтруемая страница-каталог с сеткой карточек, пагинацией и фильтрами по дате, системе, наличию мест и формату. - **Web — `/s/{id}`:** обновлённая публичная карточка с обложкой, бейджами, описанием, длительностью. Поддержка `?register=1` для прямой записи авторизованных пользователей. - **Web — `SessionService`:** `GetShowcaseSessionsAsync` с динамическим SQL и `LATERAL` join для подсчёта участников; `RegisterFromShowcaseAsync` с `FOR UPDATE`, `ON CONFLICT` и интеграцией с `SessionCapacityRules`. - **Shared — CreateSession:** обновлён `CreateSessionCommand` и `CreateSessionHandler` для поддержки новых полей (`System`, `Description`, `Format`, `DurationMinutes`, `IsOneShot`). - **Tests:** тесты для `GameSystem.TryParseFuzzy`, `SessionCapacityRules` (boundary cases), обновлён `DiscordProjectStructureTests` на версию 3.4.0. - **Version bump:** 3.4.0 во всех 4 файлах (`Directory.Build.props`, `compose.yaml`, `.gitea/workflows/deploy.yml`, `NavMenu.razor`) + `README.md`. ## Test plan - [x] `dotnet build` — 0 errors, 0 warnings - [x] `dotnet test` — 328 passed, 0 failed - [x] Миграция V027 применяется при старте бота (DbUp) ## Workflow - [ ] CI passes - [ ] Code review approved - [ ] Deployed - [ ] Release published
Toutsu added 18 commits 2026-05-28 17:02:43 +03:00
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fix: финальные правки ревью для issue #39
PR Checks / test-and-build (pull_request) Successful in 13m16s
a63e3bef1e
- PublicSession.razor: добавлена обработка ?register=1, AuthStateProvider,
  TryGetPlatformIdentity, кнопки записи для авторизованных/неавторизованных
  пользователей, отображение результата регистрации
- CreateSessionHandler: добавлен cover_image_url в INSERT SQL
- DiscordProjectStructureTests: версия 3.4.0 во всех проверках
- README.md: актуальная версия v3.4.0

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Toutsu added 1 commit 2026-05-28 17:29:48 +03:00
fix(web): правильный парсинг query string для ?register=1
PR Checks / test-and-build (pull_request) Successful in 12m50s
accb3b2405
Заменен Navigation.Uri.Contains() на QueryHelpers.ParseQuery
для корректного определения параметра register без ложных
срабатываний на подстроки (например, register=10).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Toutsu closed this pull request 2026-05-29 09:58:48 +03:00
Some checks are pending
PR Checks / test-and-build (pull_request) Successful in 12m50s

Pull request closed

Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Toutsu/GmRelayBot#109