fix: 修复CreateN8nTemplatesTable迁移文件类型错误

- 使用TableIndex替代Index类创建数据库索引
- 修复createIndex方法参数类型错误
- 更新dropIndex方法参数格式
- 确保TypeScript类型检查通过
This commit is contained in:
imeepos 2025-09-04 15:18:55 +08:00
parent a513202155
commit ef90c7c71d
1 changed files with 190 additions and 0 deletions

View File

@ -0,0 +1,190 @@
import { MigrationInterface, QueryRunner, Table, TableIndex } from 'typeorm';
export class CreateN8nTemplatesTable1725434673000 implements MigrationInterface {
name = 'CreateN8nTemplatesTable1725434673000';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(
new Table({
name: 'n8n_templates',
columns: [
{
name: 'id',
type: 'bigint',
isPrimary: true,
isGenerated: true,
generationStrategy: 'increment',
comment: '主键ID'
},
{
name: 'code',
type: 'varchar',
length: '100',
isUnique: true,
isNullable: false,
comment: '模板唯一标识码'
},
{
name: 'name',
type: 'varchar',
length: '200',
isNullable: false,
comment: '模板名称'
},
{
name: 'description',
type: 'text',
isNullable: true,
comment: '模板详细描述'
},
{
name: 'credit_cost',
type: 'int',
default: 0,
isNullable: false,
comment: '积分消耗'
},
{
name: 'version',
type: 'varchar',
length: '50',
isNullable: false,
comment: '版本号'
},
{
name: 'input_example_url',
type: 'text',
isNullable: true,
comment: '输入示例图片'
},
{
name: 'output_example_url',
type: 'text',
isNullable: true,
comment: '输出示例图片'
},
{
name: 'tags',
type: 'json',
isNullable: true,
comment: '标签数组'
},
{
name: 'template_type',
type: 'enum',
enum: ['image', 'video'],
isNullable: false,
comment: '模板类型'
},
{
name: 'template_class',
type: 'varchar',
length: '100',
isNullable: false,
comment: '具体模板类名'
},
{
name: 'image_model',
type: 'varchar',
length: '100',
isNullable: true,
comment: '图片生成模型'
},
{
name: 'image_prompt',
type: 'text',
isNullable: true,
comment: '图片生成提示词'
},
{
name: 'video_model',
type: 'varchar',
length: '100',
isNullable: true,
comment: '视频生成模型'
},
{
name: 'video_prompt',
type: 'text',
isNullable: true,
comment: '视频生成提示词'
},
{
name: 'duration',
type: 'int',
isNullable: true,
comment: '视频时长(秒)'
},
{
name: 'aspect_ratio',
type: 'varchar',
length: '20',
isNullable: true,
comment: '视频比例'
},
{
name: 'is_active',
type: 'boolean',
default: true,
isNullable: false,
comment: '是否启用'
},
{
name: 'sort_order',
type: 'int',
default: 0,
isNullable: false,
comment: '排序权重'
},
{
name: 'created_at',
type: 'timestamp',
default: 'CURRENT_TIMESTAMP',
isNullable: false,
comment: '创建时间'
},
{
name: 'updated_at',
type: 'timestamp',
default: 'CURRENT_TIMESTAMP',
onUpdate: 'CURRENT_TIMESTAMP',
isNullable: false,
comment: '更新时间'
}
]
}),
true
);
// 创建索引
await queryRunner.createIndex('n8n_templates', new TableIndex({
name: 'idx_code',
columnNames: ['code']
}));
await queryRunner.createIndex('n8n_templates', new TableIndex({
name: 'idx_type',
columnNames: ['template_type']
}));
await queryRunner.createIndex('n8n_templates', new TableIndex({
name: 'idx_class',
columnNames: ['template_class']
}));
await queryRunner.createIndex('n8n_templates', new TableIndex({
name: 'idx_active',
columnNames: ['is_active']
}));
console.log('✅ N8n Templates table created successfully');
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropIndex('n8n_templates', 'idx_active');
await queryRunner.dropIndex('n8n_templates', 'idx_class');
await queryRunner.dropIndex('n8n_templates', 'idx_type');
await queryRunner.dropIndex('n8n_templates', 'idx_code');
await queryRunner.dropTable('n8n_templates');
}
}