feat(lobby): F8-04b hierarchical sidebar + paid-tier gate for create-game
Reshape the lobby UI from a single Overview into a two-level sidebar (games · profile · DEV synthetic-reports) with four games sub-panels (active-past · recruitment · invitations · private-games). Move the `create new game` button into the private-games panel, merge the applications section into recruitment cards as status chips, and add DEV-only synthetic-report loader as a top-level screen. Add a paid-tier gate at backend `lobby.game.create`: free callers get `403 forbidden` before the lobby service is invoked. The UI hides the private-games sub-panel + create button on free tier (DEV affordances flag overrides). Update every integration test that creates a game to use a new `testenv.PromoteToPaid` helper; add a new `TestLobbyFlow_FreeUserCreateGameForbidden`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -265,7 +265,12 @@ paths:
|
||||
summary: Create a new private lobby game owned by the caller
|
||||
description: |
|
||||
Always emits a `private` game owned by `X-User-ID`. Public games
|
||||
are created via `POST /api/v1/admin/games`.
|
||||
are created via `POST /api/v1/admin/games`. The endpoint is
|
||||
gated by the caller's paid tier: free-tier accounts receive
|
||||
`403 forbidden` (code `forbidden`) and no `draft` row is
|
||||
created. The tier is read through
|
||||
`EntitlementProvider.IsPaid(userID)` from the user-domain
|
||||
service.
|
||||
security:
|
||||
- UserHeader: []
|
||||
parameters:
|
||||
@@ -285,6 +290,8 @@ paths:
|
||||
$ref: "#/components/schemas/LobbyGameDetail"
|
||||
"400":
|
||||
$ref: "#/components/responses/InvalidRequestError"
|
||||
"403":
|
||||
$ref: "#/components/responses/ForbiddenError"
|
||||
"501":
|
||||
$ref: "#/components/responses/NotImplementedError"
|
||||
"500":
|
||||
|
||||
Reference in New Issue
Block a user