import { Body, Controller, Delete, Get, Post, Put, Query } from '@nestjs/common'; import { ApiOperation, ApiTags } from '@nestjs/swagger'; import { ApiResult } from '~/common/decorators/api-result.decorator'; import { IdParam } from '~/common/decorators/id-param.decorator'; import { ApiSecurityAuth } from '~/common/decorators/swagger.decorator'; import { Pagination } from '~/helper/paginate/pagination'; import { Perm, definePermission } from '~/modules/auth/decorators/permission.decorator'; import { TaskEntity } from '~/modules/system/task/task.entity'; import { TaskDto, TaskQueryDto, TaskUpdateDto } from './task.dto'; import { TaskService } from './task.service'; export const permissions = definePermission('system:task', { LIST: 'list', CREATE: 'create', READ: 'read', UPDATE: 'update', DELETE: 'delete', ONCE: 'once', START: 'start', STOP: 'stop' } as const); @ApiTags('System - 任务调度模块') @ApiSecurityAuth() @Controller('tasks') export class TaskController { constructor(private taskService: TaskService) {} @Get() @ApiOperation({ summary: '获取任务列表' }) @ApiResult({ type: [TaskEntity], isPage: true }) @Perm(permissions.LIST) async list(@Query() dto: TaskQueryDto): Promise> { return this.taskService.list(dto); } @Post() @ApiOperation({ summary: '添加任务' }) @Perm(permissions.CREATE) async create(@Body() dto: TaskDto): Promise { const serviceCall = dto.service.split('.'); await this.taskService.checkHasMissionMeta(serviceCall[0], serviceCall[1]); await this.taskService.create(dto); } @Put(':id') @ApiOperation({ summary: '更新任务' }) @Perm(permissions.UPDATE) async update(@IdParam() id: number, @Body() dto: TaskUpdateDto): Promise { const serviceCall = dto.service.split('.'); await this.taskService.checkHasMissionMeta(serviceCall[0], serviceCall[1]); await this.taskService.update(id, dto); } @Get(':id') @ApiOperation({ summary: '查询任务详细信息' }) @ApiResult({ type: TaskEntity }) @Perm(permissions.READ) async info(@IdParam() id: number): Promise { return this.taskService.info(id); } @Delete(':id') @ApiOperation({ summary: '删除任务' }) @Perm(permissions.DELETE) async delete(@IdParam() id: number): Promise { const task = await this.taskService.info(id); await this.taskService.delete(task); } @Put(':id/once') @ApiOperation({ summary: '手动执行一次任务' }) @Perm(permissions.ONCE) async once(@IdParam() id: number): Promise { const task = await this.taskService.info(id); await this.taskService.once(task); } @Put(':id/stop') @ApiOperation({ summary: '停止任务' }) @Perm(permissions.STOP) async stop(@IdParam() id: number): Promise { const task = await this.taskService.info(id); await this.taskService.stop(task); } @Put(':id/start') @ApiOperation({ summary: '启动任务' }) @Perm(permissions.START) async start(@IdParam() id: number): Promise { const task = await this.taskService.info(id); await this.taskService.start(task); } }