From ae448e1ccc38609d328a938b8c0baf524e8e81a1 Mon Sep 17 00:00:00 2001 From: freefire Date: Sun, 30 Aug 2026 03:32:25 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=A2=9E=E5=8A=A0=20SSR=20=E8=BF=9B?= =?UTF-8?q?=E5=BA=A6=E8=B7=AF=E7=BA=BF=E5=9B=BE=E4=B8=8E=20Admin=20?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=8B=E4=B8=80=E5=88=80=E6=8F=90=E7=BA=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 便于查阅当前完成度与默认继续刀序;lottery/§O 已在前序提交。 Co-authored-by: Cursor --- docs/rebuild-spec/06-pages-ux.md | 2 +- docs/rebuild-spec/09-ssr-progress.md | 149 +++++++++++++++++++++++++ docs/rebuild-spec/README.md | 5 +- docs/rebuild-spec/plans/admin-users.md | 30 +++++ 4 files changed, 183 insertions(+), 3 deletions(-) create mode 100644 docs/rebuild-spec/09-ssr-progress.md create mode 100644 docs/rebuild-spec/plans/admin-users.md diff --git a/docs/rebuild-spec/06-pages-ux.md b/docs/rebuild-spec/06-pages-ux.md index 21adae4..d9c1870 100644 --- a/docs/rebuild-spec/06-pages-ux.md +++ b/docs/rebuild-spec/06-pages-ux.md @@ -55,7 +55,7 @@ | `/admin/trash` | 帖回收站 | 已迁 | | `/admin/login` | 重定向前台登录 | 已迁 | -未迁(原 SPA):users / badges / media / 完整 Limits 等。 +未迁(原 SPA):**users(下一刀,见 [09](09-ssr-progress.md))** / badges / media / 完整 Limits 等。 --- diff --git a/docs/rebuild-spec/09-ssr-progress.md b/docs/rebuild-spec/09-ssr-progress.md new file mode 100644 index 0000000..b66ec45 --- /dev/null +++ b/docs/rebuild-spec/09-ssr-progress.md @@ -0,0 +1,149 @@ +# 09 · SSR 重构进度与路线图 + +> **读者**:产品方 / 实现 AI +> **分支**:`rebuild/gitea-ssr`(`main` = SPA 对照) +> **验收清单**: [02-features.md](02-features.md) +> **架构**: [08-gitea-ssr-architecture.md](08-gitea-ssr-architecture.md) +> **维护约定**:每次「继续」开新刀前更新本文「当前指针」;功能勾选以 `02` 为准,本文管阶段与刀序。 + +--- + +## 当前指针 + +| 项 | 值 | +|----|-----| +| **上一刀** | SSR 抽奖帖 `lottery`(已推送 `e06c548`) | +| **下一刀** | **Admin `/admin/users`**(禁言 / 验证 / 调积分)— 见下文「下一刀实现提纲」 | +| **工作区** | 应干净;有未提交改动时先处理再开新刀 | + +--- + +## 一句话状态 + +论坛核心闭环(安装、认证、Feed、五种帖类型、评论、私信、友链、审核、回收站、基础设置、备份)**已迁完**。余量主要是 Admin 用户/徽章/媒体、成长体系、OIDC/存储产品化与体验打磨。 + +```mermaid +flowchart LR + core[核心论坛已迁] + admin[Admin用户徽章媒体] + growth[等级徽章防刷] + polish[主题伪静态编辑器] + deferred[Gitea码桶后置] + core --> admin --> growth + admin --> polish + deferred -.-> admin +``` + +--- + +## 已完成里程碑 + +### 公开站 + +| 域 | 状态 | +|----|------| +| `/install`、登录/注册/忘记密码、opaque session | 已迁 | +| Feed / 板块 / 搜索 / 三栏 / 右栏 widgets | 已迁 | +| 帖详情:赞藏举报、门控、审核横幅、修订历史 | 已迁 | +| 帖类型:`normal` / `question` / `poll` / `bounty` / `lottery` | 已迁 | +| 评论:发评/回复/赞/私密/编辑删除/@/回复通知 | 已迁(扁平楼层;嵌套树未做) | +| 私信/系统通知、收藏、个人中心、用户页 | 已迁 | +| 友链前台 + Admin(含复检) | 已迁 | +| 站点单页 | 已迁 | +| `/health`、`robots.txt`、`sitemap.xml`、`/uploads` | 已落地(`02` §O 已勾) | + +### Admin + +| 路径 | 状态 | +|------|------| +| dashboard / boards / moderation / reports / trash | 已迁 | +| settings:品牌、限流、敏感词、SMTP、侧栏、SQLite 备份 | 已迁 | +| friend-links / pages | 已迁 | +| **users / badges / media** | **未迁** | +| settings:OIDC / Gitea / 存储 / 伪静态 Tab | **未迁** | + +### 近期提交(摘) + +`poll` → SQLite 备份 → 友链复检 → `question` → `bounty` → `lottery`(`e06c548`) + +--- + +## 未完成分层 + +### P0 — 小清理(可夹带) + +- 发评路径挂 `RateLimiter` `comment` 动作(服务层已有键,web 未挂) +- Logo/Favicon/OG 上传、头像裁剪等声明为未做的边角 + +### P1 — 推荐刀序(服务层多半已齐) + +1. **Admin 用户** ← 当前指针 +2. Admin 徽章定义 + 授予/撤销 +3. Admin 媒体列表/删除 + +### P2 — 成长与防刷 + +- Exp → Lv1–10、自动徽章、短龄同 IP 互刷拒绝分成(`02` §H) + +### P3 — 体验 / 编辑器(可砍或长期) + +- 主题、侧栏折叠、虚拟滚动、`feed_list_style`、伪静态 Admin +- TipTap / Markdown 双模(现行为 textarea + 门控) +- 游客评论、评论嵌套树(建议:全局 `#floor` + 缩进,编号语义先写入 `06`) +- 修订 diff、完整 Limits 字数 + +### 后置(不阻塞验收) + +- K:Gitea `/projects` +- L:OIDC 产品化 Admin CRUD +- M:S3 热切换、WebP thumb 全链路 + +--- + +## 默认「继续」刀序 + +| 序 | 刀 | 产出 | +|----|----|------| +| ✓ | 五种帖类型 + 备份/复检 + §O 勾选 | 核心闭环 | +| ✓ | 本文 `09` | 可查阅进度 | +| → | Admin `/admin/users` | 禁言/验证/调积分 | +| 3 | Admin `/admin/badges` | 徽章 CRUD + 授予 | +| 4 | Admin `/admin/media` | 媒体列表删除 | +| 5 | 等级/自动徽章 **或** 防刷分成 | 按当时偏好 | +| … | P3 / 后置 | 需明确点名再开 | + +--- + +## 下一刀实现提纲:Admin 用户管理 + +> 确认「继续」后按此实现;不恢复论坛管理 JSON `/api` 为 UI 主路径。 + +### 范围 + +- 路由:`GET /admin/users`;`POST /admin/users/:id/ban`、`/verify`、`/points` +- 复用:`UserService.ListUsers` / `BanUser`;`SetVerified`;`PointsService.AdminAdjust` +- 模板:`templates/admin/users.tmpl` + `admin/nav` 入口 +- 列表:分页、关键词;展示角色、积分、禁言、verified +- 操作:禁言/解禁、切换认证、调积分(delta + 备注);CSRF + PRG +- 规格:勾选 `02` §H「管理员调整积分、设定等级」中与积分/认证相关部分(等级 UI 可后置);`06` 标明 `/admin/users` 已迁 + +### 不做(本刀) + +- 设定 Exp/等级 UI(可只读展示 level) +- 徽章授予(下一刀 badges) +- 恢复 `/api/admin/users` 给浏览器 + +### 验证 + +- `build.bat`;冒烟:列表 → 禁言 → 调积分 → 认证开关 + +--- + +## 如何查阅 + +| 问题 | 看哪里 | +|------|--------| +| 某功能做没做? | [02-features.md](02-features.md) 复选框 | +| 现在该干什么? | 本文「当前指针」 | +| 路由迁没迁? | [06-pages-ux.md](06-pages-ux.md) §1 | +| 目录约定? | [08-gitea-ssr-architecture.md](08-gitea-ssr-architecture.md) | diff --git a/docs/rebuild-spec/README.md b/docs/rebuild-spec/README.md index c6a13e0..6ea03e5 100644 --- a/docs/rebuild-spec/README.md +++ b/docs/rebuild-spec/README.md @@ -2,7 +2,7 @@ > **读者**:准备用新栈(建议真 SSR)重写站点的 AI / 开发者 > **事实来源**:本仓库现有代码;规格描述「产品必须保留什么」,不是「必须继续用 Go + React SPA」 -> **交叉引用**:[01-product](01-product.md) · [02-features](02-features.md) · [03-data-model](03-data-model.md) · [04-api](04-api.md) · [05-business-rules](05-business-rules.md) · [06-pages-ux](06-pages-ux.md) · [07-config-ops](07-config-ops.md) · [08-gitea-ssr-architecture](08-gitea-ssr-architecture.md) +> **交叉引用**:[01-product](01-product.md) · [02-features](02-features.md) · [03-data-model](03-data-model.md) · [04-api](04-api.md) · [05-business-rules](05-business-rules.md) · [06-pages-ux](06-pages-ux.md) · [07-config-ops](07-config-ops.md) · [08-gitea-ssr-architecture](08-gitea-ssr-architecture.md) · [09-ssr-progress](09-ssr-progress.md) > **实现栈(重构分支)**:Gitea 式 Go 模板 SSR;开发分支 `rebuild/gitea-ssr`;`main` 保留 React SPA 对照。详见 [08](08-gitea-ssr-architecture.md)。 @@ -21,8 +21,9 @@ | 7 | [06-pages-ux.md](06-pages-ux.md) | 路由、布局、编辑器、后台流程 | | 8 | [07-config-ops.md](07-config-ops.md) | 配置、数据目录、部署、SEO 字段 | | 9 | [08-gitea-ssr-architecture.md](08-gitea-ssr-architecture.md) | Gitea 式 SSR 分支与目录约定 | +| 10 | [09-ssr-progress.md](09-ssr-progress.md) | **进度与刀序**(「现在做到哪 / 下一刀」) | -单次 context 不够时:先投喂 `README` + `01` + `02`;实现某模块时再追加对应 `03`–`06` 章节。 +单次 context 不够时:先投喂 `README` + `01` + `02`;跟进度看 `09`;实现某模块时再追加对应 `03`–`06` 章节。 --- diff --git a/docs/rebuild-spec/plans/admin-users.md b/docs/rebuild-spec/plans/admin-users.md new file mode 100644 index 0000000..d39c899 --- /dev/null +++ b/docs/rebuild-spec/plans/admin-users.md @@ -0,0 +1,30 @@ +# Admin 用户管理(SSR)— 实现计划 + +> 状态:待执行(指针见 [09-ssr-progress.md](../docs/rebuild-spec/09-ssr-progress.md)) +> 分支:`rebuild/gitea-ssr` + +## 范围 + +在 Admin 增加用户列表与运营操作,复用已有服务层,不恢复浏览器管理 JSON `/api`。 + +| 能力 | 服务 | 路由 | +|------|------|------| +| 列表/搜索/分页 | `UserService.ListUsers` | `GET /admin/users` | +| 禁言/解禁 | `UserService.BanUser` | `POST /admin/users/:id/ban` | +| 认证开关 | `SetVerified` | `POST /admin/users/:id/verify` | +| 调积分 | `PointsService.AdminAdjust` | `POST /admin/users/:id/points` | + +## 实现要点 + +1. [`routers/web/home.go`](../routers/web/home.go) admin 组注册上述路由 +2. 新建 [`routers/web/admin_users.go`](../routers/web/admin_users.go):渲染 + CSRF POST + PRG +3. [`templates/admin/users.tmpl`](../templates/admin/users.tmpl) + [`templates/admin/nav.tmpl`](../templates/admin/nav.tmpl) 入口 +4. 回写 `02` §H(调积分/认证相关)、`06` `/admin/users` 已迁;更新 `09` 当前指针 → badges + +## 不做 + +等级设定 UI、徽章授予、批量导入、恢复 `/api/admin/users` 作 UI。 + +## 验证 + +`build.bat`;冒烟:搜索用户 → 禁言 → 调积分 → 切换 verified。