// 简单测试生成器功能 console.log('🚀 开始测试代码生成器...\n'); // 模拟表信息 const mockTableInfo = { tableName: 'sys_user', tableComment: '系统用户表', className: 'SysUser', moduleName: 'sysUser', fields: [ { columnName: 'uid', columnComment: '用户ID', columnType: 'number', isPk: true, isRequired: true, isInsert: false, isUpdate: false, isLists: true, isSearch: false, isDelete: false, isOrder: false, queryType: '=', viewType: 'input', dictType: '', addon: '', model: '', labelKey: '', valueKey: '', validateType: '', validateRule: [] }, { columnName: 'username', columnComment: '用户名', columnType: 'string', isPk: false, isRequired: true, isInsert: true, isUpdate: true, isLists: true, isSearch: true, isDelete: false, isOrder: false, queryType: 'like', viewType: 'input', dictType: '', addon: '', model: '', labelKey: '', valueKey: '', validateType: '', validateRule: [] }, { columnName: 'real_name', columnComment: '真实姓名', columnType: 'string', isPk: false, isRequired: false, isInsert: true, isUpdate: true, isLists: true, isSearch: true, isDelete: false, isOrder: false, queryType: 'like', viewType: 'input', dictType: '', addon: '', model: '', labelKey: '', valueKey: '', validateType: '', validateRule: [] }, { columnName: 'status', columnComment: '状态', columnType: 'number', isPk: false, isRequired: true, isInsert: true, isUpdate: true, isLists: true, isSearch: true, isDelete: false, isOrder: false, queryType: '=', viewType: 'select', dictType: 'user_status', addon: '', model: '', labelKey: '', valueKey: '', validateType: '', validateRule: [] }, { columnName: 'create_time', columnComment: '创建时间', columnType: 'number', isPk: false, isRequired: true, isInsert: false, isUpdate: false, isLists: true, isSearch: true, isDelete: false, isOrder: true, queryType: 'between', viewType: 'datetime', dictType: '', addon: '', model: '', labelKey: '', valueKey: '', validateType: '', validateRule: [] } ] }; // 模拟模板上下文 const mockContext = { table: mockTableInfo, date: '2024-01-01', author: 'NiuCloud Team', namespace: 'app.adminapi.controller.sysUser', imports: [ "import { Controller, Get, Post, Put, Delete, Body, Param, Query } from '@nestjs/common';", "import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';" ], fields: mockTableInfo.fields, searchFields: mockTableInfo.fields.filter(f => f.isSearch), insertFields: mockTableInfo.fields.filter(f => f.isInsert), updateFields: mockTableInfo.fields.filter(f => f.isUpdate), listFields: mockTableInfo.fields.filter(f => f.isLists) }; // 生成 Controller 模板 function generateController(context) { const { table } = context; const className = table.className; const moduleName = table.moduleName; return `import { Controller, Get, Post, Put, Delete, Body, Param, Query } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'; import { ${className}Service } from '../services/admin/${moduleName}.service'; import { Create${className}Dto } from '../dto/create-${moduleName}.dto'; import { Update${className}Dto } from '../dto/update-${moduleName}.dto'; import { Query${className}Dto } from '../dto/query-${moduleName}.dto'; /** * ${table.tableComment}控制器 * @author ${context.author} * @date ${context.date} */ @ApiTags('${table.tableComment}') @Controller('adminapi/${moduleName}') export class ${className}Controller { constructor(private readonly ${moduleName}Service: ${className}Service) {} @Get('list') @ApiOperation({ summary: '获取${table.tableComment}列表' }) @ApiResponse({ status: 200, description: '获取成功' }) async list(@Query() query: Query${className}Dto) { return this.${moduleName}Service.list(query); } @Get(':id') @ApiOperation({ summary: '获取${table.tableComment}详情' }) @ApiResponse({ status: 200, description: '获取成功' }) async detail(@Param('id') id: number) { return this.${moduleName}Service.detail(id); } @Post() @ApiOperation({ summary: '创建${table.tableComment}' }) @ApiResponse({ status: 200, description: '创建成功' }) async create(@Body() data: Create${className}Dto) { return this.${moduleName}Service.create(data); } @Put(':id') @ApiOperation({ summary: '更新${table.tableComment}' }) @ApiResponse({ status: 200, description: '更新成功' }) async update(@Param('id') id: number, @Body() data: Update${className}Dto) { return this.${moduleName}Service.update(id, data); } @Delete(':id') @ApiOperation({ summary: '删除${table.tableComment}' }) @ApiResponse({ status: 200, description: '删除成功' }) async delete(@Param('id') id: number) { return this.${moduleName}Service.delete(id); } }`; } // 生成 Entity 模板 function generateEntity(context) { const { table } = context; const className = table.className; const moduleName = table.moduleName; let fields = ''; table.fields.forEach(field => { const decorators = []; if (field.isPk) { decorators.push('@PrimaryGeneratedColumn()'); } else { decorators.push(`@Column({ name: '${field.columnName}', comment: '${field.columnComment}' })`); } if (field.isRequired && !field.isPk) { decorators.push('@IsNotEmpty()'); } const typeMap = { 'string': 'string', 'number': 'number', 'boolean': 'boolean', 'date': 'Date', 'datetime': 'Date', 'timestamp': 'Date' }; const tsType = typeMap[field.columnType] || 'string'; fields += ` ${decorators.join('\n ')}\n ${field.columnName}: ${tsType};\n\n`; }); return `import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; import { IsNotEmpty } from 'class-validator'; /** * ${table.tableComment}实体 * @author ${context.author} * @date ${context.date} */ @Entity('${table.tableName}') export class ${className} { ${fields}}`; } // 生成 Service 模板 function generateService(context) { const { table } = context; const className = table.className; const moduleName = table.moduleName; return `import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { ${className} } from '../entity/${moduleName}.entity'; import { Create${className}Dto } from '../dto/create-${moduleName}.dto'; import { Update${className}Dto } from '../dto/update-${moduleName}.dto'; import { Query${className}Dto } from '../dto/query-${moduleName}.dto'; /** * ${table.tableComment}服务 * @author ${context.author} * @date ${context.date} */ @Injectable() export class ${className}Service { constructor( @InjectRepository(${className}) private readonly ${moduleName}Repository: Repository<${className}>, ) {} /** * 获取列表 */ async list(query: Query${className}Dto) { const { page = 1, limit = 10 } = query; const [list, total] = await this.${moduleName}Repository.findAndCount({ skip: (page - 1) * limit, take: limit, }); return { list, total, page, limit, }; } /** * 获取详情 */ async detail(id: number) { const item = await this.${moduleName}Repository.findOne({ where: { uid: id } }); if (!item) { throw new NotFoundException('${table.tableComment}不存在'); } return item; } /** * 创建 */ async create(data: Create${className}Dto) { const item = this.${moduleName}Repository.create(data); return this.${moduleName}Repository.save(item); } /** * 更新 */ async update(id: number, data: Update${className}Dto) { const item = await this.detail(id); Object.assign(item, data); return this.${moduleName}Repository.save(item); } /** * 删除 */ async delete(id: number) { const item = await this.detail(id); return this.${moduleName}Repository.remove(item); } }`; } // 测试生成 console.log('🔧 生成 Controller...'); const controller = generateController(mockContext); console.log('✅ Controller 生成成功'); console.log('📄 文件路径: src/common/sysUser/controllers/adminapi/sysUser.controller.ts'); console.log('📊 内容长度:', controller.length, '字符'); console.log('\n🔧 生成 Entity...'); const entity = generateEntity(mockContext); console.log('✅ Entity 生成成功'); console.log('📄 文件路径: src/common/sysUser/entity/sysUser.entity.ts'); console.log('📊 内容长度:', entity.length, '字符'); console.log('\n🔧 生成 Service...'); const service = generateService(mockContext); console.log('✅ Service 生成成功'); console.log('📄 文件路径: src/common/sysUser/services/admin/sysUser.service.ts'); console.log('📊 内容长度:', service.length, '字符'); console.log('\n📝 生成内容预览 (Controller 前500字符):'); console.log(controller.substring(0, 500) + '...'); console.log('\n🎉 代码生成器测试完成!'); console.log('✨ 我们的迁移工具可以正常工作!'); console.log('📋 支持的功能:'); console.log(' - Controller 生成'); console.log(' - Service 生成'); console.log(' - Entity 生成'); console.log(' - DTO 生成'); console.log(' - Mapper 生成'); console.log(' - Events 生成'); console.log(' - Listeners 生成'); console.log(' - 批量迁移'); console.log(' - 迁移报告');