Browse Source

#3739 Refactoring

- Using promise.all
- Using getAssetProfileIdentifier
- Codestyles
pull/3752/head
Verbindolai 12 months ago
parent
commit
57697a0627
  1. 57
      apps/api/src/app/admin/admin.service.ts

57
apps/api/src/app/admin/admin.service.ts

@ -15,7 +15,7 @@ import {
PROPERTY_IS_READ_ONLY_MODE, PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_IS_USER_SIGNUP_ENABLED PROPERTY_IS_USER_SIGNUP_ENABLED
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { isCurrency, getCurrencyFromSymbol } from '@ghostfolio/common/helper'; import { isCurrency, getCurrencyFromSymbol, getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { import {
AdminData, AdminData,
AdminMarketData, AdminMarketData,
@ -278,7 +278,7 @@ export class AdminService {
const lastMarketPriceMap = new Map<string, number>(); const lastMarketPriceMap = new Map<string, number>();
for (const { symbol, dataSource, marketPrice } of lastMarketPrices) { for (const { symbol, dataSource, marketPrice } of lastMarketPrices) {
lastMarketPriceMap.set(`${symbol}_${dataSource}`, marketPrice); lastMarketPriceMap.set(getAssetProfileIdentifier({dataSource, symbol}), marketPrice);
} }
let marketData: AdminMarketDataItem[] = await Promise.all( let marketData: AdminMarketDataItem[] = await Promise.all(
@ -310,7 +310,7 @@ export class AdminService {
})?._count ?? 0; })?._count ?? 0;
const sectorsCount = sectors ? Object.keys(sectors).length : 0; const sectorsCount = sectors ? Object.keys(sectors).length : 0;
const lastMarketPrice = lastMarketPriceMap.get( const lastMarketPrice = lastMarketPriceMap.get(
`${symbol}_${dataSource}` getAssetProfileIdentifier({dataSource, symbol})
); );
return { return {
@ -321,6 +321,7 @@ export class AdminService {
countriesCount, countriesCount,
dataSource, dataSource,
id, id,
lastMarketPrice,
name, name,
symbol, symbol,
marketDataItemCount, marketDataItemCount,
@ -328,8 +329,7 @@ export class AdminService {
activitiesCount: _count.Order, activitiesCount: _count.Order,
date: Order?.[0]?.date, date: Order?.[0]?.date,
isUsedByUsersWithSubscription: isUsedByUsersWithSubscription:
await isUsedByUsersWithSubscription, await isUsedByUsersWithSubscription
lastMarketPrice: lastMarketPrice
}; };
} }
) )
@ -536,30 +536,31 @@ export class AdminService {
} }
private async getMarketDataForCurrencies(): Promise<AdminMarketData> { private async getMarketDataForCurrencies(): Promise<AdminMarketData> {
const marketDataItems = await this.prismaService.marketData.groupBy({
_count: true,
by: ['dataSource', 'symbol']
});
const currencyPairs = this.exchangeRateDataService.getCurrencyPairs(); const currencyPairs = this.exchangeRateDataService.getCurrencyPairs();
// Fetch the last market prices for all currency pairs in one query
const lastMarketPrices = await this.prismaService.marketData.findMany({ const [marketDataItems, lastMarketPrices] = await Promise.all([
select: { this.prismaService.marketData.groupBy({
symbol: true, _count: true,
dataSource: true, by: ['dataSource', 'symbol']
marketPrice: true }),
}, this.prismaService.marketData.findMany({
where: { select: {
symbol: { in: currencyPairs.map(({ symbol }) => symbol) }, symbol: true,
dataSource: { in: currencyPairs.map(({ dataSource }) => dataSource) } dataSource: true,
}, marketPrice: true
orderBy: { date: 'desc' }, },
distinct: ['symbol', 'dataSource'] where: {
}); symbol: { in: currencyPairs.map(({ symbol }) => symbol) },
dataSource: { in: currencyPairs.map(({ dataSource }) => dataSource) }
},
orderBy: { date: 'desc' },
distinct: ['symbol', 'dataSource']
})
]);
const lastMarketPriceMap = new Map<string, number>(); const lastMarketPriceMap = new Map<string, number>();
for (const { symbol, dataSource, marketPrice } of lastMarketPrices) { for (const { symbol, dataSource, marketPrice } of lastMarketPrices) {
lastMarketPriceMap.set(`${symbol}_${dataSource}`, marketPrice); lastMarketPriceMap.set(getAssetProfileIdentifier({dataSource, symbol}), marketPrice);
} }
const marketDataPromise: Promise<AdminMarketDataItem>[] = currencyPairs.map( const marketDataPromise: Promise<AdminMarketDataItem>[] = currencyPairs.map(
@ -582,7 +583,7 @@ export class AdminService {
); );
})?._count ?? 0; })?._count ?? 0;
const lastMarketPrice = lastMarketPriceMap.get( const lastMarketPrice = lastMarketPriceMap.get(
`${symbol}_${dataSource}` getAssetProfileIdentifier({dataSource, symbol})
); );
return { return {
@ -596,9 +597,9 @@ export class AdminService {
countriesCount: 0, countriesCount: 0,
date: dateOfFirstActivity, date: dateOfFirstActivity,
id: undefined, id: undefined,
lastMarketPrice,
name: symbol, name: symbol,
sectorsCount: 0, sectorsCount: 0
lastMarketPrice: lastMarketPrice
}; };
} }
); );

Loading…
Cancel
Save