From 9e0281c6279d1688e0d4e10549c99cb447ae5c4d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 2 Mar 2024 14:14:47 +0100 Subject: [PATCH] Refactoring --- apps/api/src/app/order/order.service.ts | 13 ++++++++++++- apps/api/src/app/portfolio/current-rate.service.ts | 10 +++++++++- .../data-provider/manual/manual.service.ts | 14 -------------- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index a88aa4462..79738c27e 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -8,7 +8,7 @@ import { GATHER_ASSET_PROFILE_PROCESS_OPTIONS } from '@ghostfolio/common/config'; import { getAssetProfileIdentifier } from '@ghostfolio/common/helper'; -import { Filter } from '@ghostfolio/common/interfaces'; +import { Filter, UniqueAsset } from '@ghostfolio/common/interfaces'; import { OrderWithAccount } from '@ghostfolio/common/types'; import { Injectable } from '@nestjs/common'; @@ -200,6 +200,17 @@ export class OrderService { return count; } + public async getLatestOrder({ dataSource, symbol }: UniqueAsset) { + return this.prismaService.order.findFirst({ + orderBy: { + date: 'desc' + }, + where: { + SymbolProfile: { dataSource, symbol } + } + }); + } + public async getOrders({ filters, includeDrafts = false, diff --git a/apps/api/src/app/portfolio/current-rate.service.ts b/apps/api/src/app/portfolio/current-rate.service.ts index 73cad45e6..f4855329e 100644 --- a/apps/api/src/app/portfolio/current-rate.service.ts +++ b/apps/api/src/app/portfolio/current-rate.service.ts @@ -1,3 +1,4 @@ +import { OrderService } from '@ghostfolio/api/app/order/order.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { resetHours } from '@ghostfolio/common/helper'; @@ -22,6 +23,7 @@ export class CurrentRateService { public constructor( private readonly dataProviderService: DataProviderService, private readonly marketDataService: MarketDataService, + private readonly orderService: OrderService, @Inject(REQUEST) private readonly request: RequestWithUser ) {} @@ -121,11 +123,17 @@ export class CurrentRateService { }); if (!value) { + // Fallback to unit price of latest activity + const latestActivity = await this.orderService.getLatestOrder({ + dataSource, + symbol + }); + value = { dataSource, symbol, date: today, - marketPrice: 0 + marketPrice: latestActivity?.unitPrice ?? 0 }; response.values.push(value); diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index 57c263337..4ff3ba653 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -171,20 +171,6 @@ export class ManualService implements DataProviderInterface { return marketDataItem.symbol === symbol; })?.marketPrice; - if (!marketPrice) { - // Fallback to unit price of last activity - const lastActivity = await this.prismaService.order.findFirst({ - orderBy: { - date: 'desc' - }, - where: { - SymbolProfile: { symbol } - } - }); - - marketPrice = lastActivity?.unitPrice; - } - response[symbol] = { currency, marketPrice,