From 87eef996f4557b69e30ac8174746ab93e54d6c0e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 24 Aug 2026 20:38:54 +0200 Subject: [PATCH] Fix response of historical market data gathering for a specific date --- apps/api/src/app/admin/admin.controller.ts | 11 ++++++- .../data-gathering.service.spec.ts | 29 +++++++++++++++++++ .../data-gathering/data-gathering.service.ts | 4 +-- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index ade8781d6..f47d216f4 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -213,11 +213,20 @@ export class AdminController { ); } - return this.dataGatheringService.gatherSymbolForDate({ + const marketData = await this.dataGatheringService.gatherSymbolForDate({ dataSource, date, symbol }); + + if (!marketData) { + throw new HttpException( + getReasonPhrase(StatusCodes.NOT_FOUND), + StatusCodes.NOT_FOUND + ); + } + + return marketData; } @HasPermission(permissions.accessAdminControl) diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.spec.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.spec.ts index 51bf9ef6a..7830d428e 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.spec.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.spec.ts @@ -219,5 +219,34 @@ describe('DataGatheringService', () => { }) ); }); + + it('returns the upserted market data', async () => { + dataProviderService.getHistoricalRaw.mockResolvedValue({ + 'YAHOO-AAPL': { + '2026-08-22': { marketPrice: 100 } + } + }); + prismaService.marketData.upsert.mockResolvedValue({ marketPrice: 100 }); + + const marketData = await dataGatheringService.gatherSymbolForDate({ + dataSource: 'YAHOO', + date: parseDate('2026-08-22'), + symbol: 'AAPL' + }); + + expect(marketData).toEqual({ marketPrice: 100 }); + }); + + it('returns undefined if the data provider has no market price', async () => { + dataProviderService.getHistoricalRaw.mockResolvedValue({}); + + const marketData = await dataGatheringService.gatherSymbolForDate({ + dataSource: 'YAHOO', + date: parseDate('2026-08-22'), + symbol: 'AAPL' + }); + + expect(marketData).toBeUndefined(); + }); }); }); diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts index 531f36f0d..8e38f02dd 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts @@ -349,9 +349,9 @@ export class DataGatheringService { } } catch (error) { this.logger.error(error.message); - } finally { - return undefined; } + + return undefined; } public async gatherSymbols({