Add the games, runtime, and engine-version pages over the existing lobby,
runtime, and engine-version services (no new business logic).
- GET/POST /_gm/games list + create public game
- GET /_gm/games/{id} detail incl. runtime snapshot
- POST /_gm/games/{id}/force-start|stop game state actions
- POST /_gm/games/{id}/ban-member ban a member (uuid + reason)
- POST /_gm/games/{id}/runtime/restart|patch|force-next-turn
- GET/POST /_gm/engine-versions registry + register
- POST /_gm/engine-versions/{ver}/disable disable a version
Console depends on GameAdmin / RuntimeAdmin / EngineVersionAdmin interfaces
(satisfied by the concrete services) so the pages render in tests without a
database. Collection-mutating POSTs are mounted on the collection path to avoid
a static-vs-param route conflict in gin. Writes flow through the CSRF guard and
redirect back; the create form parses datetime-local as UTC.
Tests: list/detail (with and without a runtime), create (visibility/owner/time
assertions), force-start (+ bad-CSRF), ban-member (+ bad uuid), runtime patch
(+ missing version), engine-version list/register/disable, and unavailable.
Docs: backend/docs/admin-console.md page inventory extended.
This commit is contained in:
@@ -91,10 +91,23 @@ changes.
|
||||
| `/_gm/users/{id}/block` | POST | Apply a permanent block (reason required). |
|
||||
| `/_gm/users/{id}/entitlement` | POST | Set the entitlement tier. |
|
||||
| `/_gm/users/{id}/soft-delete` | POST | Soft-delete the account (cascades). |
|
||||
| `/_gm/games` | GET/POST | Paginated game list; POST creates a public game. |
|
||||
| `/_gm/games/{id}` | GET | Game detail with the runtime snapshot. |
|
||||
| `/_gm/games/{id}/force-start` | POST | Force-start the game. |
|
||||
| `/_gm/games/{id}/force-stop` | POST | Force-stop the game. |
|
||||
| `/_gm/games/{id}/ban-member` | POST | Ban a member (user id + reason). |
|
||||
| `/_gm/games/{id}/runtime/restart` | POST | Restart the engine container. |
|
||||
| `/_gm/games/{id}/runtime/patch` | POST | Patch the runtime to a target version. |
|
||||
| `/_gm/games/{id}/runtime/force-next-turn` | POST | Force the next turn now. |
|
||||
| `/_gm/engine-versions` | GET/POST | Version registry; POST registers a version. |
|
||||
| `/_gm/engine-versions/{ver}/disable` | POST | Disable a registered version. |
|
||||
|
||||
Each page reuses the same service layer as the corresponding `/api/v1/admin/*`
|
||||
JSON endpoint; the console adds no business logic. Unblocking a user is not yet
|
||||
available because the JSON admin API exposes no remove-sanction endpoint.
|
||||
JSON endpoint; the console adds no business logic. Collection-mutating POSTs are
|
||||
mounted on the collection path (`POST /_gm/games`, `POST /_gm/engine-versions`)
|
||||
so a static action segment never collides with a path parameter in the gin
|
||||
router. Unblocking a user is not yet available because the JSON admin API
|
||||
exposes no remove-sanction endpoint.
|
||||
|
||||
## Configuration
|
||||
|
||||
|
||||
Reference in New Issue
Block a user