From aed50bebcc31d488ca521c7bcf9ae748ab9e182f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 28 Aug 2026 10:51:24 +0200 Subject: [PATCH] Fix creation of asset profiles with symbol in wrong letter case by using original symbol --- .../symbol-profile.service.spec.ts | 18 +++++++++++++----- .../symbol-profile/symbol-profile.service.ts | 10 ++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.spec.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.spec.ts index 6e61583db..1d84e193c 100644 --- a/apps/api/src/services/symbol-profile/symbol-profile.service.spec.ts +++ b/apps/api/src/services/symbol-profile/symbol-profile.service.spec.ts @@ -3,12 +3,18 @@ import { DataSource } from '@prisma/client'; import { SymbolProfileService } from './symbol-profile.service'; describe('SymbolProfileService', () => { - let prismaService: { symbolProfile: { findMany: jest.Mock } }; let symbolProfileService: SymbolProfileService; + let prismaService: { + symbolProfile: { findMany: jest.Mock; findUnique: jest.Mock }; + }; + beforeEach(() => { prismaService = { - symbolProfile: { findMany: jest.fn().mockResolvedValue([]) } + symbolProfile: { + findMany: jest.fn().mockResolvedValue([]), + findUnique: jest.fn().mockResolvedValue(null) + } }; symbolProfileService = new SymbolProfileService(prismaService as any); @@ -16,9 +22,9 @@ describe('SymbolProfileService', () => { describe('getSymbolOfAssetProfile', () => { it('Keeps the symbol of the existing asset profile', async () => { - prismaService.symbolProfile.findMany.mockResolvedValue([ - { symbol: 'AAPL' } - ]); + prismaService.symbolProfile.findUnique.mockResolvedValue({ + symbol: 'AAPL' + }); const symbol = await symbolProfileService.getSymbolOfAssetProfile({ dataSource: DataSource.YAHOO, @@ -27,6 +33,7 @@ describe('SymbolProfileService', () => { }); expect(symbol).toEqual('AAPL'); + expect(prismaService.symbolProfile.findMany).not.toHaveBeenCalled(); }); it('Keeps the letter case of the existing asset profile', async () => { @@ -100,6 +107,7 @@ describe('SymbolProfileService', () => { expect(symbol).toEqual('GF_apple'); expect(prismaService.symbolProfile.findMany).not.toHaveBeenCalled(); + expect(prismaService.symbolProfile.findUnique).not.toHaveBeenCalled(); }); }); }); diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.ts index 1afbce69a..07f482884 100644 --- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts +++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts @@ -143,6 +143,16 @@ export class SymbolProfileService { return symbol; } + const symbolProfileWithSameSymbol = + await this.prismaService.symbolProfile.findUnique({ + select: { symbol: true }, + where: { dataSource_symbol: { dataSource, symbol } } + }); + + if (symbolProfileWithSameSymbol) { + return symbol; + } + const symbolProfiles = ( await this.prismaService.symbolProfile.findMany({ orderBy: { symbol: 'asc' },