feature_list_phase2.json 12 KB

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