feat: 素材处理管线——自动处理、审核流程、6状态机
This commit is contained in:
@@ -37,7 +37,7 @@ SQLite + bun:sqlite + Drizzle ORM。
|
||||
| `providers.ts` | createProvider、getProvider、listProviders、listProviderOptions、updateProvider、deleteProvider |
|
||||
| `models.ts` | createModel、getModel、listModels、getModelWithProvider、getModelsByProviderId、updateModel、deleteModel |
|
||||
| `conversations.ts` | createConversation、getConversation、listConversations、updateConversation、updateConversationTimestamp、deleteConversation、createMessage、createMessages、listMessages |
|
||||
| `materials.ts` | createMaterial、getMaterial、listMaterials、deleteMaterial |
|
||||
| `materials.ts` | createMaterial、getMaterial、listMaterials、deleteMaterial、approveMaterial、discardMaterial、retryMaterial |
|
||||
|
||||
输入输出类型来自 `src/shared/api.ts`。
|
||||
|
||||
@@ -66,14 +66,31 @@ SQLite + bun:sqlite + Drizzle ORM。
|
||||
|
||||
## 素材 API
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
| ------ | ---------------------------------- | ---------------------- |
|
||||
| GET | `/api/projects/:id/materials` | 列出项目下素材(分页) |
|
||||
| POST | `/api/projects/:id/materials` | 创建素材 |
|
||||
| GET | `/api/projects/:id/materials/:mid` | 获取素材详情 |
|
||||
| DELETE | `/api/projects/:id/materials/:mid` | 删除素材(软删除) |
|
||||
| 方法 | 路径 | 说明 |
|
||||
| ------ | ------------------------------------------ | ------------------------------- |
|
||||
| GET | `/api/projects/:id/materials` | 列出项目下素材(分页+状态筛选) |
|
||||
| POST | `/api/projects/:id/materials` | 创建素材 |
|
||||
| GET | `/api/projects/:id/materials/:mid` | 获取素材详情 |
|
||||
| DELETE | `/api/projects/:id/materials/:mid` | 删除素材(软删除) |
|
||||
| POST | `/api/projects/:id/materials/:mid/approve` | 审核通过(需 review 状态) |
|
||||
| POST | `/api/projects/:id/materials/:mid/discard` | 审核放弃(需 review 状态) |
|
||||
| POST | `/api/projects/:id/materials/:mid/retry` | 重试处理(需 failed 状态) |
|
||||
|
||||
校验:description 必填非空,associatedDate 必填 YYYY-MM-DD,项目须存在且 active 且未删除,素材归属校验不匹配返回 403。
|
||||
素材状态流转:`pending → processing → review → approved/discarded`,失败分支 `processing → failed`,用户重试 `failed → pending`。共 6 种状态:`pending`、`processing`、`review`、`approved`、`discarded`、`failed`。
|
||||
|
||||
素材类型:`general`(通用)和 `meeting`(会议),创建时可选,默认 `general`。
|
||||
|
||||
校验:description 必填非空,associatedDate 必填 YYYY-MM-DD,项目须存在且 active 且未删除,素材归属校验不匹配返回 403。processing 状态禁止删除(409)。approve/discard 仅限 review 状态(409),retry 仅限 failed 状态(409)。
|
||||
|
||||
## 素材处理引擎
|
||||
|
||||
`src/server/processing/`:
|
||||
|
||||
- `processor.ts`:`MaterialProcessor` 类 — 后台定时扫描 pending 素材,按 FIFO 顺序处理(每 5 秒扫描一次),每次处理最多重试 3 次,成功后 status=review 并设置 processedContent,全部失败后 status=failed。启动时自动恢复所有 processing 状态的素材为 pending(`recoverStuckMaterials`)。
|
||||
- `templates/`:处理模板目录 — `general.ts`(通用模板)和 `meeting.ts`(会议模板),当前为占位实现(原样回显 description)。`index.ts` 导出 `ProcessingTemplate` 类型和 `getTemplate(type)` 映射函数。
|
||||
- `index.ts`:`startMaterialProcessor(db, logger)` — 工厂函数,创建并启动处理器实例。
|
||||
|
||||
处理器在 `bootstrap.ts` 中启动,shutdown 时先停止处理器再关闭数据库。
|
||||
|
||||
## 聊天 API
|
||||
|
||||
|
||||
Reference in New Issue
Block a user