From d919622932799f8289621acc3f3f88b0bf52cdac Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 29 Apr 2025 20:56:28 +0200 Subject: [PATCH] Bugfix/fix create watchlist item for new asset profile (#4625) * Fix create watchlist item for new asset profile --- .../endpoints/watchlist/watchlist.module.ts | 6 ++++ .../endpoints/watchlist/watchlist.service.ts | 33 ++++++++++++++++--- .../src/app/pages/home/home-page.component.ts | 2 +- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/apps/api/src/app/endpoints/watchlist/watchlist.module.ts b/apps/api/src/app/endpoints/watchlist/watchlist.module.ts index 15115888b..2addd2de0 100644 --- a/apps/api/src/app/endpoints/watchlist/watchlist.module.ts +++ b/apps/api/src/app/endpoints/watchlist/watchlist.module.ts @@ -1,6 +1,9 @@ import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; +import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; +import { DataGatheringModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module'; +import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; import { Module } from '@nestjs/common'; @@ -10,7 +13,10 @@ import { WatchlistService } from './watchlist.service'; @Module({ controllers: [WatchlistController], imports: [ + DataGatheringModule, + DataProviderModule, PrismaModule, + SymbolProfileModule, TransformDataSourceInRequestModule, TransformDataSourceInResponseModule ], diff --git a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts index fdb9dd97a..6ff71ec50 100644 --- a/apps/api/src/app/endpoints/watchlist/watchlist.service.ts +++ b/apps/api/src/app/endpoints/watchlist/watchlist.service.ts @@ -1,12 +1,20 @@ +import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; +import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; +import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; -import { Injectable, NotFoundException } from '@nestjs/common'; -import { DataSource } from '@prisma/client'; +import { BadRequestException, Injectable } from '@nestjs/common'; +import { DataSource, Prisma } from '@prisma/client'; @Injectable() export class WatchlistService { - public constructor(private readonly prismaService: PrismaService) {} + public constructor( + private readonly dataGatheringService: DataGatheringService, + private readonly dataProviderService: DataProviderService, + private readonly prismaService: PrismaService, + private readonly symbolProfileService: SymbolProfileService + ) {} public async createWatchlistItem({ dataSource, @@ -24,11 +32,26 @@ export class WatchlistService { }); if (!symbolProfile) { - throw new NotFoundException( - `Asset profile not found for ${symbol} (${dataSource})` + const assetProfiles = await this.dataProviderService.getAssetProfiles([ + { dataSource, symbol } + ]); + + if (!assetProfiles[symbol]?.currency) { + throw new BadRequestException( + `Asset profile not found for ${symbol} (${dataSource})` + ); + } + + await this.symbolProfileService.add( + assetProfiles[symbol] as Prisma.SymbolProfileCreateInput ); } + await this.dataGatheringService.gatherSymbol({ + dataSource, + symbol + }); + await this.prismaService.user.update({ data: { watchlist: { diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts index 70e0c34fe..928ad2931 100644 --- a/apps/client/src/app/pages/home/home-page.component.ts +++ b/apps/client/src/app/pages/home/home-page.component.ts @@ -54,7 +54,7 @@ export class HomePageComponent implements OnDestroy, OnInit { path: ['/home', 'market'] }, { - iconName: 'star-outline', + iconName: 'bookmark-outline', label: $localize`Watchlist`, path: ['/home', 'watchlist'], showCondition: this.user?.settings?.isExperimentalFeatures