Add tRPC for publish progress subscriptions
This commit is contained in:
parent
6b53906d08
commit
d7317b4b04
@ -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` — 目录索引(纯链接)
|
||||||
|
|||||||
@ -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 显示最终状态(成功数 / 失败数)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user