feat: add public bank sync failure ops

This commit is contained in:
Codex
2026-06-30 09:12:45 +08:00
parent d1cb341351
commit 959e612211
14 changed files with 484 additions and 44 deletions

View File

@@ -1724,6 +1724,16 @@ GET /api/tenant-content/notifications
POST /api/tenant-content/notifications/status
```
平台公共题库运营台使用:
```text
GET /api/platform-admin/question-bank-sync-status
GET /api/platform-admin/question-bank-sync-status?tenantId=<tenantId>&syncStatus=failed&onlyOpenIssues=true
GET /api/platform-admin/question-bank-sync-status?sourceQuestionBankId=<questionBankId>&limit=100
```
该接口需要 `platform:question_bank:ops` 权限。它用于平台超级管理员查看各租户采纳公共题库后的同步状态、失败/冲突通知数量和 worker 最近执行摘要;不返回题目正文、答案、解析或对象存储签名。
采纳请求:
```json
@@ -1795,11 +1805,12 @@ POST /api/tenant-content/notifications/status
- 单条冲突处理调用 `POST /api/tenant-content/public-question-banks/conflicts/resolve`body 为 `{ "adoptionId": "...", "sourceQuestionId": "...", "resolution": "accept_platform | keep_local" }``accept_platform` 会把租户副本写成平台当前版本并生成新题目版本;`keep_local` 会记录本地保留决策,同一平台 hash 和本地 hash 后续同步不再反复提示。两种操作都会写审计日志。
- 批量冲突处理调用 `POST /api/tenant-content/public-question-banks/conflicts/resolve-batch`body 为 `{ "adoptionId": "...", "sourceQuestionIds": ["..."], "resolution": "accept_platform | keep_local", "limit": 50 }`。后端最多处理 100 条,仍会重新校验租户授权、锁定采纳记录和目标题,逐条写审计;前端只提交当前冲突列表中明确展示给操作者的 source id。
- 同步产生新增/更新时,后端会写入 `public_question_bank_synced` 通知;同步产生冲突时,会写入 `public_question_bank_conflict` 通知。通知只包含同步摘要、题库 ID、题目 hash 和操作入口,不保存题目答案或解析。
- 租户后台可调用 `GET /api/tenant-content/notifications?notificationType=public_question_bank_conflict&status=unread&limit=20` 展示待处理同步消息;也可带 `adoptionId` 查看某个采纳记录的通知
- worker 自动同步因授权失效、目标题库缺失等原因失败时,后端会写入 `public_question_bank_sync_failed` 通知,`severity=error`metadata 只包含 `errorCode/errorMessage/workerId/failedAt` 等脱敏运维摘要。后续同步恢复成功后,后端会自动把未 dismissed 的失败通知标记为 `resolved`
- 租户后台可调用 `GET /api/tenant-content/notifications?notificationType=public_question_bank_conflict&status=unread&limit=20` 展示待处理同步消息;也可用 `public_question_bank_sync_failed` 展示自动同步失败消息,并带 `adoptionId` 查看某个采纳记录的通知。
- 通知状态更新调用 `POST /api/tenant-content/notifications/status`body 为 `{ "notificationIds": ["..."], "status": "read | dismissed | resolved" }`。冲突被单条或批量全部处理后,后端会自动把相关冲突通知标记为 `resolved`
- `QUESTION_BANK_GRANT_NOT_AVAILABLE`:说明 SaaS 套餐/授权已失效,提示联系平台或升级套餐。
- `QUESTION_BANK_ADOPTION_NOT_FOUND`:说明不是当前租户的采纳记录或记录已归档,前端不要跨租户重试。
- 当前租户后台可以提供手动“同步平台更新”按钮,并展示 worker 自动同步后的通知、冲突查询结果、单条处理和批量处理按钮。后续继续补更完整运营消息、失败告警和生产定时调度
- 当前租户后台可以提供手动“同步平台更新”按钮,并展示 worker 自动同步后的通知、失败消息、冲突查询结果、单条处理和批量处理按钮。平台后台可用 `question-bank-sync-status` 做跨租户运营看板优先展示失败、pending 和开放冲突
## 登录对接