feature_list_phase2.json 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. {
  2. "project_name": "AI有声书生成工具-第二期",
  3. "base_config": {
  4. "backend_port": 8000,
  5. "frontend_port": 8080,
  6. "db_host": "localhost",
  7. "db_port": 3306
  8. },
  9. "features": [
  10. {
  11. "id": 1,
  12. "description": "播放记录功能 - 记录播放进度,支持续播",
  13. "priority": "P1",
  14. "phase": "第一阶段",
  15. "backend_test_steps": [
  16. "1. curl -X GET http://localhost:8000/api/player/progress - 验证获取播放进度接口返回 200",
  17. "2. curl -X POST http://localhost:8000/api/player/progress -d '{\"audioId\":\"test\",\"progress\":30}' - 验证保存进度接口返回 200",
  18. "3. curl -X GET http://localhost:8000/api/player/progress - 验证保存后能正确获取进度"
  19. ],
  20. "frontend_test_steps": [
  21. "1. 打开首页,播放一个音频",
  22. "2. 暂停播放,查看是否显示当前进度",
  23. "3. 退出页面后重新进入",
  24. "4. 验证是否显示'继续播放'按钮并正确续播到30秒位置"
  25. ],
  26. "status": "db-checking",
  27. "passes": false,
  28. "note": "等待MySQL服务启动,代码已编写完成"
  29. },
  30. {
  31. "id": 2,
  32. "description": "收藏功能 - 收藏喜欢的音频",
  33. "priority": "P1",
  34. "phase": "第一阶段",
  35. "backend_test_steps": [
  36. "1. curl -X GET http://localhost:8000/api/favorites - 验证获取收藏列表接口返回 200",
  37. "2. curl -X POST http://localhost:8000/api/favorites -d '{\"audioId\":\"test-audio-1\"}' - 验证添加收藏接口返回 200",
  38. "3. curl -X GET http://localhost:8000/api/favorites - 验证收藏列表包含新添加的音频",
  39. "4. curl -X DELETE http://localhost:8000/api/favorites/test-audio-1 - 验证取消收藏接口返回 200"
  40. ],
  41. "frontend_test_steps": [
  42. "1. 打开播放器页面播放音频",
  43. "2. 点击收藏按钮(心形图标)",
  44. "3. 验证按钮变为实心红色",
  45. "4. 进入收藏页面,验证已收藏的音频显示在列表中",
  46. "5. 点击取消收藏,验证列表中该音频消失"
  47. ],
  48. "status": "init",
  49. "passes": false
  50. },
  51. {
  52. "id": 3,
  53. "description": "定时关闭功能 - 睡眠定时、15/30/60分钟自动停止",
  54. "priority": "P1",
  55. "phase": "第一阶段",
  56. "backend_test_steps": [],
  57. "frontend_test_steps": [
  58. "1. 打开播放器页面开始播放",
  59. "2. 点击定时按钮打开定时设置",
  60. "3. 选择15分钟定时",
  61. "4. 验证显示倒计时(如14:59)",
  62. "5. 等待约1分钟后刷新页面",
  63. "6. 验证倒计时正确递减",
  64. "7. 等待定时结束,验证播放自动暂停"
  65. ],
  66. "status": "init",
  67. "passes": false
  68. },
  69. {
  70. "id": 4,
  71. "description": "播放速度记忆 - 0.5x-2x速听,记忆用户偏好",
  72. "priority": "P1",
  73. "phase": "第一阶段",
  74. "backend_test_steps": [
  75. "1. curl -X GET http://localhost:8000/api/user/preferences - 验证获取用户偏好接口返回 200",
  76. "2. curl -X PUT http://localhost:8000/api/user/preferences -d '{\"playSpeed\":1.5}' - 验证更新偏好接口返回 200",
  77. "3. curl -X GET http://localhost:8000/api/user/preferences - 验证playSpeed为1.5"
  78. ],
  79. "frontend_test_steps": [
  80. "1. 打开播放器页面",
  81. "2. 点击倍速按钮选择1.5x",
  82. "3. 验证播放速度变为1.5x",
  83. "4. 退出页面",
  84. "5. 重新进入播放器页面",
  85. "6. 验证倍速按钮显示1.5x且播放速度为1.5x"
  86. ],
  87. "status": "init",
  88. "passes": false
  89. },
  90. {
  91. "id": 5,
  92. "description": "分享功能 - 分享给微信好友/朋友圈",
  93. "priority": "P1",
  94. "phase": "第一阶段",
  95. "backend_test_steps": [
  96. "1. curl -X POST http://localhost:8000/api/share -d '{\"audioId\":\"test-audio-1\"}' - 验证生成分享链接接口返回 200"
  97. ],
  98. "frontend_test_steps": [
  99. "1. 打开播放器页面",
  100. "2. 点击分享按钮",
  101. "3. 验证弹出分享菜单(微信好友、朋友圈、复制链接)",
  102. "4. 选择'复制链接',验证剪贴板包含分享URL",
  103. "5. 点击微信好友,验证调用微信分享API"
  104. ],
  105. "status": "init",
  106. "passes": false
  107. },
  108. {
  109. "id": 6,
  110. "description": "加载优化 - 骨架屏、缓存优化",
  111. "priority": "P1",
  112. "phase": "贯穿全程",
  113. "backend_test_steps": [],
  114. "frontend_test_steps": [
  115. "1. 清除浏览器缓存",
  116. "2. 打开首页",
  117. "3. 验证显示骨架屏加载动画",
  118. "4. 验证内容加载后骨架屏消失",
  119. "5. 再次打开首页",
  120. "6. 验证第二次加载更快(使用缓存)"
  121. ],
  122. "status": "init",
  123. "passes": false
  124. },
  125. {
  126. "id": 7,
  127. "description": "全局搜索 - 搜索有声书标题、历史记录",
  128. "priority": "P1",
  129. "phase": "第二阶段",
  130. "backend_test_steps": [
  131. "1. curl -X GET 'http://localhost:8000/api/search?q=test' - 验证搜索接口返回 200",
  132. "2. curl -X GET 'http://localhost:8000/api/search?q=' - 验证空关键词返回历史记录",
  133. "3. curl -X GET 'http://localhost:8000/api/search?q=小说' - 验证中文搜索正常"
  134. ],
  135. "frontend_test_steps": [
  136. "1. 点击顶部搜索图标进入搜索页面",
  137. "2. 验证显示搜索历史和热门推荐",
  138. "3. 输入关键词'test'",
  139. "4. 点击搜索按钮",
  140. "5. 验证搜索结果列表显示匹配的内容",
  141. "6. 点击搜索结果",
  142. "7. 验证跳转到播放器页面"
  143. ],
  144. "status": "init",
  145. "passes": false
  146. },
  147. {
  148. "id": 8,
  149. "description": "内容分类 - 按类型筛选(故事/小说/新闻/学习)",
  150. "priority": "P2",
  151. "phase": "第二阶段",
  152. "backend_test_steps": [
  153. "1. curl -X GET http://localhost:8000/api/categories - 验证获取分类列表接口返回 200",
  154. "2. curl -X GET http://localhost:8000/api/categories/1 - 验证获取分类下音频接口返回 200"
  155. ],
  156. "frontend_test_steps": [
  157. "1. 在首页点击分类标签(如'小说')",
  158. "2. 验证内容列表刷新为该分类的内容",
  159. "3. 切换到其他分类(如'学习')",
  160. "4. 验证内容列表正确切换",
  161. "5. 点击'全部'标签",
  162. "6. 验证显示全部内容"
  163. ],
  164. "status": "init",
  165. "passes": false
  166. },
  167. {
  168. "id": 9,
  169. "description": "音质选择 - 高/标准音质切换",
  170. "priority": "P2",
  171. "phase": "第二阶段",
  172. "backend_test_steps": [
  173. "1. curl -X PUT http://localhost:8000/api/user/preferences -d '{\"quality\":\"high\"}' - 验证更新音质偏好返回 200",
  174. "2. curl -X GET http://localhost:8000/api/user/preferences - 验证quality为high"
  175. ],
  176. "frontend_test_steps": [
  177. "1. 打开播放器页面",
  178. "2. 打开音质设置",
  179. "3. 切换到高清音质",
  180. "4. 验证显示'高清'标识",
  181. "5. 退出页面重新进入",
  182. "6. 验证音质偏好保持为高清"
  183. ],
  184. "status": "init",
  185. "passes": false
  186. },
  187. {
  188. "id": 10,
  189. "description": "离线缓存 - 下载到本地离线听",
  190. "priority": "P2",
  191. "phase": "第二阶段",
  192. "backend_test_steps": [
  193. "1. curl -X GET http://localhost:8000/api/downloads - 验证获取下载列表接口返回 200"
  194. ],
  195. "frontend_test_steps": [
  196. "1. 在播放器页面点击下载按钮",
  197. "2. 验证显示下载进度",
  198. "3. 等待下载完成",
  199. "4. 进入'我的下载'页面",
  200. "5. 验证已下载的音频显示在列表中",
  201. "6. 开启飞行模式",
  202. "7. 点击离线音频播放",
  203. "8. 验证离线播放正常"
  204. ],
  205. "status": "init",
  206. "passes": false
  207. },
  208. {
  209. "id": 11,
  210. "description": "断点续传 - 大文件下载断点续传",
  211. "priority": "P2",
  212. "phase": "贯穿全程",
  213. "backend_test_steps": [
  214. "1. curl -X POST http://localhost:8000/api/downloads/check -d '{\"audioId\":\"test\",\"downloaded\":1024000}' - 验证断点查询返回正确信息"
  215. ],
  216. "frontend_test_steps": [
  217. "1. 开始下载一个大音频文件",
  218. "2. 在下载过程中关闭页面中断下载",
  219. "3. 重新进入下载页面",
  220. "4. 验证显示'继续下载'按钮",
  221. "5. 点击继续下载",
  222. "6. 验证从断点处继续下载"
  223. ],
  224. "status": "init",
  225. "passes": false
  226. },
  227. {
  228. "id": 12,
  229. "description": "多端数据同步 - 多端数据实时同步",
  230. "priority": "P2",
  231. "phase": "贯穿全程",
  232. "backend_test_steps": [
  233. "1. curl -X POST http://localhost:8000/api/favorites -d '{\"audioId\":\"sync-test\"}' - 添加收藏",
  234. "2. curl -X GET http://localhost:8000/api/favorites - 验证收藏添加成功",
  235. "3. curl -X PUT http://localhost:8000/api/player/progress -d '{\"audioId\":\"sync-test\",\"progress\":50}' - 更新播放进度"
  236. ],
  237. "frontend_test_steps": [
  238. "1. 在H5端收藏一个音频",
  239. "2. 在小程序端打开收藏页面",
  240. "3. 验证收藏列表包含刚添加的音频",
  241. "4. 在H5端播放并暂停在1分钟位置",
  242. "5. 在小程序端打开同一音频",
  243. "6. 验证显示从1分钟位置继续播放"
  244. ],
  245. "status": "init",
  246. "passes": false
  247. },
  248. {
  249. "id": 13,
  250. "description": "评论打分 - 对内容评论评分",
  251. "priority": "P2",
  252. "phase": "第三阶段",
  253. "backend_test_steps": [
  254. "1. curl -X GET http://localhost:8000/api/comments/test-audio-1 - 验证获取评论列表接口返回 200",
  255. "2. curl -X POST http://localhost:8000/api/comments -d '{\"audioId\":\"test-audio-1\",\"content\":\"很好听\",\"rating\":5}' - 验证发表评论接口返回 200",
  256. "3. curl -X GET http://localhost:8000/api/comments/test-audio-1 - 验证评论已添加"
  257. ],
  258. "frontend_test_steps": [
  259. "1. 打开播放器页面",
  260. "2. 点击评论按钮",
  261. "3. 输入评论内容'非常棒的声音'",
  262. "4. 选择5星评分",
  263. "5. 点击提交",
  264. "6. 验证评论显示在评论区",
  265. "7. 验证评分为5星"
  266. ],
  267. "status": "init",
  268. "passes": false
  269. },
  270. {
  271. "id": 14,
  272. "description": "消息通知 - 新内容推送、会员优惠",
  273. "priority": "P3",
  274. "phase": "第三阶段",
  275. "backend_test_steps": [
  276. "1. curl -X GET http://localhost:8000/api/notifications - 验证获取消息列表接口返回 200"
  277. ],
  278. "frontend_test_steps": [
  279. "1. 进入设置页面",
  280. "2. 找到消息通知开关",
  281. "3. 开启消息通知",
  282. "4. 验证弹出通知权限申请",
  283. "5. 授权后收到推送消息",
  284. "6. 点击消息通知",
  285. "7. 验证跳转到对应页面"
  286. ],
  287. "status": "init",
  288. "passes": false
  289. },
  290. {
  291. "id": 15,
  292. "description": "个性化主题 - 深色/浅色主题切换",
  293. "priority": "P3",
  294. "phase": "第三阶段",
  295. "backend_test_steps": [
  296. "1. curl -X PUT http://localhost:8000/api/user/preferences -d '{\"theme\":\"dark\"}' - 验证更新主题偏好返回 200",
  297. "2. curl -X GET http://localhost:8000/api/user/preferences - 验证theme为dark"
  298. ],
  299. "frontend_test_steps": [
  300. "1. 进入设置页面",
  301. "2. 点击主题设置",
  302. "3. 选择深色主题",
  303. "4. 验证页面切换为深色模式",
  304. "5. 退出页面重新进入",
  305. "6. 验证主题保持为深色"
  306. ],
  307. "status": "init",
  308. "passes": false
  309. }
  310. ]
  311. }