From 1398804a6f914f9b6b95bdc3b1389859ca25a7a9 Mon Sep 17 00:00:00 2001 From: Citrons <909229731@qq.com> Date: Mon, 24 Aug 2026 21:49:48 +0800 Subject: [PATCH] =?UTF-8?q?style(FEAT-DS-001):=20=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E8=B6=85=E7=9F=AD=E8=A1=8C=E6=83=85=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aktools/aktools.client.test.ts | 8 ++++++-- .../market-overview/aktools/aktools.client.ts | 19 ++++++------------- .../aktools/aktools.mapper.test.ts | 10 ++-------- .../market-overview/aktools/aktools.mapper.ts | 4 +--- .../market-overview/short-term.controller.ts | 9 ++------- .../short-term.service.test.ts | 8 +++++--- .../src/market-overview/short-term.service.ts | 4 +--- server/apps/api/test/short-term.e2e-spec.ts | 15 ++++++--------- server/test/process-smoke.test.ts | 6 +++++- .../market-overview/useMarketOverview.ts | 4 +--- 10 files changed, 35 insertions(+), 52 deletions(-) diff --git a/server/apps/api/src/market-overview/aktools/aktools.client.test.ts b/server/apps/api/src/market-overview/aktools/aktools.client.test.ts index f1c1b11..a73130c 100644 --- a/server/apps/api/src/market-overview/aktools/aktools.client.test.ts +++ b/server/apps/api/src/market-overview/aktools/aktools.client.test.ts @@ -27,7 +27,9 @@ describe('AKTools HTTP 客户端', () => { }); it('将 HTTP 错误转换为脱敏的客户端错误', async () => { - const fetchImpl = vi.fn().mockResolvedValue(new Response('secret upstream detail', { status: 500 })); + const fetchImpl = vi + .fn() + .mockResolvedValue(new Response('secret upstream detail', { status: 500 })); const client = createAktoolsClient({ enabled: true, baseUrl: 'http://127.0.0.1:8080', @@ -44,7 +46,9 @@ describe('AKTools HTTP 客户端', () => { }); it('将请求超时转换为稳定错误', async () => { - const fetchImpl = vi.fn().mockRejectedValue(Object.assign(new Error('aborted'), { name: 'AbortError' })); + const fetchImpl = vi + .fn() + .mockRejectedValue(Object.assign(new Error('aborted'), { name: 'AbortError' })); const client = createAktoolsClient({ enabled: true, baseUrl: 'http://127.0.0.1:8080', diff --git a/server/apps/api/src/market-overview/aktools/aktools.client.ts b/server/apps/api/src/market-overview/aktools/aktools.client.ts index a3ac180..7177743 100644 --- a/server/apps/api/src/market-overview/aktools/aktools.client.ts +++ b/server/apps/api/src/market-overview/aktools/aktools.client.ts @@ -2,11 +2,7 @@ import type { AktoolsRuntimeConfig } from '../../../../../libs/config/src/runtim import type { AktoolsDataClient, AktoolsRawRow } from './aktools.types'; export type AktoolsClientErrorKind = - | 'disabled' - | 'timeout' - | 'network' - | 'protocol' - | 'unavailable'; + 'disabled' | 'timeout' | 'network' | 'protocol' | 'unavailable'; export class AktoolsClientError extends Error { constructor( @@ -58,14 +54,11 @@ export function createAktoolsClient({ const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), timeoutMs); try { - const response = await fetchImpl( - `${endpoint}${path}?date=${encodeURIComponent(tradeDate)}`, - { - method: 'GET', - headers: { accept: 'application/json' }, - signal: controller.signal, - }, - ); + const response = await fetchImpl(`${endpoint}${path}?date=${encodeURIComponent(tradeDate)}`, { + method: 'GET', + headers: { accept: 'application/json' }, + signal: controller.signal, + }); const contentLength = response.headers.get('content-length'); if (contentLength && Number(contentLength) > maxResponseBytes) { throw new AktoolsClientError('protocol', 'AKTools 响应体超过安全上限'); diff --git a/server/apps/api/src/market-overview/aktools/aktools.mapper.test.ts b/server/apps/api/src/market-overview/aktools/aktools.mapper.test.ts index 1e2197d..e153cbd 100644 --- a/server/apps/api/src/market-overview/aktools/aktools.mapper.test.ts +++ b/server/apps/api/src/market-overview/aktools/aktools.mapper.test.ts @@ -1,10 +1,6 @@ import { describe, expect, it } from 'vitest'; -import { - mapBrokenBoardPool, - mapLimitUpPool, - mapPreviousLimitUpPool, -} from './aktools.mapper'; +import { mapBrokenBoardPool, mapLimitUpPool, mapPreviousLimitUpPool } from './aktools.mapper'; describe('AKTools 超短字段映射', () => { it('过滤缺失连板数的记录并生成连板梯队', () => { @@ -21,9 +17,7 @@ describe('AKTools 超短字段映射', () => { { board: 2, count: 1 }, { board: 3, count: 1 }, ], - industries: [ - { name: '软件服务', count: 2 }, - ], + industries: [{ name: '软件服务', count: 2 }], sealFundsAmount: 1.5, }); }); diff --git a/server/apps/api/src/market-overview/aktools/aktools.mapper.ts b/server/apps/api/src/market-overview/aktools/aktools.mapper.ts index 127b648..542ef24 100644 --- a/server/apps/api/src/market-overview/aktools/aktools.mapper.ts +++ b/server/apps/api/src/market-overview/aktools/aktools.mapper.ts @@ -74,9 +74,7 @@ export function mapBrokenBoardPool(rows: readonly unknown[]): BrokenBoardSummary return { count: rows.filter((row) => hasCode(row)).length }; } -export function mapPreviousLimitUpPool( - rows: readonly AktoolsRawRow[], -): PreviousLimitUpSummary { +export function mapPreviousLimitUpPool(rows: readonly AktoolsRawRow[]): PreviousLimitUpSummary { const changes = rows.flatMap((row) => { if (!hasCode(row)) return []; const change = toNumber(row['涨跌幅']); diff --git a/server/apps/api/src/market-overview/short-term.controller.ts b/server/apps/api/src/market-overview/short-term.controller.ts index 10d05c3..f7e59a2 100644 --- a/server/apps/api/src/market-overview/short-term.controller.ts +++ b/server/apps/api/src/market-overview/short-term.controller.ts @@ -1,18 +1,13 @@ import { Controller, Get, Inject } from '@nestjs/common'; import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; -import { - ShortTermConclusionResponseDto, - ShortTermEmotionResponseDto, -} from './short-term.dto'; +import { ShortTermConclusionResponseDto, ShortTermEmotionResponseDto } from './short-term.dto'; import { ShortTermMarketService } from './short-term.service'; @ApiTags('market-overview-short-term') @Controller('market-overview/short-term') export class ShortTermMarketController { - constructor( - @Inject(ShortTermMarketService) private readonly service: ShortTermMarketService, - ) {} + constructor(@Inject(ShortTermMarketService) private readonly service: ShortTermMarketService) {} @Get('emotion') @ApiOkResponse({ type: ShortTermEmotionResponseDto }) diff --git a/server/apps/api/src/market-overview/short-term.service.test.ts b/server/apps/api/src/market-overview/short-term.service.test.ts index 6122017..b6b3cd1 100644 --- a/server/apps/api/src/market-overview/short-term.service.test.ts +++ b/server/apps/api/src/market-overview/short-term.service.test.ts @@ -14,9 +14,11 @@ describe('短线行情服务', () => { it('组合涨停、炸板和昨日涨停数据并返回新鲜情绪快照', async () => { const client = { - getLimitUpPool: vi.fn().mockResolvedValue([ - { 代码: '000001', 连板数: 4, 所属行业: '软件服务', 封板资金: 100_000_000 }, - ]), + getLimitUpPool: vi + .fn() + .mockResolvedValue([ + { 代码: '000001', 连板数: 4, 所属行业: '软件服务', 封板资金: 100_000_000 }, + ]), getBrokenBoardPool: vi.fn().mockResolvedValue([{ 代码: '000002' }]), getPreviousLimitUpPool: vi.fn().mockResolvedValue([{ 代码: '000003', 涨跌幅: 2 }]), }; diff --git a/server/apps/api/src/market-overview/short-term.service.ts b/server/apps/api/src/market-overview/short-term.service.ts index 74d9ddb..bbb15f5 100644 --- a/server/apps/api/src/market-overview/short-term.service.ts +++ b/server/apps/api/src/market-overview/short-term.service.ts @@ -98,9 +98,7 @@ function createConclusion(data: ShortTermEmotionDataDto): ShortTermConclusionDat @Injectable() export class ShortTermMarketService { - constructor( - @Inject(AKTOOLS_CLIENT_PORT) private readonly aktoolsClient: AktoolsDataClient, - ) {} + constructor(@Inject(AKTOOLS_CLIENT_PORT) private readonly aktoolsClient: AktoolsDataClient) {} async getEmotion(): Promise { const tradeDate = getShanghaiDate(new Date()); diff --git a/server/apps/api/test/short-term.e2e-spec.ts b/server/apps/api/test/short-term.e2e-spec.ts index 993221d..3612924 100644 --- a/server/apps/api/test/short-term.e2e-spec.ts +++ b/server/apps/api/test/short-term.e2e-spec.ts @@ -4,7 +4,10 @@ import request from 'supertest'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { ShortTermMarketController } from '../src/market-overview/short-term.controller'; -import { AKTOOLS_CLIENT_PORT, ShortTermMarketService } from '../src/market-overview/short-term.service'; +import { + AKTOOLS_CLIENT_PORT, + ShortTermMarketService, +} from '../src/market-overview/short-term.service'; describe('短线行情 HTTP API', () => { let app: INestApplication | undefined; @@ -31,10 +34,7 @@ describe('短线行情 HTTP API', () => { }; const moduleRef = await Test.createTestingModule({ controllers: [ShortTermMarketController], - providers: [ - ShortTermMarketService, - { provide: AKTOOLS_CLIENT_PORT, useValue: client }, - ], + providers: [ShortTermMarketService, { provide: AKTOOLS_CLIENT_PORT, useValue: client }], }).compile(); app = moduleRef.createNestApplication(); app.setGlobalPrefix('api/v1'); @@ -61,10 +61,7 @@ describe('短线行情 HTTP API', () => { }; const moduleRef = await Test.createTestingModule({ controllers: [ShortTermMarketController], - providers: [ - ShortTermMarketService, - { provide: AKTOOLS_CLIENT_PORT, useValue: client }, - ], + providers: [ShortTermMarketService, { provide: AKTOOLS_CLIENT_PORT, useValue: client }], }).compile(); app = moduleRef.createNestApplication(); app.setGlobalPrefix('api/v1'); diff --git a/server/test/process-smoke.test.ts b/server/test/process-smoke.test.ts index d9bbf5b..ea6fe68 100644 --- a/server/test/process-smoke.test.ts +++ b/server/test/process-smoke.test.ts @@ -60,7 +60,11 @@ describe('NestJS 三进程入口', () => { logLevel: 'debug', api: Object.freeze({ host: '127.0.0.1', port: 3000 }), tdx: Object.freeze({ baseUrl: 'http://127.0.0.1:17710', timeoutMs: 5000 }), - aktools: Object.freeze({ baseUrl: 'http://127.0.0.1:8080', enabled: false, timeoutMs: 10000 }), + aktools: Object.freeze({ + baseUrl: 'http://127.0.0.1:8080', + enabled: false, + timeoutMs: 10000, + }), redis: redisConfig, mysql: mysqlConfig, ai: aiConfig, diff --git a/web/src/views/market-overview/useMarketOverview.ts b/web/src/views/market-overview/useMarketOverview.ts index da523c9..bd3f09b 100644 --- a/web/src/views/market-overview/useMarketOverview.ts +++ b/web/src/views/market-overview/useMarketOverview.ts @@ -67,9 +67,7 @@ export function useMarketOverview( funds.value, shortTermEmotion.value, shortTermConclusion.value, - ].some( - (module) => module.status === 'loading', - ), + ].some((module) => module.status === 'loading'), ); function setLoading() {