player.service.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.getPlayProgress = getPlayProgress;
  4. exports.savePlayProgress = savePlayProgress;
  5. exports.deletePlayRecord = deletePlayRecord;
  6. exports.updatePlayProgress = updatePlayProgress;
  7. exports.getSingleProgress = getSingleProgress;
  8. const client_1 = require("@prisma/client");
  9. const prisma = new client_1.PrismaClient();
  10. /**
  11. * 获取用户播放记录
  12. */
  13. async function getPlayProgress(userId, chapterId) {
  14. const userIdNum = parseInt(userId);
  15. const where = { userId: userIdNum };
  16. if (chapterId) {
  17. where.chapterId = chapterId;
  18. }
  19. const records = await prisma.playRecord.findMany({
  20. where,
  21. include: {
  22. chapter: {
  23. select: {
  24. id: true,
  25. number: true,
  26. title: true,
  27. audioUrl: true,
  28. audioDuration: true,
  29. },
  30. },
  31. },
  32. orderBy: { updatedAt: 'desc' },
  33. });
  34. return records;
  35. }
  36. /**
  37. * 保存播放进度
  38. */
  39. async function savePlayProgress(userId, chapterId, progress, duration) {
  40. const userIdNum = parseInt(userId);
  41. // 使用 upsert 语义:如果不存在则创建,存在则更新
  42. const existing = await prisma.playRecord.findUnique({
  43. where: {
  44. userId_chapterId: {
  45. userId: userIdNum,
  46. chapterId,
  47. },
  48. },
  49. });
  50. if (existing) {
  51. // 更新
  52. return await prisma.playRecord.update({
  53. where: {
  54. userId_chapterId: {
  55. userId: userIdNum,
  56. chapterId,
  57. },
  58. },
  59. data: {
  60. progress,
  61. duration,
  62. },
  63. });
  64. }
  65. else {
  66. // 创建
  67. return await prisma.playRecord.create({
  68. data: {
  69. userId: userIdNum,
  70. chapterId,
  71. progress,
  72. duration,
  73. },
  74. });
  75. }
  76. }
  77. /**
  78. * 删除播放记录
  79. */
  80. async function deletePlayRecord(userId, chapterId) {
  81. const userIdNum = parseInt(userId);
  82. return await prisma.playRecord.delete({
  83. where: {
  84. userId_chapterId: {
  85. userId: userIdNum,
  86. chapterId,
  87. },
  88. },
  89. });
  90. }
  91. /**
  92. * 更新播放进度
  93. */
  94. async function updatePlayProgress(userId, chapterId, progress, duration) {
  95. const userIdNum = parseInt(userId);
  96. const data = { progress };
  97. if (duration !== undefined) {
  98. data.duration = duration;
  99. }
  100. return await prisma.playRecord.update({
  101. where: {
  102. userId_chapterId: {
  103. userId: userIdNum,
  104. chapterId,
  105. },
  106. },
  107. data,
  108. });
  109. }
  110. /**
  111. * 获取单个章节的播放进度
  112. */
  113. async function getSingleProgress(userId, chapterId) {
  114. const userIdNum = parseInt(userId);
  115. const record = await prisma.playRecord.findUnique({
  116. where: {
  117. userId_chapterId: {
  118. userId: userIdNum,
  119. chapterId,
  120. },
  121. },
  122. });
  123. return record;
  124. }