diff --git a/apps/api/src/app/endpoints/market-data/market-data.controller.ts b/apps/api/src/app/endpoints/market-data/market-data.controller.ts index f6857283b..f60eea904 100644 --- a/apps/api/src/app/endpoints/market-data/market-data.controller.ts +++ b/apps/api/src/app/endpoints/market-data/market-data.controller.ts @@ -64,14 +64,16 @@ export class MarketDataController { dataGatheringItem: { dataSource: ghostfolioFearAndGreedIndexDataSourceCryptocurrencies, symbol: ghostfolioFearAndGreedIndexSymbolCryptocurrencies - } + }, + useIntradayData: true }), this.symbolService.get({ includeHistoricalData, dataGatheringItem: { dataSource: ghostfolioFearAndGreedIndexDataSourceStocks, symbol: ghostfolioFearAndGreedIndexSymbolStocks - } + }, + useIntradayData: true }) ]); diff --git a/apps/api/src/app/symbol/symbol.service.ts b/apps/api/src/app/symbol/symbol.service.ts index fdbc7f84c..f2bf4beb1 100644 --- a/apps/api/src/app/symbol/symbol.service.ts +++ b/apps/api/src/app/symbol/symbol.service.ts @@ -24,15 +24,30 @@ export class SymbolService { public async get({ dataGatheringItem, - includeHistoricalData + includeHistoricalData, + useIntradayData = false }: { dataGatheringItem: DataGatheringItem; includeHistoricalData?: number; + useIntradayData?: boolean; }): Promise { - const quotes = await this.dataProviderService.getQuotes({ - items: [dataGatheringItem] - }); - const { currency, marketPrice } = quotes[dataGatheringItem.symbol] ?? {}; + let currency: string; + let marketPrice: number; + + if (useIntradayData) { + const latestMarketData = await this.marketDataService.getLatest({ + dataSource: dataGatheringItem.dataSource, + symbol: dataGatheringItem.symbol + }); + + marketPrice = latestMarketData?.marketPrice; + } else { + const quotes = await this.dataProviderService.getQuotes({ + items: [dataGatheringItem] + }); + + ({ currency, marketPrice } = quotes[dataGatheringItem.symbol] ?? {}); + } if (dataGatheringItem.dataSource && marketPrice >= 0) { let historicalData: HistoricalDataItem[] = []; diff --git a/apps/api/src/services/market-data/market-data.service.ts b/apps/api/src/services/market-data/market-data.service.ts index 87b08e1bd..27c741055 100644 --- a/apps/api/src/services/market-data/market-data.service.ts +++ b/apps/api/src/services/market-data/market-data.service.ts @@ -40,6 +40,19 @@ export class MarketDataService { }); } + public async getLatest({ + dataSource, + symbol + }: AssetProfileIdentifier): Promise { + return this.prismaService.marketData.findFirst({ + orderBy: [{ date: 'desc' }], + where: { + dataSource, + symbol + } + }); + } + public async getMax({ dataSource, symbol }: AssetProfileIdentifier) { return this.prismaService.marketData.findFirst({ select: {