docs: refresh openapi contract artifacts

This commit is contained in:
Sergey Krylov 2026-06-15 05:31:55 +03:00
parent 44e13cc67e
commit 143b4758c3
2 changed files with 1674 additions and 635 deletions

View File

@ -21,6 +21,92 @@ export interface paths {
patch?: never;
trace?: never;
};
'/api/v1/auth/register': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Register new user */
post: operations['AuthController_register'];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/auth/login': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Login with email and password */
post: operations['AuthController_login'];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/auth/refresh': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Refresh access token */
post: operations['AuthController_refresh'];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/auth/logout': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Logout user */
post: operations['AuthController_logout'];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/auth/me': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get current user profile */
get: operations['AuthController_getProfile'];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
/** Update current user profile */
patch: operations['AuthController_updateProfile'];
trace?: never;
};
'/api/v1/securities/search': {
parameters: {
query?: never;
@ -38,6 +124,23 @@ export interface paths {
patch?: never;
trace?: never;
};
'/api/v1/securities/screener': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Фильтр ценных бумаг по параметрам */
get: operations['SecuritiesController_screener'];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/securities/shares/{secid}': {
parameters: {
query?: never;
@ -191,10 +294,316 @@ export interface paths {
patch?: never;
trace?: never;
};
'/api/v1/portfolios': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get all portfolios for current user */
get: operations['PortfolioController_findAll'];
put?: never;
/** Create a new portfolio */
post: operations['PortfolioController_create'];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/portfolios/{id}': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get portfolio details with positions and prices */
get: operations['PortfolioController_findOne'];
put?: never;
post?: never;
/** Delete portfolio */
delete: operations['PortfolioController_remove'];
options?: never;
head?: never;
/** Update portfolio */
patch: operations['PortfolioController_update'];
trace?: never;
};
'/api/v1/portfolios/{id}/positions': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Add position to portfolio */
post: operations['PortfolioController_addPosition'];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
'/api/v1/portfolios/{id}/positions/{positionId}': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
post?: never;
/** Remove position from portfolio */
delete: operations['PortfolioController_removePosition'];
options?: never;
head?: never;
/** Update position */
patch: operations['PortfolioController_updatePosition'];
trace?: never;
};
'/api/v1/portfolios/{id}/analytics': {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Get portfolio analytics with PnL */
get: operations['PortfolioController_getAnalytics'];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
}
export type webhooks = Record<string, never>;
export interface components {
schemas: never;
schemas: {
RegisterDto: {
/** @example user@example.com */
email: string;
/** @example securePass123 */
password: string;
/** @example John */
name?: string;
};
LoginDto: {
/** @example user@example.com */
email: string;
/** @example securePass123 */
password: string;
};
UpdateProfileDto: {
/** @example John Doe */
name?: string;
};
ScreenerItemDto: {
/** @example SBER */
secid: string;
/** @example Сбербанк */
shortName: string;
/** @example RU0009029540 */
isin: string;
/** @enum {string} */
type: 'share' | 'bond';
/** @example 322.35 */
price?: Record<string, never>;
/** @example 1.15 */
change?: Record<string, never>;
/** @example 0.36 */
changePercent?: Record<string, never>;
/** @example 1925163 */
volume: number;
/** @example 1 */
listLevel: number;
/** @example 6958336818320 */
capitalization?: Record<string, never>;
/** @example 12.71 */
yieldToMaturity?: Record<string, never>;
/** @example 4.5 */
duration?: Record<string, never>;
/** @example 40.64 */
couponValue?: Record<string, never>;
/** @example 8.15 */
couponPercent?: Record<string, never>;
/** @example 29.48 */
accruedInt?: Record<string, never>;
/** @example 2027-02-03 */
matDate?: Record<string, never>;
/** @example ОФЗ-ПД */
bondType?: Record<string, never>;
};
ScreenerResultDto: {
items: components['schemas']['ScreenerItemDto'][];
total: number;
page: number;
pageSize: number;
totalPages: number;
};
PortfolioListResponseDto: {
id: number;
name: string;
description?: Record<string, never>;
/** @default RUB */
currency: string;
createdAt: string;
updatedAt: string;
/** @description Total market value of all positions */
totalValue: number;
/** @description Total number of positions */
positionCount: number;
/** @description Number of share positions */
shareCount: number;
/** @description Number of bond positions */
bondCount: number;
};
CreatePortfolioDto: {
/** @example Мой портфель */
name: string;
/** @example Описание портфеля */
description?: string;
/**
* @default RUB
* @enum {string}
*/
currency: 'RUB' | 'USD' | 'EUR' | 'CNY' | 'KZT' | 'BYN';
};
PositionWithPriceDto: {
id: number;
/** @example SBER */
secid: string;
shortName?: Record<string, never>;
/**
* @example share
* @enum {string}
*/
type: 'share' | 'bond';
/** @example 10 */
quantity: number;
buyPrice?: Record<string, never>;
buyDate?: Record<string, never>;
notes?: Record<string, never>;
tags?: Record<string, never>;
currentPrice?: Record<string, never>;
totalCost?: Record<string, never>;
currentValue?: Record<string, never>;
weightPercent: number;
pnl?: Record<string, never>;
pnlPercent?: Record<string, never>;
dividendIncome?: Record<string, never>;
totalReturn?: Record<string, never>;
totalReturnPercent?: Record<string, never>;
change?: Record<string, never>;
changePercent?: Record<string, never>;
yieldToMaturity?: Record<string, never>;
duration?: Record<string, never>;
couponValue?: Record<string, never>;
couponPercent?: Record<string, never>;
nextCouponDate?: Record<string, never>;
matDate?: Record<string, never>;
accruedInt?: Record<string, never>;
bid?: Record<string, never>;
offer?: Record<string, never>;
couponPeriod?: Record<string, never>;
bondType?: Record<string, never>;
offerDate?: Record<string, never>;
};
PortfolioSummaryDto: {
totalInvested: number;
totalValue: number;
totalPnl: number;
totalPnlPercent: Record<string, never>;
totalDividends: number;
totalReturn: number;
totalReturnPercent: Record<string, never>;
positionCount: number;
weightedYield: Record<string, never>;
};
PortfolioDetailResponseDto: {
id: number;
name: string;
description?: Record<string, never>;
/** @default RUB */
currency: string;
createdAt: string;
updatedAt: string;
positions: components['schemas']['PositionWithPriceDto'][];
totalValue: number;
analytics: components['schemas']['PortfolioSummaryDto'];
};
UpdatePortfolioDto: {
/** @example Мой портфель */
name?: string;
/** @example Обновлённое описание */
description?: string;
/**
* @default RUB
* @enum {string}
*/
currency: 'RUB' | 'USD' | 'EUR' | 'CNY' | 'KZT' | 'BYN';
};
AddPositionDto: {
/** @example SBER */
secid: string;
/** @example 10 */
quantity: number;
/** @example 250.5 */
buyPrice?: number;
/** @example 2026-06-01 */
buyDate?: string;
/** @example Покупка на дип */
notes?: string;
/**
* @example [
* "DIVIDEND",
* "GROWTH"
* ]
* @enum {string}
*/
tags?:
| 'DIVIDEND'
| 'GROWTH'
| 'DEFENSIVE'
| 'SPECULATIVE'
| 'BOND'
| 'ETF'
| 'GOVERNMENT'
| 'CASH';
};
UpdatePositionDto: {
/** @example 15 */
quantity?: number;
/** @example 260 */
buyPrice?: number;
/** @example 2026-06-15 */
buyDate?: string;
/** @example Докупка */
notes?: string;
/**
* @example [
* "DIVIDEND"
* ]
* @enum {string}
*/
tags?:
| 'DIVIDEND'
| 'GROWTH'
| 'DEFENSIVE'
| 'SPECULATIVE'
| 'BOND'
| 'ETF'
| 'GOVERNMENT'
| 'CASH';
};
};
responses: never;
parameters: never;
requestBodies: never;
@ -220,6 +629,120 @@ export interface operations {
};
};
};
AuthController_register: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
'application/json': components['schemas']['RegisterDto'];
};
};
responses: {
201: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AuthController_login: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
'application/json': components['schemas']['LoginDto'];
};
};
responses: {
201: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AuthController_refresh: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AuthController_logout: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AuthController_getProfile: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
AuthController_updateProfile: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
'application/json': components['schemas']['UpdateProfileDto'];
};
};
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
SecuritiesController_search: {
parameters: {
query: {
@ -242,6 +765,49 @@ export interface operations {
};
};
};
SecuritiesController_screener: {
parameters: {
query: {
type: 'share' | 'bond';
priceMin?: number;
priceMax?: number;
volumeMin?: number;
listLevel?: number;
changePercentMin?: number;
changePercentMax?: number;
capitalizationMin?: number;
yieldMin?: number;
yieldMax?: number;
durationMin?: number;
durationMax?: number;
couponMin?: number;
couponMax?: number;
couponPercentMin?: number;
couponPercentMax?: number;
maturityBefore?: string;
maturityAfter?: string;
bondType?: string;
sortBy?: string;
sortOrder?: string;
page?: number;
pageSize?: number;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['ScreenerResultDto'];
};
};
};
};
SharesController_getShare: {
parameters: {
query?: never;
@ -427,4 +993,193 @@ export interface operations {
};
};
};
PortfolioController_findAll: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['PortfolioListResponseDto'][];
};
};
};
};
PortfolioController_create: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody: {
content: {
'application/json': components['schemas']['CreatePortfolioDto'];
};
};
responses: {
201: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
PortfolioController_findOne: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content: {
'application/json': components['schemas']['PortfolioDetailResponseDto'];
};
};
};
};
PortfolioController_remove: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
PortfolioController_update: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody: {
content: {
'application/json': components['schemas']['UpdatePortfolioDto'];
};
};
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
PortfolioController_addPosition: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody: {
content: {
'application/json': components['schemas']['AddPositionDto'];
};
};
responses: {
201: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
PortfolioController_removePosition: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
positionId: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
PortfolioController_updatePosition: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
positionId: number;
};
cookie?: never;
};
requestBody: {
content: {
'application/json': components['schemas']['UpdatePositionDto'];
};
};
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
PortfolioController_getAnalytics: {
parameters: {
query?: never;
header?: never;
path: {
id: number;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
}

File diff suppressed because it is too large Load Diff