moex-vibe/apps/backend/src/modules/securities/dto/screener-response.dto.ts

88 lines
2.2 KiB
TypeScript

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;
}