feat: 完善知识库批量导入与公共 API

- 新增批量异步导入、状态查询、失败重试与中断恢复链路

- 拆分知识库读取、导入、维护权限并完善 Public API 契约

- 补充数据库迁移、管理端交互、接口说明与相关测试
This commit is contained in:
2026-08-03 11:13:48 +08:00
parent 6df3dd9981
commit 51dbfd41b6
99 changed files with 16274 additions and 480 deletions

View File

@@ -0,0 +1,71 @@
import { describe, expect, it } from 'vitest';
import { resolveDocumentUploadResponse } from './document-import-upload-response';
const fallbackMessage = '文件上传失败';
describe('resolveDocumentUploadResponse', () => {
it.each([
['数字错误码', '{"errorCode":0}'],
['字符串错误码', '{"errorCode":"0"}'],
['兼容 code 字段', '{"code":0}'],
['带 BOM 的响应', '\uFEFF{"errorCode":0}'],
])('接受%s', (_name, responseText) => {
expect(
resolveDocumentUploadResponse({
fallbackMessage,
responseText,
status: 200,
}),
).toEqual({ success: true });
});
it('接受无响应体的 204 响应', () => {
expect(
resolveDocumentUploadResponse({
fallbackMessage,
responseText: '',
status: 204,
}),
).toEqual({ success: true });
});
it('返回业务错误消息', () => {
expect(
resolveDocumentUploadResponse({
fallbackMessage,
responseText: '{"errorCode":4091,"message":"文件已存在"}',
status: 409,
}),
).toEqual({
message: '文件已存在',
success: false,
});
});
it('拒绝成功状态下的未知响应格式', () => {
expect(
resolveDocumentUploadResponse({
fallbackMessage,
responseText: 'binary-response',
status: 200,
}),
).toEqual({
message: fallbackMessage,
success: false,
});
});
it('拒绝缺少成功错误码的空响应', () => {
expect(
resolveDocumentUploadResponse({
fallbackMessage,
responseText: '',
status: 200,
}),
).toEqual({
message: fallbackMessage,
success: false,
});
});
});