feat: add media access analytics

This commit is contained in:
Codex
2026-06-29 20:30:00 +08:00
parent e0393126a1
commit 38db867d58
11 changed files with 749 additions and 5 deletions

View File

@@ -269,6 +269,7 @@ tenant:<tenantId>:theme
| 租户勋章 | `GET/PUT /api/tenant-admin/badges``GET/POST /api/tenant-admin/badge-grants` |
| 公共题库采纳/同步 | `GET /api/tenant-content/public-question-banks``POST /api/tenant-content/public-question-banks/adopt``POST /api/tenant-content/public-question-banks/sync``GET /api/tenant-content/public-question-banks/conflicts?adoptionId=...``POST /api/tenant-content/public-question-banks/conflicts/resolve``POST /api/tenant-content/public-question-banks/conflicts/resolve-batch` |
| 题库导出 | `POST /api/tenant-content/exports/questions``GET /api/tenant-content/exports/jobs` |
| 资料/视频运营审计 | `GET /api/tenant-content/media-analytics/summary``asset-events``video-events` |
## 资料、PDF 和视频资源契约
@@ -329,6 +330,25 @@ GET /api/tenant-content/assets/access-events?assetId=<assetId>&limit=100
访问事件 `metadata.watermark.traceId` 可用于后台按截图上的追踪码回查访问记录。视频播放不走 `content_asset_access_events`,但 `POST /api/videos/play` 返回同样的 `watermark` 对象,后端会把 traceId 写入 `video_play_events.metadata.watermark.traceId`
租户后台运营报表:
```text
GET /api/tenant-content/media-analytics/summary?timeRange=30d&limit=10
GET /api/tenant-content/media-analytics/asset-events?traceId=7D2A9C3E1B0F&limit=100
GET /api/tenant-content/media-analytics/video-events?videoId=<videoId>&limit=100
```
这些接口用于租户后台资料/视频运营面板,权限为 `content:analytics:read`,租户 owner/admin/operator 默认可访问。普通教师默认不可见,除非绑定了带该权限的角色模板。
前端展示建议:
- `summary.assetAccess` 展示下载、预览、拒绝访问、水印事件数。
- `summary.videoPlay` 展示视频播放、SVIP 播放、次数播放、消耗次数。
- `assetTop` / `videoTop` 做热门资料和热门视频排行。
- `daily` 做资料访问和视频播放趋势。
- 搜索框支持输入截图上的 `traceId`,同时请求 `asset-events``video-events` 回查用户、时间、IP、UA、资源或视频。
- 这些接口不会返回签名 URL、播放 token、云厂商密钥或支付密钥前端不要把它们当成下载/播放接口。
## 练习访问控制契约
前端不要先拉完整题目列表再自行判断免费额度。用户点击顺序刷题、随机刷题、全真模拟时,统一调用 `POST /api/learning/practice-sessions`,后端会根据 `content_entries.accessRules``content_nodes.accessRules``question_collections.accessRules``practice_blueprints.accessRules` 和当前用户权益决定最终题目快照。