chore: strengthen backend eslint profile

This commit is contained in:
2026-09-28 11:04:18 +03:00
parent ca5dbcb382
commit 9b3558f96c
179 changed files with 4485 additions and 2716 deletions
@@ -1,40 +1,42 @@
import { Injectable } from '@nestjs/common';
import { randomUUID } from 'node:crypto';
import { isDeepStrictEqual } from 'node:util';
import type { Prisma } from '../../../../../generated/prisma/client';
import { PrismaService } from '../../../../prisma/prisma.service';
import type {
TbankBond,
TbankShare,
TbankSyncAttempt,
} from '../../../../integrations/tbank/tbank.api';
import { PrismaService } from '../../../../prisma/prisma.service';
export type CatalogQuery = {
instrumentType: 'share' | 'bond';
query: string;
exactTicker?: boolean;
instrumentType: 'bond' | 'share';
query: string;
};
export type CatalogSource = {
instrumentType: 'share' | 'bond';
uid: string;
instrumentType: 'bond' | 'share';
kind:
| 'detail'
| 'last-price'
| 'bond-current'
| 'description'
| 'fundamentals'
| 'trading-status'
| 'comparison'
| 'coupons'
| 'yield'
| 'rating'
| 'dividends'
| 'bond-events';
| 'bond-current' |
'bond-events' |
'comparison' |
'coupons' |
'description' |
'detail' |
'dividends' |
'fundamentals' |
'last-price' |
'rating' |
'trading-status' |
'yield';
rangeKey?: string;
ticker?: string;
uid: string;
};
export type CatalogWork = CatalogQuery | CatalogSource;
export type CatalogInstrument = (TbankShare | TbankBond) & { uid: string };
export type CatalogInstrument = (TbankBond | TbankShare) & { uid: string };
const provider = 'tbank';
export function catalogQuery(input: CatalogQuery): CatalogQuery {
return {
@@ -44,13 +46,14 @@ export function catalogQuery(input: CatalogQuery): CatalogQuery {
};
}
export function catalogScope(input: CatalogWork) {
if ('uid' in input)
if ('uid' in input) {
return `catalog-source:${JSON.stringify([
input.kind,
input.kind === 'detail' ? input.instrumentType : null,
input.rangeKey ?? '',
input.uid,
])}`;
}
return `${input.exactTicker ? 'ticker' : 'catalog'}:${JSON.stringify([input.instrumentType, input.query])}`;
}
@@ -60,8 +63,8 @@ export class CatalogDiscoveryRepository {
read(input: CatalogQuery) {
return this.prisma.$transaction(async (tx) => {
const alias = input.exactTicker
? await tx.tbankInstrumentLookup.findUnique({
const alias = input.exactTicker ?
await tx.tbankInstrumentLookup.findUnique({
where: {
provider_identifierType_identifier: {
provider,
@@ -69,17 +72,17 @@ export class CatalogDiscoveryRepository {
identifier: input.query,
},
},
})
: null;
const discovery = input.exactTicker
? alias
? {
}) :
null;
const discovery = input.exactTicker ?
alias ?
{
instrumentUids: alias.matchedUids,
fetchedAt: alias.fetchedAt,
dataRevision: alias.dataRevision,
}
: null
: await tx.tbankCatalogDiscovery.findUnique({
} :
null :
await tx.tbankCatalogDiscovery.findUnique({
where: {
provider_instrumentType_query: {
provider,
@@ -101,12 +104,13 @@ export class CatalogDiscoveryRepository {
});
const byUid = new Map(rows.map((row) => [row.instrumentUid, row]));
// A damaged/missing dependency is unknown, never a confirmed empty search.
if (uids.some((uid) => !byUid.has(uid)))
if (uids.some((uid) => !byUid.has(uid))) {
return {
data: null,
fetchedAt: null,
dataRevision: String(discovery.dataRevision),
};
}
return {
data: uids.map((uid) => byUid.get(uid)?.payload as CatalogInstrument),
fetchedAt: discovery.fetchedAt,
@@ -127,9 +131,9 @@ export class CatalogDiscoveryRepository {
kind: input.kind,
source: sourceProvider(input),
rangeKey:
input.kind === 'detail'
? input.instrumentType
: (input.rangeKey ?? ''),
input.kind === 'detail' ?
input.instrumentType :
(input.rangeKey ?? ''),
})),
},
});
@@ -176,7 +180,7 @@ export class CatalogDiscoveryRepository {
},
});
const instrument = (
value as { instrument?: TbankShare | TbankBond | null }
value as { instrument?: null | TbankBond | TbankShare }
).instrument;
if (
(input.kind === 'detail' || input.kind === 'bond-current') &&
@@ -225,9 +229,9 @@ export class CatalogDiscoveryRepository {
increment: isDeepStrictEqual(
previousAlias?.matchedUids,
matchedUids,
)
? 0
: 1,
) ?
0 :
1,
},
},
});
@@ -239,9 +243,9 @@ export class CatalogDiscoveryRepository {
source: sourceProvider(input),
kind: input.kind,
rangeKey:
input.kind === 'detail'
? input.instrumentType
: (input.rangeKey ?? ''),
input.kind === 'detail' ?
input.instrumentType :
(input.rangeKey ?? ''),
};
const previous = await tx.tbankInstrumentSource.findUnique({
where: { provider_instrumentUid_source_kind_rangeKey: key },
@@ -262,7 +266,7 @@ export class CatalogDiscoveryRepository {
}
reserve(
owner: { userId: string; revision: string },
owner: { revision: string; userId: string },
input: CatalogWork,
runId: string,
active: ReadonlySet<string>,
@@ -281,8 +285,9 @@ export class CatalogDiscoveryRepository {
previous?.state === 'running' &&
previous.processRunId === runId &&
active.has(previous.attemptId)
)
) {
return { work: previous, launch: false };
}
const data = {
attemptId: randomUUID(),
processRunId: runId,
@@ -351,9 +356,9 @@ export class CatalogDiscoveryRepository {
instrumentKind: instrument.instrumentKind,
apiTradeAvailableFlag: instrument.apiTradeAvailableFlag,
currency: instrument.currency,
brand: instrument.brand
? { logoName: instrument.brand.logoName }
: undefined,
brand: instrument.brand ?
{ logoName: instrument.brand.logoName } :
undefined,
}),
) as Prisma.InputJsonObject;
await tx.tbankInstrument.upsert({
@@ -410,9 +415,9 @@ export class CatalogDiscoveryRepository {
increment: isDeepStrictEqual(
previous?.matchedUids,
instrumentUids,
)
? 0
: 1,
) ?
0 :
1,
},
},
});
@@ -436,9 +441,9 @@ export class CatalogDiscoveryRepository {
increment: isDeepStrictEqual(
previous?.instrumentUids,
instrumentUids,
)
? 0
: 1,
) ?
0 :
1,
},
},
});
@@ -472,9 +477,9 @@ export class CatalogDiscoveryRepository {
}
function sourceProvider(input: CatalogSource) {
return input.kind === 'yield' || input.kind === 'bond-events'
? 'moex'
: input.kind === 'rating'
? 'ncr'
: 'tbank';
return input.kind === 'yield' || input.kind === 'bond-events' ?
'moex' :
input.kind === 'rating' ?
'ncr' :
'tbank';
}