返回 AiToEarn
adminUserTask.controller.ts
根目录 / project / aitoearn-electron / server / src / modules / task / adminUserTask.controller.ts
1 /*
2 * @Author: nevin
3 * @Date: 2025-02-20 16:23:34
4 * @LastEditTime: 2025-05-06 14:19:19
5 * @LastEditors: nevin
6 * @Description: 管理端-用户任务管理
7 */
8 import {
9 Body,
10 Controller,
11 Get,
12 NotFoundException,
13 Param,
14 Put,
15 Query,
16 } from '@nestjs/common';
17 import { Manager } from '../../auth/manager.guard';
18 import { AdminUserTaskService } from './adminUserTask.service';
19 import { AdminQueryUserTaskDto } from './dto/userTask.dto';
20 import { ApiResult } from 'src/common/decorators/api-result.decorator';
21 import { TokenInfo } from 'src/auth/interfaces/auth.interfaces';
22 import { GetToken } from 'src/auth/auth.guard';
23 import { UserTaskStatus } from 'src/db/schema/user-task.schema';
24 import { AppHttpException } from 'src/filters/http-exception.filter';
25 import { ErrHttpBack } from 'src/filters/http-exception.back-code';
26 import { RejectedTaskDto } from './dto/verify-task.dto';
27 import { UserTaskService } from './user-task.service';
28
29 @Controller('admin/userTasks')
30 @Manager()
31 export class AdminUserTaskController {
32 constructor(
33 private readonly adminUserTaskService: AdminUserTaskService,
34 private readonly userTaskService: UserTaskService,
35 ) {}
36
37 @Get('list')
38 async getTasks(@Query() query: AdminQueryUserTaskDto) {
39 return this.adminUserTaskService.getList(query);
40 }
41
42 @Get('info/:id')
43 async getTask(@Param('id') id: string) {
44 return this.adminUserTaskService.getUserTaskInfoById(id);
45 }
46
47 @Get('count/approved/task')
48 async getCompletedTaskCount() {
49 return this.adminUserTaskService.getCompletedTaskCount();
50 }
51
52 @Get('count/approved/user')
53 async getCompletedUserCount() {
54 return this.adminUserTaskService.getCompletedUserCount();
55 }
56
57 // 通过
58 @ApiResult({ type: Boolean })
59 @Put('verify/approved/:id')
60 async verifyUserTaskApproved(
61 @GetToken() verifier: TokenInfo,
62 @Param('id') id: string,
63 ) {
64 const userTask = await this.userTaskService.getUserTaskInfoById(id);
65 if (!userTask) throw new NotFoundException('任务不存在');
66 if (userTask.status !== UserTaskStatus.PENDING)
67 throw new AppHttpException(ErrHttpBack.user_task_err_status);
68
69 return this.adminUserTaskService.verifyUserTaskApproved(userTask, {
70 verifierUserId: verifier.id,
71 });
72 }
73
74 // 拒绝
75 @ApiResult({ type: Boolean })
76 @Put('verify/rejected/:id')
77 async verifyUserTaskRejected(
78 @GetToken() verifier: TokenInfo,
79 @Param('id') id: string,
80 @Body() data: RejectedTaskDto,
81 ) {
82 const userTask = await this.userTaskService.getUserTaskInfoById(id);
83 if (!userTask) throw new NotFoundException('任务不存在');
84 return this.adminUserTaskService.verifyUserTaskRejected(userTask, {
85 verifierUserId: verifier.id,
86 ...data,
87 });
88 }
89
90 @ApiResult({ type: Boolean })
91 @Put('rollback/rejected/:id')
92 async rollbackUserTaskApproved(
93 @GetToken() verifier: TokenInfo,
94 @Param('id') id: string,
95 @Body() data: RejectedTaskDto,
96 ) {
97 const userTask = await this.userTaskService.getUserTaskInfoById(id);
98 if (!userTask) throw new NotFoundException('任务不存在');
99 if (userTask.status !== UserTaskStatus.PENDING)
100 throw new NotFoundException('任务不存在或状态不正确');
101
102 return this.adminUserTaskService.rollbackUserTaskApproved(userTask, {
103 verifierUserId: verifier.id,
104 ...data,
105 });
106 }
107
108 // 运行自动审核的任务
109 @ApiResult({ type: Boolean })
110 @Put('audit/auto/run/:id')
111 async runUserTaskAuditAuto(@Param('id') id: string) {
112 const userTaskInfo =
113 await this.adminUserTaskService.getUserTaskInfoById(id);
114 if (!userTaskInfo) throw new NotFoundException('任务不存在或状态不正确');
115
116 const { status, message, retry, data } =
117 await this.adminUserTaskService.autoAuditTask(id);
118
119 this.adminUserTaskService.updateUserTaskAutoStatus(id, { status, message });
120
121 if (!status)
122 return {
123 status,
124 message,
125 retry,
126 };
127
128 // 根据审核状态确定是否通过
129 if (data) {
130 this.adminUserTaskService.verifyUserTaskApproved(userTaskInfo, {});
131 } else {
132 this.adminUserTaskService.verifyUserTaskRejected(userTaskInfo, {
133 verificationNote: `人工触发自动审核---${message}`,
134 });
135 }
136
137 return {
138 status: true,
139 message: '审核成功',
140 };
141 }
142 }
143
143 lines TYPESCRIPT