import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; export class ScreenerItemDto { @ApiProperty({ example: 'SBER' }) secid!: string; @ApiProperty({ example: 'Сбербанк' }) shortName!: string; @ApiProperty({ example: 'RU0009029540' }) isin!: string; @ApiProperty({ enum: ['share', 'bond'] }) type!: 'share' | 'bond'; @ApiPropertyOptional({ type: Number, nullable: true, example: 322.35 }) price!: number | null; @ApiPropertyOptional({ type: Number, nullable: true, example: 1.15 }) change!: number | null; @ApiPropertyOptional({ type: Number, nullable: true, example: 0.36 }) changePercent!: number | null; @ApiProperty({ example: 1925163 }) volume!: number; @ApiProperty({ example: 1 }) listLevel!: number; @ApiPropertyOptional({ type: Number, nullable: true, example: 6958336818320 }) capitalization!: number | null; @ApiPropertyOptional({ type: Number, nullable: true, example: 12.71 }) yieldToMaturity!: number | null; @ApiPropertyOptional({ type: Number, nullable: true, example: 4.5 }) duration!: number | null; @ApiPropertyOptional({ type: Number, nullable: true, example: 40.64 }) couponValue!: number | null; @ApiPropertyOptional({ type: Number, nullable: true, example: 8.15 }) couponPercent!: number | null; @ApiPropertyOptional({ type: Number, nullable: true, example: 29.48 }) accruedInt!: number | null; @ApiPropertyOptional({ type: String, nullable: true, example: '2027-02-03' }) matDate!: string | null; @ApiPropertyOptional({ type: String, nullable: true, example: 'ОФЗ-ПД' }) bondType!: string | null; } export class ScreenerResultDto { @ApiProperty({ type: [ScreenerItemDto] }) items!: ScreenerItemDto[]; @ApiProperty() total!: number; @ApiProperty() page!: number; @ApiProperty() pageSize!: number; @ApiProperty() totalPages!: number; } class ScreenerResponseMetaDto { @ApiProperty({ type: String, nullable: true }) cachedAt!: string | null; @ApiProperty() fromCache!: boolean; } export class ScreenerResponseDto { @ApiProperty({ type: ScreenerResultDto }) data!: ScreenerResultDto; @ApiProperty({ type: ScreenerResponseMetaDto }) meta!: ScreenerResponseMetaDto; }