docs(website): record the PR 2 admin router split (moderation, bot-activity, activity)
Matches the code change in website: 18 more admin routes carved into
moderation.router.js (15), botActivity.router.js (2) and activity.router.js (1),
leaving 64 in the residual admin.routes.js.
API_V2_PLAN.md gains a "PR 2 — as landed" section recording the four zero-diff
gates and two decisions worth carrying into PRs 3-5:
- /activity gets its own file rather than the target tree's plan to park it as
a singleton inside dashboard.router.js — honouring the tree would have left
one route in the residual file for two PRs, and it is a genuinely separate
capability (the staff audit log, not the dashboard's stats overview and not
the botScore middleware's ban state). PR 4 therefore mounts dashboard and
site-mode only; the target tree is updated to match.
- A gate moves to a router-level `use` only where it was already a *prefix*
mount (moderation's modAccess). Bot-activity's per-route adminOnly stays
per-route, because the per-route handler count is the only thing in
routes.guards.json that would catch a dropped gate — requireRole(...) returns
an anonymous arrow and never appears by name.
BACKEND_DESIGN.md §2 (folder structure) and §4 (the /admin contract preamble) are
updated for the new files and their gates. PROJECT_TREE.md is left alone — since
website#98 it is auto-generated by the sync-project-tree workflow.
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -34,9 +34,10 @@ Skeleton from the spec, with a small number of justified additions marked **(+)*
|
||||
> every URL unchanged**. This section and §4 get updated as each split PR lands. See
|
||||
> [API_V2_PLAN.md](./API_V2_PLAN.md) § Phase 2.
|
||||
>
|
||||
> **Landed so far:** admin `users`, `account`, `invites` and `auth/providers` (28 routes) now live in
|
||||
> their own routers under `admin/`, behind a new `admin/index.js`. The remaining 82 admin routes are
|
||||
> still in `admin.routes.js`, and `public/` and `player/` are untouched.
|
||||
> **Landed so far:** admin `users`, `account`, `invites`, `auth/providers` (PR 1, 28 routes) and
|
||||
> `moderation`, `bot-activity`, `activity` (PR 2, 18 routes) now live in their own routers under
|
||||
> `admin/`, behind a new `admin/index.js`. The remaining 64 admin routes are still in
|
||||
> `admin.routes.js`, and `public/` and `player/` are untouched.
|
||||
>
|
||||
> "Every URL unchanged" is enforced mechanically, not by review: `server/scripts/routeManifest.js`
|
||||
> (`npm run routes:manifest`) walks the live Express stack and writes the sorted
|
||||
@@ -68,7 +69,12 @@ server/
|
||||
users.router.js (15) /admin/users — adminOnly
|
||||
invites.router.js (3) /admin/invites — adminOnly
|
||||
authProviders.router.js (4) /admin/auth — adminOnly
|
||||
admin.routes.js (82) everything not yet split, mounted
|
||||
moderation.router.js (15) /admin/moderation — modAccess
|
||||
(admin+moderator) at router level
|
||||
botActivity.router.js (2) /admin/bot-activity — adminOnly
|
||||
activity.router.js (1) /admin/activity — staff-wide
|
||||
audit log, no extra gate
|
||||
admin.routes.js (64) everything not yet split, mounted
|
||||
last at the group root; goes away
|
||||
when the final split PR lands
|
||||
admin.controller.js + the per-capability controllers
|
||||
@@ -460,7 +466,8 @@ Public content GETs pass through the **siteMode** gate (§5).
|
||||
### /admin (admin/index.js → the capability routers in §2) — all behind `isLoggedIn` + `noindex` + `staffOnly`
|
||||
|
||||
`admin/index.js` applies the shared gate and mounts each capability router at the prefix it owns;
|
||||
`users`, `invites` and `auth/providers` add `adminOnly` on top. Routes not yet extracted still live
|
||||
`users`, `invites`, `auth/providers` and `bot-activity` add `adminOnly` on top, and `moderation` adds
|
||||
`modAccess` (admin + moderator, so editors are excluded). Routes not yet extracted still live
|
||||
in `admin.routes.js`, mounted last at the group root. The URLs below are unaffected by which file a
|
||||
route currently sits in — that is the property the route manifest freezes.
|
||||
| Method | Path | Purpose |
|
||||
|
||||
Reference in New Issue
Block a user