fix: bind middleware logger context; generate OpenAPI types for frontend

- Fix RequestLoggingMiddleware this.logger crash by binding the use() method to the instance
- Generate src/api/types.ts from live backend via openapi-typescript
This commit is contained in:
Sergey Krylov 2026-06-13 19:13:08 +03:00
parent 5d80c510eb
commit 49437817a5
2 changed files with 432 additions and 1 deletions

View File

@ -15,7 +15,8 @@ async function bootstrap() {
app.useGlobalPipes(new ValidationPipe({ transform: true, whitelist: true }));
app.useGlobalFilters(new HttpExceptionFilter());
app.useGlobalInterceptors(new TransformInterceptor());
app.use(new RequestLoggingMiddleware().use);
const reqLogMiddleware = new RequestLoggingMiddleware();
app.use(reqLogMiddleware.use.bind(reqLogMiddleware));
app.enableCors();

View File

@ -0,0 +1,430 @@
/**
* This file was auto-generated by openapi-typescript.
* Do not make direct changes to the file.
*/
export interface paths {
"/api/v1/health": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Проверка состояния сервиса */
get: operations["HealthController_check"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/search": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Поиск по инструментам */
get: operations["SecuritiesController_search"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/shares/{secid}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить спецификацию акции */
get: operations["SharesController_getShare"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/shares/{secid}/marketdata": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить рыночные данные акции */
get: operations["SharesController_getMarketData"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/shares/{secid}/dividends": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить дивиденды */
get: operations["SharesController_getDividends"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/shares/{secid}/history": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить дневную историю торгов акции */
get: operations["SharesController_getHistory"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/bonds/{secid}": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить спецификацию облигации */
get: operations["BondsController_getBond"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/bonds/{secid}/marketdata": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить рыночные данные облигации */
get: operations["BondsController_getMarketData"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/bonds/{secid}/history": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить дневную историю торгов облигации */
get: operations["BondsController_getHistory"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/shares/{secid}/candles": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить свечи акции */
get: operations["CandlesController_getShareCandles"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/v1/securities/bonds/{secid}/candles": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Получить свечи облигации */
get: operations["CandlesController_getBondCandles"];
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;
responses: never;
parameters: never;
requestBodies: never;
headers: never;
pathItems: never;
}
export type $defs = Record<string, never>;
export interface operations {
HealthController_check: {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
SecuritiesController_search: {
parameters: {
query: {
/** @description Поисковый запрос (тикер, название, ISIN) */
q: string;
type?: "all" | "share" | "bond";
limit?: number;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
SharesController_getShare: {
parameters: {
query?: never;
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
SharesController_getMarketData: {
parameters: {
query?: never;
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
SharesController_getDividends: {
parameters: {
query?: never;
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
SharesController_getHistory: {
parameters: {
query: {
from: string;
till: string;
};
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
BondsController_getBond: {
parameters: {
query?: never;
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
BondsController_getMarketData: {
parameters: {
query?: never;
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
BondsController_getHistory: {
parameters: {
query: {
from: string;
till: string;
};
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CandlesController_getShareCandles: {
parameters: {
query: {
interval: "1h" | "24h";
from: string;
till: string;
};
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
CandlesController_getBondCandles: {
parameters: {
query: {
interval: "1h" | "24h";
from: string;
till: string;
};
header?: never;
path: {
secid: string;
};
cookie?: never;
};
requestBody?: never;
responses: {
200: {
headers: {
[name: string]: unknown;
};
content?: never;
};
};
};
}