{{#if swaggerEnabled}}
import { ApiProperty } from '@nestjs/swagger';
{{/if}}
import { IsString, IsNotEmpty, IsOptional, IsDateString, IsBoolean, IsArray, ValidateNested } from 'class-validator';
{{#if (needsTypeImport fields)}}
import { Type } from 'class-transformer';
{{/if}}
{{#if (uniqueEnums fields)}}
import { {{uniqueEnums fields}} } from '@prisma/client';
{{/if}}
{{#if includeRelationsInCreateDto}}
{{{uniqueRelationImports fields}}}
{{/if}}

export class Create{{pascalName}}Dto {
  {{#each fields}}
  {{#if (isCreateField this)}}
  {{#if ../swaggerEnabled}}
  @ApiProperty({
    description: '{{name}}',
    {{#if (eq kind 'object')}}
    {{#if ../includeRelationsInCreateDto}}
    type: () => Create{{type}}Dto,
    {{else}}
    type: {{swaggerType 'string' isList}},
    {{/if}}
    {{else}}
    type: {{swaggerType type isList}},
    {{/if}}
    {{#if isList}}
    isArray: true,
    {{/if}}
    {{#unless isRequired}}
    required: false,
    {{/unless}}
  })
  {{/if}}
  {{#each validations}}
  @{{type}}{{#if value}}({{value}}){{else}}(){{/if}}
  {{/each}}
  {{#if (eq type 'Date')}}
  @Type(() => Date)
  {{/if}}
  {{#if (eq kind 'object')}}
  {{#if ../includeRelationsInCreateDto}}
  {{#if isList}}
  @ValidateNested({ each: true })
  @Type(() => Create{{type}}Dto)
  {{else}}
  @ValidateNested()
  @Type(() => Create{{type}}Dto)
  {{/if}}
  {{name}}{{#unless isRequired}}?{{/unless}}: Create{{type}}Dto{{#if isList}}[]{{/if}};
  {{else}}
  {{name}}{{#unless isRequired}}?{{/unless}}: string{{#if isList}}[]{{/if}}; // 关系字段使用ID
  {{/if}}
  {{else}}
  {{name}}{{#unless isRequired}}?{{/unless}}: {{type}}{{#if isList}}[]{{/if}};
  {{/if}}

  {{/if}}
  {{/each}}
}