preferences.service.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { PrismaClient } from '@prisma/client';
  2. const prisma = new PrismaClient();
  3. /**
  4. * 获取用户偏好设置
  5. */
  6. export async function getPreferences(userId: string) {
  7. const userIdNum = parseInt(userId);
  8. let preferences = await prisma.userPreference.findUnique({
  9. where: { userId: userIdNum },
  10. });
  11. // 如果不存在,创建默认偏好
  12. if (!preferences) {
  13. preferences = await prisma.userPreference.create({
  14. data: {
  15. userId: userIdNum,
  16. playSpeed: 1.0,
  17. quality: 'standard',
  18. theme: 'light',
  19. },
  20. });
  21. }
  22. return preferences;
  23. }
  24. /**
  25. * 更新用户偏好设置
  26. */
  27. export async function updatePreferences(
  28. userId: string,
  29. data: {
  30. playSpeed?: number;
  31. quality?: string;
  32. theme?: string;
  33. }
  34. ) {
  35. const userIdNum = parseInt(userId);
  36. // 使用 upsert 语义
  37. const existing = await prisma.userPreference.findUnique({
  38. where: { userId: userIdNum },
  39. });
  40. if (existing) {
  41. // 更新
  42. return await prisma.userPreference.update({
  43. where: { userId: userIdNum },
  44. data,
  45. });
  46. } else {
  47. // 创建
  48. return await prisma.userPreference.create({
  49. data: {
  50. userId: userIdNum,
  51. playSpeed: data.playSpeed ?? 1.0,
  52. quality: data.quality ?? 'standard',
  53. theme: data.theme ?? 'light',
  54. },
  55. });
  56. }
  57. }