Add tRPC for publish progress subscriptions

This commit is contained in:
CPTProgrammer 2026-07-08 06:13:19 +08:00
parent 6b53906d08
commit d7317b4b04
No known key found for this signature in database
2 changed files with 20 additions and 7 deletions

View File

@ -7,6 +7,7 @@
- **框架**Next.js前后端不分离WebUI 作为本地界面) - **框架**Next.js前后端不分离WebUI 作为本地界面)
- **UI 库**Ant Design - **UI 库**Ant Design
- **图标库**@ant-design/icons - **图标库**@ant-design/icons
- **通信层**tRPC避免手写 API Route除了 `[trpc]/route.ts` 一个入口文件)
- **工具库**use-debounce防抖 - **工具库**use-debounce防抖
- **Markdown 编辑器**@uiw/react-md-editor风格需调整为与 Ant Design 统一) - **Markdown 编辑器**@uiw/react-md-editor风格需调整为与 Ant Design 统一)
- **校验库**Zod运行时校验 config 文件 + API 响应) - **校验库**Zod运行时校验 config 文件 + API 响应)
@ -35,7 +36,12 @@
### 前后端通信 ### 前后端通信
使用 Next.js Server Actions 或直接在 Server Component 中调用后端函数,**不创建 API Route**。前端通过 `"use server"` 指令的函数或 Server Component 的 `async` 逻辑直接调用 `src/lib/` 中的后端代码,避免前后端分离的冗余 API 层。 日常功能使用 Next.js Server Actions 或直接在 Server Component 中调用后端函数,**不创建 API Route**。前端通过 `"use server"` 指令的函数或 Server Component 的 `async` 逻辑直接调用 `src/lib/` 中的后端代码,避免前后端分离的冗余 API 层。
仅发布功能使用 tRPC需 subscription 推送实时进度),在 `src/app/api/publish/[trpc]/route.ts` 中定义唯一的 HTTP 入口,前端通过 tRPC Client 调用:
- 变更:`trpc.release.publish.useMutation()`
- 订阅:`trpc.release.progress.useSubscription(...)`
### `src/` 目录说明 ### `src/` 目录说明
@ -115,6 +121,11 @@ src/types/
- `https://www.npmjs.com/package/use-debounce` — npm 页面 - `https://www.npmjs.com/package/use-debounce` — npm 页面
- `https://raw.githubusercontent.com/xnimorz/use-debounce/refs/heads/master/README.md` — README 原文 - `https://raw.githubusercontent.com/xnimorz/use-debounce/refs/heads/master/README.md` — README 原文
#### tRPC
- `https://trpc.io/llms.txt` — 目录索引(带描述)
- 每页逐页获取正文
#### Zod #### Zod
- `https://zod.dev/llms.txt` — 目录索引(纯链接) - `https://zod.dev/llms.txt` — 目录索引(纯链接)

View File

@ -124,12 +124,14 @@
### 5. 执行发布 ### 5. 执行发布
1. 前端显示两个进度条(仅显示有勾选任务的平台),格式:`{平台图标} 平台名: [======== ] 0 / N` 1. 前端调用 `trpc.release.publish.useMutation()` 发起发布
2. 单个平台内按 MC 版本顺序逐个提交,**不可并行**;两个平台之间可以并行执行 2. 前端通过 `trpc.release.progress.useSubscription()` 监听进度,实时更新进度条
3. 每个版本的发布流程: 3. 进度条格式:`{平台图标} 平台名: [======== ] 0 / N`,仅显示有勾选任务的平台
4. 单个平台内按 MC 版本顺序逐个提交,**不可并行**;两个平台之间可以并行执行
5. 每个版本的发布流程:
- 解析模板:用 `version``mc_version` 填入各平台 `version_name`、`version` 模板(含递归解析) - 解析模板:用 `version``mc_version` 填入各平台 `version_name`、`version` 模板(含递归解析)
- Modrinth构造 multipart/form-data 请求,含 `data` JSON + 构建产物文件 + 源码文件 - Modrinth构造 multipart/form-data 请求,含 `data` JSON + 构建产物文件 + 源码文件
- CurseForge构造 multipart/form-data 请求,含 `metadata` JSON + 文件 - CurseForge构造 multipart/form-data 请求,含 `metadata` JSON + 文件
- 更新对应进度条 - 通过 tRPC subscription 推送进度更新
4. **任一请求失败则取消当前平台的后续所有任务**,不影响另一个平台 6. **任一请求失败则取消当前平台的后续所有任务**,不影响另一个平台
5. 全部完成或失败后,弹出结果 Modal 显示最终状态(成功数 / 失败数) 7. 全部完成或失败后,弹出结果 Modal 显示最终状态(成功数 / 失败数)