docs: mark phases 3-5 complete, update API/FRONTEND/MODULES/CLAUDE.md

This commit is contained in:
Tran G. (Revernomad) Khoa
2026-04-17 20:50:19 +07:00
parent 5a62d21def
commit 8bac29fb68
5 changed files with 44 additions and 53 deletions

View File

@@ -69,8 +69,8 @@ frontend/src/
│ │ ├── PlayerTable.tsx # Current players + history with search
│ │ ├── BanTable.tsx # Ban list + create/revoke form
│ │ ├── MissionList.tsx # Available missions + Mission Rotation sections; multi-file upload
│ │ ├── ModList.tsx # Mod list with enable/disable checkboxes
│ │ └── LogViewer.tsx # Log display with level filter (receives logs as props)
│ │ ├── ModList.tsx # Split-pane mod selector (Available vs Selected); Apply Selection button
│ │ └── LogViewer.tsx # Log display with level filter + collapsible Log Files browser (download/delete)
│ ├── settings/
│ │ ├── PasswordChange.tsx # Password change form
│ │ └── UserManager.tsx # User CRUD table (admin only)
@@ -134,8 +134,8 @@ App
│ │ │ ├── PlayerTable (current + history with search)
│ │ │ ├── BanTable (ban list + create/revoke)
│ │ │ ├── MissionList (Available + Rotation sections, multi-file upload)
│ │ │ ├── ModList (enable/disable checkboxes)
│ │ │ └── LogViewer (level filter, real-time via WebSocket onEvent)
│ │ │ ├── ModList (split-pane: Available | Selected; Apply Selection)
│ │ │ └── LogViewer (level filter, real-time stream + Log Files browser)
│ │ ├── /servers/new → CreateServerPage
│ │ │ └── 4-step wizard (Game Type → Info → Options → Review)
│ │ └── /settings → SettingsPage
@@ -186,6 +186,10 @@ All server data flows through TanStack Query hooks:
| `useDeleteMission(id)` | Mutation | `DELETE /api/servers/:id/missions/:filename` | Invalidates `["missions", id]` |
| `useSetEnabledMods(id)` | Mutation | `PUT /api/servers/:id/mods/enabled` | Invalidates `["mods", id]` |
| `useSendCommand(id)` | Mutation | `POST /api/servers/:id/rcon/command` | No invalidation |
| `useKickPlayer(id)` | Mutation | `POST /api/servers/:id/players/:slot_id/kick` | Invalidates `["players", id]` |
| `useBanPlayer(id)` | Mutation | `POST /api/servers/:id/players/:slot_id/ban` | Invalidates players + bans |
| `useServerLogFiles(id)` | Query | `GET /api/servers/:id/logfiles` | `["servers", id, "logfiles"]` (refetch 30s) |
| `useDeleteLogFile(id)` | Mutation | `DELETE /api/servers/:id/logfiles/:filename` | Invalidates logfiles |
**Auth** (`useAuth.ts`):
@@ -210,18 +214,10 @@ All server data flows through TanStack Query hooks:
**Key type notes**:
- `Server` type in `useServers.ts` uses `game_port`, `current_players`, `max_players` (matches enriched API response)
- `Mission` type: `{ name, filename, size_bytes, terrain }` — terrain parsed from filename
- `Mod` type: `{ name, path, size_bytes, enabled, display_name, workshop_id }``display_name`/`workshop_id` from mod.cpp/meta.cpp (planned Phase 3)
- `Mod` type: `{ name, path, size_bytes, enabled, display_name, workshop_id }``display_name`/`workshop_id` from mod.cpp/meta.cpp
- `Ban` type: `{ id, server_id, guid, name, reason, banned_by, banned_at, expires_at, is_active, game_data }` (matches API)
- There is no REST endpoint for logs — logs are only pushed via WebSocket events
**Planned hooks (UX Enhancement Plan — remaining):**
| Hook | Phase | Endpoint |
|---|---|---|
| `useKickPlayer(id)` | Phase 4 | `POST /api/servers/:id/players/:slot_id/kick` |
| `useBanPlayer(id)` | Phase 4 | `POST /api/servers/:id/players/:slot_id/ban` |
| `useLogFiles(id)` | Phase 5 | `GET /api/servers/:id/logfiles` |
QueryClient defaults: `staleTime: 10s`, `retry: 2`, `refetchOnWindowFocus: false`.
### Client State (Zustand)
@@ -285,7 +281,7 @@ Dark neumorphic theme defined in `tailwind.config.js`:
## Testing
### Unit Tests (120 tests, Vitest + React Testing Library)
### Unit Tests (149 tests, Vitest + React Testing Library)
| Test File | Tests | Coverage |
|---|---|---|