forked from yoone/API
1
0
Fork 0
API/src/controller/template.controller.ts

169 lines
5.2 KiB
TypeScript

import { Inject, Controller, Get, Post, Put, Del, Body, Param, Query } from '@midwayjs/core';
import { TemplateService } from '../service/template.service';
import { successResponse, errorResponse } from '../utils/response.util';
import { CreateTemplateDTO, UpdateTemplateDTO, RenderTemplateDTO } from '../dto/template.dto';
import { ApiOkResponse, ApiTags } from '@midwayjs/swagger';
import { Template } from '../entity/template.entity';
import { BooleanRes } from '../dto/reponse.dto';
/**
* @controller TemplateController 模板管理
*/
@ApiTags('Template')
@Controller('/template')
export class TemplateController {
@Inject()
templateService: TemplateService;
/**
* @summary 获取模板列表
* @description 获取所有可用模板的列表
*/
@ApiOkResponse({ type: [Template], description: '成功获取模板列表' })
@Get('/list')
async getTemplateList(@Query() params: any) {
// 调用服务层获取列表
return this.templateService.getTemplateList(params);
}
/**
* @summary 根据名称获取模板
* @description 通过模板的唯一名称查找特定模板
* @param name 模板名称
*/
@ApiOkResponse({ type: Template, description: '成功获取模板' })
@Get('/:name')
async getTemplateByName(@Param('name') name: string) {
try {
// 调用服务层获取单个模板
const data = await this.templateService.getTemplateByName(name);
// 返回成功响应
return successResponse(data);
} catch (error) {
// 返回错误响应
return errorResponse(error.message);
}
}
/**
* @summary 创建新模板
* @description 创建一个新的模板,用于后续的字符串生成
* @param templateData 模板数据
*/
@ApiOkResponse({ type: Template, description: '成功创建模板' })
@Post('/')
async createTemplate(@Body() templateData: CreateTemplateDTO) {
try {
// 调用服务层创建模板
const data = await this.templateService.createTemplate(templateData);
// 返回成功响应
return successResponse(data);
} catch (error) {
// 返回错误响应
return errorResponse(error.message);
}
}
/**
* @summary 更新现有模板
* @description 根据模板 ID 更新一个现有模板的内容
* @param id 模板 ID
* @param templateData 模板数据
*/
@ApiOkResponse({ type: Template, description: '成功更新模板' })
@Put('/:id')
async updateTemplate(
@Param('id') id: number,
@Body() templateData: UpdateTemplateDTO
) {
try {
// 调用服务层更新模板
const data = await this.templateService.updateTemplate(id, templateData);
// 返回成功响应
return successResponse(data);
} catch (error) {
// 返回错误响应
return errorResponse(error.message);
}
}
/**
* @summary 删除模板
* @description 根据模板 ID 删除一个模板
* @param id 模板 ID
*/
@ApiOkResponse({ type: BooleanRes, description: '成功删除模板' })
@Del('/:id')
async deleteTemplate(@Param('id') id: number) {
try {
// 调用服务层删除模板
const data = await this.templateService.deleteTemplate(id);
// 返回成功响应
return successResponse(data);
} catch (error) {
// 返回错误响应
return errorResponse(error.message);
}
}
/**
* @summary 渲染模板
* @description 根据模板名称和输入的数据渲染最终字符串
* @param name 模板名称
* @param data 渲染数据
*/
@ApiOkResponse({ type: String, description: '成功渲染模板' })
@Post('/render/:name')
async renderTemplate(
@Param('name') name: string,
@Body() data: Record<string, any>
) {
try {
// 调用服务层渲染模板
const renderedString = await this.templateService.render(name, data);
// 返回成功响应
return successResponse(renderedString);
} catch (error) {
// 返回错误响应
return errorResponse(error.message);
}
}
/**
* @summary 回填缺失的测试数据
* @description 扫描数据库中所有模板,为缺失 testData 的记录生成并保存测试数据
*/
@ApiOkResponse({ type: Number, description: '成功回填的数量' })
@Post('/backfill-testdata')
async backfillTestData() {
try {
const count = await this.templateService.backfillMissingTestData();
return successResponse({ updated: count });
} catch (error) {
return errorResponse(error.message);
}
}
/**
* @summary 直接渲染模板内容
* @description 直接传入模板内容和数据渲染最终字符串,无需保存模板到数据库
* @param renderData 包含模板内容和渲染数据的对象
*/
@ApiOkResponse({ type: String, description: '成功渲染模板' })
@Post('/render-direct')
async renderTemplateDirect(@Body() renderData: RenderTemplateDTO) {
try {
// 调用服务层渲染模板内容
const renderedString = await this.templateService.renderWithTemplate(
renderData.template,
renderData.data
);
// 返回成功响应
return successResponse(renderedString);
} catch (error) {
// 返回错误响应
return errorResponse(error.message);
}
}
}