tasks.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { Router } from 'express';
  2. import { asyncHandler } from '../middleware/error.js';
  3. import { taskQueueService } from '../services/TaskQueueService.js';
  4. import type { CreateTaskRequest } from '@media-manager/shared';
  5. const router = Router();
  6. /**
  7. * 获取当前用户的任务列表
  8. */
  9. router.get(
  10. '/',
  11. asyncHandler(async (req, res) => {
  12. const userId = req.user!.userId;
  13. const tasks = taskQueueService.getUserTasks(userId);
  14. res.json({
  15. success: true,
  16. data: { tasks },
  17. });
  18. })
  19. );
  20. /**
  21. * 获取活跃任务
  22. */
  23. router.get(
  24. '/active',
  25. asyncHandler(async (req, res) => {
  26. const userId = req.user!.userId;
  27. const tasks = taskQueueService.getActiveTasks(userId);
  28. res.json({
  29. success: true,
  30. data: { tasks },
  31. });
  32. })
  33. );
  34. /**
  35. * 创建新任务
  36. */
  37. router.post(
  38. '/',
  39. asyncHandler(async (req, res) => {
  40. const userId = req.user!.userId;
  41. const request = req.body as CreateTaskRequest;
  42. const task = taskQueueService.createTask(userId, request);
  43. res.json({
  44. success: true,
  45. message: '任务已创建',
  46. data: { task },
  47. });
  48. })
  49. );
  50. /**
  51. * 取消任务
  52. */
  53. router.post(
  54. '/:taskId/cancel',
  55. asyncHandler(async (req, res) => {
  56. const userId = req.user!.userId;
  57. const { taskId } = req.params;
  58. const success = taskQueueService.cancelTask(userId, taskId);
  59. if (success) {
  60. res.json({
  61. success: true,
  62. message: '任务已取消',
  63. });
  64. } else {
  65. res.status(400).json({
  66. success: false,
  67. message: '无法取消任务',
  68. });
  69. }
  70. })
  71. );
  72. /**
  73. * 清理已完成的任务
  74. */
  75. router.post(
  76. '/clear-completed',
  77. asyncHandler(async (req, res) => {
  78. const userId = req.user!.userId;
  79. taskQueueService.clearCompletedTasks(userId, 0);
  80. res.json({
  81. success: true,
  82. message: '已清理',
  83. });
  84. })
  85. );
  86. export default router;