feat: add import post-check templates

This commit is contained in:
Codex
2026-06-29 08:16:48 +08:00
parent eee21f6eed
commit 69f8e28d4e
15 changed files with 954 additions and 28 deletions

View File

@@ -41,6 +41,10 @@ POST /api/tenant-content/imports/videos
GET /api/tenant-content/imports
GET /api/tenant-content/imports/issues
GET /api/tenant-content/imports/field-mapping
GET /api/tenant-content/imports/templates
POST /api/tenant-content/imports/post-check
GET /api/tenant-content/imports/post-check
```
所有导入都会写入:
@@ -93,6 +97,65 @@ npm --workspace @tiku-saas/worker run imports:once
前端提交异步导入后不要重复同步执行同一 job只需要轮询 `GET /api/tenant-content/imports` 并用 `GET /api/tenant-content/imports/issues` 展示问题行。worker 会按 `attempt_count/max_attempts` 记录重试,失败时写入 `errorMessage` 和审计日志。
## 模板、字段映射和导入后复检
租户后台前端不要把导入字段写死在页面里。导入页初始化时先读取字段映射,下载模板时调用模板接口:
```text
GET /api/tenant-content/imports/field-mapping?importType=questions
GET /api/tenant-content/imports/templates?importType=questions&format=csv
```
`importType` 支持:
```text
questions | vocabulary | handbook | scoreline | videos
```
`templates` 返回:
```json
{
"item": {
"importType": "questions",
"format": "csv",
"fileName": "questions-import-template.csv",
"mimeType": "text/csv; charset=utf-8",
"contentBase64": "...",
"fields": []
}
}
```
前端可用 `contentBase64` 生成下载文件,或用 `contentPreview` 做在线预览。`fields` 包含规范字段、中文别名、是否必填和示例,适合做字段映射 UI。
导入完成后,租户后台应主动触发复检:
```json
POST /api/tenant-content/imports/post-check
{
"jobId": "uuid"
}
```
复检会确认:
- job 行数、有效行、已处理行是否一致。
- 处理成功的 item 是否都有 `target_id`
- 题目是否存在当前版本,且已绑定目标集合。
- 单词单元是否存在且有单词。
- 知识手册是否存在章节/条目。
- 分数线字段、院校、专业、记录是否都落到对应表。
- 视频是否存在题目绑定。
复检结果会写入 `content_import_jobs.summary.importPostCheck`,也可以通过:
```text
GET /api/tenant-content/imports/post-check?jobId=<jobId>
```
读取。异步导入未完成时触发复检会返回 `IMPORT_JOB_NOT_COMPLETED`
推荐 CSV/Excel 表头:
| 类型 | 常用表头 |
@@ -315,5 +378,6 @@ npm --workspace @tiku-saas/worker run imports:once
## 下一步
- 增加导入后校验/复检,确认导入行数、目标表记录、题目集合绑定和视频绑定一致
- 增加导入模板下载接口和后台可视化字段映射器
- 用真实 PocketBase 全量导出数据做多轮 dry-run并把复检报告作为上线验收材料
- 前端补可视化字段映射、模板下载按钮、导入 job 轮询、逐行 issue 展示和复检结果面板
- 后续按大租户数据量补导入任务分页预览、抽样校验和导入性能压测。