forked from xiongyuxing/tiku-backend.net
feat: add student video and profile experience
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
method,path,status,legacy_operation_id,legacy_summary,target_operation_id,target_summary
|
||||
GET,/api/ai/school-recommendations,legacy_only,AiController_list,查询院校推荐报告,,
|
||||
GET,/api/ai/school-recommendations/detail,legacy_only,AiController_detail,获取院校推荐报告详情,,
|
||||
GET,/api/ai/school-recommendations/export,legacy_only,AiController_exportReport,导出院校推荐报告,,
|
||||
POST,/api/ai/school-recommendations/generate,legacy_only,AiController_generate,生成院校推荐报告,,
|
||||
GET,/api/ai/school-recommendations,legacy_only,AiController_list,查询院校推荐报告,,AI 延后到 Semantic Kernel + 租户自带 API Key 独立阶段
|
||||
GET,/api/ai/school-recommendations/detail,legacy_only,AiController_detail,获取院校推荐报告详情,,AI 延后到 Semantic Kernel + 租户自带 API Key 独立阶段
|
||||
GET,/api/ai/school-recommendations/export,legacy_only,AiController_exportReport,导出院校推荐报告,,AI 延后到 Semantic Kernel + 租户自带 API Key 独立阶段
|
||||
POST,/api/ai/school-recommendations/generate,legacy_only,AiController_generate,生成院校推荐报告,,AI 延后到 Semantic Kernel + 租户自带 API Key 独立阶段
|
||||
GET,/api/assets/{assetId}/download,target_only,,,,获取资源下载地址
|
||||
GET,/api/assets/{assetId}/preview,target_only,,,,获取资源预览地址
|
||||
POST,/api/auth/login/password,target_only,,,,手机号密码登录
|
||||
@@ -181,22 +181,22 @@ POST,/api/points/exchange-orders,target_only,,,,创建积分兑换订单
|
||||
GET,/api/points/summary,target_only,,,,查询当前用户积分摘要
|
||||
GET,/api/points/tasks,target_only,,,,查询当前可领取积分任务
|
||||
POST,/api/points/tasks/claim,target_only,,,,领取积分任务奖励
|
||||
GET,/api/profile/activity-tasks,legacy_only,ProfileController_tasks,查询积分活动任务,,
|
||||
POST,/api/profile/activity-tasks/claim,legacy_only,ProfileController_claimTask,领取活动任务奖励,,
|
||||
GET,/api/profile/activity-tasks,legacy_only,ProfileController_tasks,查询积分活动任务,,由 /api/points/tasks 替代
|
||||
POST,/api/profile/activity-tasks/claim,legacy_only,ProfileController_claimTask,领取活动任务奖励,,由 /api/points/tasks/claim 替代
|
||||
GET,/api/profile/badges,exact_match,ProfileController_badges,查询徽章列表,,查询徽章列表
|
||||
POST,/api/profile/check-in,legacy_only,ProfileController_checkIn,每日签到,,
|
||||
POST,/api/profile/check-in,exact_match,ProfileController_checkIn,每日签到,,每日签到
|
||||
GET,/api/profile/exam-countdowns,exact_match,ProfileController_countdowns,查询考试倒计时,,查询考试倒计时
|
||||
GET,/api/profile/exchange-items,legacy_only,ProfileController_exchangeItems,查询积分兑换商品,,
|
||||
POST,/api/profile/exchange-items/redeem,legacy_only,ProfileController_redeem,兑换积分商品,,
|
||||
GET,/api/profile/exchange-items,legacy_only,ProfileController_exchangeItems,查询积分兑换商品,,由 /api/points/exchange-items 替代
|
||||
POST,/api/profile/exchange-items/redeem,legacy_only,ProfileController_redeem,兑换积分商品,,由 /api/points/exchange-orders 替代
|
||||
GET,/api/profile/feedbacks,exact_match,ProfileController_feedbacks,查询反馈记录,,查询反馈记录
|
||||
POST,/api/profile/feedbacks,exact_match,ProfileController_submitFeedback,提交意见反馈,,提交意见反馈
|
||||
GET,/api/profile/me,exact_match,ProfileController_me,获取当前学生资料,,获取当前学生资料
|
||||
PATCH,/api/profile/me,exact_match,ProfileController_updateMe,更新当前学生资料,,更新当前学生资料
|
||||
GET,/api/profile/notifications,exact_match,ProfileController_notificationList,查询用户通知,,查询用户通知
|
||||
POST,/api/profile/notifications/status,exact_match,ProfileController_notificationStatus,更新通知状态,,更新通知状态
|
||||
GET,/api/profile/score-events,legacy_only,ProfileController_scoreEvents,查询积分流水,,
|
||||
GET,/api/questions/videos,legacy_only,QuestionVideoController_list,查询单道题目的解析视频,,
|
||||
POST,/api/questions/videos/batch,legacy_only,QuestionVideoController_batch,批量查询题目解析视频,,
|
||||
GET,/api/profile/score-events,exact_match,ProfileController_scoreEvents,查询积分流水,,查询当前用户积分流水
|
||||
GET,/api/questions/videos,exact_match,QuestionVideoController_list,查询单道题目的解析视频,,查询单道题目的解析视频
|
||||
POST,/api/questions/videos/batch,exact_match,QuestionVideoController_batch,批量查询题目解析视频,,批量查询题目解析视频
|
||||
POST,/api/referral/bind,exact_match,ReferralPublicController_bind,绑定当前用户的推荐归属,,绑定当前用户推荐归属
|
||||
GET,/api/referral/conversion-report,exact_match,ReferralManagementController_conversion,查询推荐转化与佣金报告,,查询推荐转化报告
|
||||
POST,/api/referral/invite-code,exact_match,ReferralPublicController_invite,生成或查询当前成员邀请码,,生成或查询当前成员邀请码
|
||||
@@ -346,24 +346,24 @@ PUT,/api/tenant-content/handbook-subjects,exact_match,HandbookManagementControll
|
||||
GET,/api/tenant-content/import-jobs,target_only,,,,查询内容导入任务
|
||||
GET,/api/tenant-content/import-jobs/{jobId},target_only,,,,查询内容导入任务详情
|
||||
GET,/api/tenant-content/imports,legacy_only,TenantContentImportsController_jobs,查询内容导入任务,,
|
||||
GET,/api/tenant-content/imports/detail,legacy_only,TenantContentImportsController_detail,查询内容导入任务详情,,
|
||||
GET,/api/tenant-content/imports/detail,exact_match,TenantContentImportsController_detail,查询内容导入任务详情,,查询内容导入任务详情
|
||||
GET,/api/tenant-content/imports/field-mapping,exact_match,TenantContentImportsController_fieldMapping,查询导入字段映射说明,,查询导入字段映射
|
||||
POST,/api/tenant-content/imports/handbook,legacy_only,TenantContentImportsController_importHandbook,执行或排队知识手册导入,,
|
||||
POST,/api/tenant-content/imports/handbook,legacy_only,TenantContentImportsController_importHandbook,执行或排队知识手册导入,,由 /api/tenant-content/imports/{importType} 替代
|
||||
GET,/api/tenant-content/imports/issues,exact_match,TenantContentImportsController_issues,查询内容导入问题明细,,查询内容导入问题明细
|
||||
GET,/api/tenant-content/imports/post-check,exact_match,TenantContentImportsController_postCheckStatus,查询内容导入后检查状态,,查询内容导入后检查状态
|
||||
POST,/api/tenant-content/imports/post-check,exact_match,TenantContentImportsController_runPostCheck,执行内容导入后完整性检查,,执行内容导入后完整性检查
|
||||
POST,/api/tenant-content/imports/preview/handbook,legacy_only,TenantContentImportsController_previewHandbook,预览知识手册导入数据,,
|
||||
POST,/api/tenant-content/imports/preview/questions,legacy_only,TenantContentImportsController_previewQuestions,预览题目导入数据,,
|
||||
POST,/api/tenant-content/imports/preview/scoreline,legacy_only,TenantContentImportsController_previewScoreline,预览分数线导入数据,,
|
||||
POST,/api/tenant-content/imports/preview/videos,legacy_only,TenantContentImportsController_previewVideos,预览视频解析导入数据,,
|
||||
POST,/api/tenant-content/imports/preview/vocabulary,legacy_only,TenantContentImportsController_previewVocabulary,预览词汇导入数据,,
|
||||
POST,/api/tenant-content/imports/preview/handbook,legacy_only,TenantContentImportsController_previewHandbook,预览知识手册导入数据,,由 /api/tenant-content/imports/preview/{importType} 替代
|
||||
POST,/api/tenant-content/imports/preview/questions,legacy_only,TenantContentImportsController_previewQuestions,预览题目导入数据,,由 /api/tenant-content/imports/preview/{importType} 替代
|
||||
POST,/api/tenant-content/imports/preview/scoreline,legacy_only,TenantContentImportsController_previewScoreline,预览分数线导入数据,,由 /api/tenant-content/imports/preview/{importType} 替代
|
||||
POST,/api/tenant-content/imports/preview/videos,legacy_only,TenantContentImportsController_previewVideos,预览视频解析导入数据,,由 /api/tenant-content/imports/preview/{importType} 替代
|
||||
POST,/api/tenant-content/imports/preview/vocabulary,legacy_only,TenantContentImportsController_previewVocabulary,预览词汇导入数据,,由 /api/tenant-content/imports/preview/{importType} 替代
|
||||
POST,/api/tenant-content/imports/preview/{importType},target_only,,,,预览内容导入数据
|
||||
POST,/api/tenant-content/imports/questions,legacy_only,TenantContentImportsController_importQuestions,执行或排队题目导入,,
|
||||
POST,/api/tenant-content/imports/scoreline,legacy_only,TenantContentImportsController_importScoreline,执行或排队分数线导入,,
|
||||
POST,/api/tenant-content/imports/questions,legacy_only,TenantContentImportsController_importQuestions,执行或排队题目导入,,由 /api/tenant-content/imports/{importType} 替代
|
||||
POST,/api/tenant-content/imports/scoreline,legacy_only,TenantContentImportsController_importScoreline,执行或排队分数线导入,,由 /api/tenant-content/imports/{importType} 替代
|
||||
GET,/api/tenant-content/imports/templates,exact_match,TenantContentImportsController_template,获取内容导入模板,,获取内容导入模板
|
||||
POST,/api/tenant-content/imports/videos,legacy_only,TenantContentImportsController_importVideos,执行或排队视频解析导入,,
|
||||
POST,/api/tenant-content/imports/vocabulary,legacy_only,TenantContentImportsController_importVocabulary,执行或排队词汇导入,,
|
||||
POST,/api/tenant-content/imports/{importType},target_only,,,,执行同步内容导入
|
||||
POST,/api/tenant-content/imports/videos,legacy_only,TenantContentImportsController_importVideos,执行或排队视频解析导入,,由 /api/tenant-content/imports/{importType} 替代
|
||||
POST,/api/tenant-content/imports/vocabulary,legacy_only,TenantContentImportsController_importVocabulary,执行或排队词汇导入,,由 /api/tenant-content/imports/{importType} 替代
|
||||
POST,/api/tenant-content/imports/{importType},target_only,,,,执行同步或异步内容导入
|
||||
GET,/api/tenant-content/media-analytics/asset-events,legacy_only,TenantContentAssetsController_assetAnalytics,查询媒体资产访问明细,,
|
||||
GET,/api/tenant-content/media-analytics/summary,legacy_only,TenantContentAssetsController_summary,查询媒体访问分析汇总,,
|
||||
GET,/api/tenant-content/media-analytics/video-events,legacy_only,TenantContentAssetsController_videoAnalytics,查询媒体视频播放明细,,
|
||||
@@ -409,7 +409,7 @@ PUT,/api/tenant-content/vocabulary-words,exact_match,VocabularyManagementControl
|
||||
GET,/api/tenant/current-public,target_only,,,,获取公开租户配置
|
||||
GET,/api/tenant/resolve,exact_match,TenantController_resolve,解析当前租户,,解析当前租户
|
||||
GET,/api/tenants/current,target_only,,,,
|
||||
POST,/api/videos/play,legacy_only,VideoController_play,申请视频播放地址,,
|
||||
POST,/api/videos/progress,legacy_only,VideoController_progress,上报视频播放进度,,
|
||||
GET,/api/videos/search,legacy_only,VideoController_search,搜索通用解析视频,,
|
||||
POST,/api/videos/play,exact_match,VideoController_play,申请视频播放地址,,申请视频播放地址
|
||||
POST,/api/videos/progress,exact_match,VideoController_progress,上报视频播放进度,,上报视频播放进度
|
||||
GET,/api/videos/search,exact_match,VideoController_search,搜索通用解析视频,,搜索通用解析视频
|
||||
GET,/health,legacy_only,HealthController_check,检查 API 与数据库健康状态,,
|
||||
|
||||
|
@@ -0,0 +1,75 @@
|
||||
# 第七阶段:学生端体验与内容消费闭环
|
||||
|
||||
第七阶段只补齐学生端和内容消费闭环,不实现 AI 推荐报告。AI 后续单独进入 Semantic Kernel 阶段,租户自己的模型 API Key 通过 `TenantExternalProvider` + `TenantSecret` 配置,业务 DTO、Controller 和普通 Service 不直接接触密钥或 `Microsoft.SemanticKernel` namespace。
|
||||
|
||||
## 已实现范围
|
||||
|
||||
### 视频消费
|
||||
|
||||
新增学生端视频接口:
|
||||
|
||||
- `GET /api/videos/search`
|
||||
- `POST /api/videos/play`
|
||||
- `POST /api/videos/progress`
|
||||
- `GET /api/questions/videos`
|
||||
- `POST /api/questions/videos/batch`
|
||||
|
||||
设计边界:
|
||||
|
||||
- 播放接口只返回当前租户可访问的视频播放信息。
|
||||
- API 不暴露 OSS bucket、真实 object key 或 provider 细节。
|
||||
- 公共题关联视频和租户私题关联视频都必须先通过当前租户可见性校验。
|
||||
- 播放行为写入 `ContentAssetAccessEvent`。
|
||||
- 播放进度写入 `VideoPlaybackProgress`,同一租户、用户、视频、题目维度幂等更新。
|
||||
|
||||
### Profile 与积分
|
||||
|
||||
新增学生侧体验接口:
|
||||
|
||||
- `POST /api/profile/check-in`
|
||||
- `GET /api/profile/score-events`
|
||||
|
||||
设计边界:
|
||||
|
||||
- 签到复用积分任务与积分流水,不另起一套奖励体系。
|
||||
- 同一用户、同一租户、同一天只能成功签到一次。
|
||||
- 积分任务领取和积分兑换会同步产生 `UserScoreEvent`,学生端统一从 `score-events` 查询积分变化。
|
||||
- 旧 `/api/profile/activity-tasks`、`/api/profile/exchange-items` 不恢复为主接口;对应能力由 `/api/points/tasks`、`/api/points/exchange-items`、`/api/points/exchange-orders` 替代。
|
||||
|
||||
### 内容导入异步化
|
||||
|
||||
保留统一导入入口:
|
||||
|
||||
- `POST /api/tenant-content/imports/preview/{importType}`
|
||||
- `POST /api/tenant-content/imports/{importType}`
|
||||
- `GET /api/tenant-content/imports/detail`
|
||||
|
||||
设计边界:
|
||||
|
||||
- `questions`、`vocabulary`、`handbook`、`scoreline`、`videos` 这些旧专用导入语义统一映射为 `importType`。
|
||||
- 小批量可以同步执行。
|
||||
- 请求显式 `async=true` 或大批量导入时创建 `content_import` 后台任务。
|
||||
- Worker 通过 `ITenantExecutionScope` 初始化租户 scope 后执行导入,不在请求线程内跑重任务。
|
||||
- 导入结果写回 import job,可通过 detail 接口查询。
|
||||
|
||||
## AI 延后约定
|
||||
|
||||
本阶段不新增 `/api/ai/**`,不引入 `Microsoft.SemanticKernel` NuGet 包,也不实现真实模型调用、prompt、RAG、导出或推荐算法。
|
||||
|
||||
后续 AI 阶段默认方向:
|
||||
|
||||
- AI Provider 使用 `TenantExternalProvider(capability=ai)`。
|
||||
- 租户 API Key 存入 `TenantSecret`,通过 `SecretRef` 关联。
|
||||
- Semantic Kernel SDK 只允许出现在 Infrastructure AI provider 实现中。
|
||||
- Application 层只暴露 `IAiRecommendationProvider`、`IAiKernelFactory` 等业务抽象。
|
||||
- Controller 和业务 Service 不直接读取 API Key,不直接引用 SK namespace。
|
||||
|
||||
## 验收重点
|
||||
|
||||
- 租户 A 不能播放租户 B 视频。
|
||||
- 公共题关联视频和租户私题关联视频都按当前租户权限返回。
|
||||
- 播放进度重复上报幂等更新。
|
||||
- 每日签到同一天只能成功一次。
|
||||
- 签到、积分任务和兑换产生可查询的积分流水。
|
||||
- 异步导入创建 `content_import` job,Worker 成功写入结果。
|
||||
- 本阶段不得新增 `Microsoft.SemanticKernel` 引用。
|
||||
Reference in New Issue
Block a user