From 57697a0627163d9bfdc3d2e009a13bf83de94718 Mon Sep 17 00:00:00 2001 From: Verbindolai Date: Sat, 14 Sep 2024 20:24:10 +0200 Subject: [PATCH] #3739 Refactoring - Using promise.all - Using getAssetProfileIdentifier - Codestyles --- apps/api/src/app/admin/admin.service.ts | 57 +++++++++++++------------ 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 4d16d3c7d..9643dad8f 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -15,7 +15,7 @@ import { PROPERTY_IS_READ_ONLY_MODE, PROPERTY_IS_USER_SIGNUP_ENABLED } from '@ghostfolio/common/config'; -import { isCurrency, getCurrencyFromSymbol } from '@ghostfolio/common/helper'; +import { isCurrency, getCurrencyFromSymbol, getAssetProfileIdentifier } from '@ghostfolio/common/helper'; import { AdminData, AdminMarketData, @@ -278,7 +278,7 @@ export class AdminService { const lastMarketPriceMap = new Map(); for (const { symbol, dataSource, marketPrice } of lastMarketPrices) { - lastMarketPriceMap.set(`${symbol}_${dataSource}`, marketPrice); + lastMarketPriceMap.set(getAssetProfileIdentifier({dataSource, symbol}), marketPrice); } let marketData: AdminMarketDataItem[] = await Promise.all( @@ -310,7 +310,7 @@ export class AdminService { })?._count ?? 0; const sectorsCount = sectors ? Object.keys(sectors).length : 0; const lastMarketPrice = lastMarketPriceMap.get( - `${symbol}_${dataSource}` + getAssetProfileIdentifier({dataSource, symbol}) ); return { @@ -321,6 +321,7 @@ export class AdminService { countriesCount, dataSource, id, + lastMarketPrice, name, symbol, marketDataItemCount, @@ -328,8 +329,7 @@ export class AdminService { activitiesCount: _count.Order, date: Order?.[0]?.date, isUsedByUsersWithSubscription: - await isUsedByUsersWithSubscription, - lastMarketPrice: lastMarketPrice + await isUsedByUsersWithSubscription }; } ) @@ -536,30 +536,31 @@ export class AdminService { } private async getMarketDataForCurrencies(): Promise { - const marketDataItems = await this.prismaService.marketData.groupBy({ - _count: true, - by: ['dataSource', 'symbol'] - }); - const currencyPairs = this.exchangeRateDataService.getCurrencyPairs(); - // Fetch the last market prices for all currency pairs in one query - const lastMarketPrices = await this.prismaService.marketData.findMany({ - select: { - symbol: true, - dataSource: true, - marketPrice: true - }, - where: { - symbol: { in: currencyPairs.map(({ symbol }) => symbol) }, - dataSource: { in: currencyPairs.map(({ dataSource }) => dataSource) } - }, - orderBy: { date: 'desc' }, - distinct: ['symbol', 'dataSource'] - }); + + const [marketDataItems, lastMarketPrices] = await Promise.all([ + this.prismaService.marketData.groupBy({ + _count: true, + by: ['dataSource', 'symbol'] + }), + this.prismaService.marketData.findMany({ + select: { + symbol: true, + dataSource: true, + marketPrice: true + }, + where: { + symbol: { in: currencyPairs.map(({ symbol }) => symbol) }, + dataSource: { in: currencyPairs.map(({ dataSource }) => dataSource) } + }, + orderBy: { date: 'desc' }, + distinct: ['symbol', 'dataSource'] + }) + ]); const lastMarketPriceMap = new Map(); for (const { symbol, dataSource, marketPrice } of lastMarketPrices) { - lastMarketPriceMap.set(`${symbol}_${dataSource}`, marketPrice); + lastMarketPriceMap.set(getAssetProfileIdentifier({dataSource, symbol}), marketPrice); } const marketDataPromise: Promise[] = currencyPairs.map( @@ -582,7 +583,7 @@ export class AdminService { ); })?._count ?? 0; const lastMarketPrice = lastMarketPriceMap.get( - `${symbol}_${dataSource}` + getAssetProfileIdentifier({dataSource, symbol}) ); return { @@ -596,9 +597,9 @@ export class AdminService { countriesCount: 0, date: dateOfFirstActivity, id: undefined, + lastMarketPrice, name: symbol, - sectorsCount: 0, - lastMarketPrice: lastMarketPrice + sectorsCount: 0 }; } );