forked from wangziqi/gongxue-base
feat: add import post-check templates
This commit is contained in:
@@ -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 展示和复检结果面板。
|
||||
- 后续按大租户数据量补导入任务分页预览、抽样校验和导入性能压测。
|
||||
|
||||
Reference in New Issue
Block a user