Stage 17 #5: hide finished games from your own lobby list
CI / changes (pull_request) Successful in 3s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 11s
CI / ui (pull_request) Successful in 35s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 2m16s
CI / changes (pull_request) Successful in 3s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 11s
CI / ui (pull_request) Successful in 35s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 2m16s
A player can remove a finished game from their own 'my games' list. The action is per-account, finished-only and irreversible (the game stays for the other players; there is no un-hide). - backend: migration 00012 game_hidden(account_id, game_id); store HideGame + hiddenGameIDs + ListGamesForAccount filtering; service HideGame (seat + finished checks, reusing ErrNotAPlayer / ErrGameActive); POST /api/v1/user/games/:id/hide. - gateway: game.hide edge op (reuses GameActionRequest -> Ack) + backendclient.HideGame. - ui: finished rows reveal a delete via swipe-left (touch) or a kebab tap (desktop), active rows get an inert chevron for icon alignment; optimistic removal + lobby-cache sync; mock + transport + client wiring; lobby.hideGame label (en/ru). - tests: integration (active->ErrGameActive, outsider->ErrNotAPlayer, per-account, idempotent), gateway transcode round-trip, mock e2e (kebab -> delete); hardened a pre-existing chat-screen .back transition flake surfaced by the new test's timing. - docs: ARCHITECTURE persistence list, FUNCTIONAL (+ _ru) lobby story, PLAN tracker.
This commit is contained in:
@@ -1415,9 +1415,18 @@ provided cert) at the contour caddy; prod VPN; rollback.
|
||||
and `--tg-content-top`), with a small padding bump so the native controls aren't flush.
|
||||
- **Tests backfilled** for the merged round-6 work: e2e for the in-game "✓ in friends" item
|
||||
and a board→board tile relocation; codec units for `last_activity_unix` + `OutgoingRequestList`.
|
||||
- **Hide finished games (#5, shipped):** a player can remove a finished game from their own
|
||||
*my games* list — **per-account, finished-only and irreversible** (the game stays for the
|
||||
other players; there is no un-hide). On a finished row a **swipe-left** (touch) or a tap on
|
||||
its **kebab ⋮** (the desktop affordance) reveals a **❌** that hides it; active rows carry an
|
||||
inert **›** chevron purely to keep the right-edge icons aligned. New table
|
||||
`game_hidden(account_id, game_id)` + migration `00012`; `ListGamesForAccount` filters the
|
||||
hidden set; `POST /api/v1/user/games/:id/hide` behind the `game.hide` edge op (reusing
|
||||
`GameActionRequest` → an `Ack`); the lobby drops the card optimistically and keeps the cache
|
||||
in sync. Covered by an integration test (active→`ErrGameActive`, outsider→`ErrNotAPlayer`,
|
||||
per-account visibility, idempotent), a gateway transcode test, and a mock e2e (kebab → ❌).
|
||||
- **Deferred to the next PR (agreed):** #4 enrich the out-of-app "your turn" / game-end push
|
||||
with the opponent's name, last word and score; #5 let a player hide finished games from
|
||||
their lobby (swipe + a desktop affordance).
|
||||
with the opponent's name, last word and score.
|
||||
|
||||
## Deferred TODOs (cross-stage)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user