{{#if swaggerEnabled}}
import { ApiProperty } from '@nestjs/swagger';
{{/if}}
import { Exclude, Expose, Type } from 'class-transformer';
import { BaseResponseDto } from '@modules/common/dto/base-response.dto';
{{#if (uniqueEnums fields)}}
import { {{uniqueEnums fields}} } from '@prisma/client';
{{/if}}
{{{uniqueRelationResponseImports relations}}}

export class {{pascalName}}ResponseDto extends BaseResponseDto {
  {{#each fields}}
  {{#unless (or (eq name 'id') (eq name 'createdAt') (eq name 'updatedAt'))}}
  {{#unless (eq kind 'object')}}
  {{#if ../swaggerEnabled}}
  @ApiProperty({
    description: '{{name}}',
    type: {{swaggerType type isList}},
    {{#if isList}}
    isArray: true,
    {{/if}}
  })
  {{/if}}
  @Expose()
  {{#if (eq type 'Date')}}
  @Type(() => Date)
  {{/if}}
  {{name}}: {{type}}{{#if isList}}[]{{/if}};

  {{/unless}}
  {{/unless}}
  {{/each}}

  {{#each relations}}
  {{#if ../swaggerEnabled}}
  @ApiProperty({
    description: '{{name}}',
    type: {{#if isList}}[{{relatedModel}}ResponseDto]{{else}}{{relatedModel}}ResponseDto{{/if}},
    {{#unless isRequired}}
    required: false,
    {{/unless}}
  })
  {{/if}}
  @Expose()
  @Type(() => {{relatedModel}}ResponseDto)
  {{name}}{{#unless isRequired}}?{{/unless}}: {{#if isList}}{{relatedModel}}ResponseDto[]{{else}}{{relatedModel}}ResponseDto{{/if}};

  {{/each}}
}