From 80ecd7d76e182b0f2814c5eee64f7e5330b57804 Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Thu, 17 Aug 2023 20:15:35 +0200 Subject: [PATCH] Add currencies preset --- apps/api/src/app/admin/admin.service.ts | 40 ++++++++++++++++--- .../admin-market-data.component.ts | 5 +++ .../src/lib/types/market-data-preset.type.ts | 5 ++- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 996914c4e..7563909dd 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -6,14 +6,12 @@ import { MarketDataService } from '@ghostfolio/api/services/market-data/market-d import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; -import { - DEFAULT_PAGE_SIZE, - PROPERTY_CURRENCIES -} from '@ghostfolio/common/config'; +import { PROPERTY_CURRENCIES } from '@ghostfolio/common/config'; import { AdminData, AdminMarketData, AdminMarketDataDetails, + AdminMarketDataItem, Filter, UniqueAsset } from '@ghostfolio/common/interfaces'; @@ -121,7 +119,9 @@ export class AdminService { [{ symbol: 'asc' }]; const where: Prisma.SymbolProfileWhereInput = {}; - if ( + if (presetId === 'CURRENCIES') { + return this.getMarketDataForCurrencies(); + } else if ( presetId === 'ETF_WITHOUT_COUNTRIES' || presetId === 'ETF_WITHOUT_SECTORS' ) { @@ -313,6 +313,36 @@ export class AdminService { return response; } + private async getMarketDataForCurrencies(): Promise { + const marketDataItems = await this.prismaService.marketData.groupBy({ + _count: true, + by: ['dataSource', 'symbol'] + }); + + const marketData: AdminMarketDataItem[] = this.exchangeRateDataService + .getCurrencyPairs() + .map(({ dataSource, symbol }) => { + const marketDataItemCount = + marketDataItems.find((marketDataItem) => { + return ( + marketDataItem.dataSource === dataSource && + marketDataItem.symbol === symbol + ); + })?._count ?? 0; + + return { + dataSource, + marketDataItemCount, + symbol, + assetClass: 'CASH', + countriesCount: 0, + sectorsCount: 0 + }; + }); + + return { marketData, count: marketData.length }; + } + private async getUsersWithAnalytics(): Promise { let orderBy: any = { createdAt: 'desc' diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index df2b84003..7896db655 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -60,6 +60,11 @@ export class AdminMarketDataComponent }; }) .concat([ + { + id: 'CURRENCIES', + label: $localize`Currencies`, + type: 'PRESET_ID' + }, { id: 'ETF_WITHOUT_COUNTRIES', label: $localize`ETFs without Countries`, diff --git a/libs/common/src/lib/types/market-data-preset.type.ts b/libs/common/src/lib/types/market-data-preset.type.ts index 351f863dd..497c4cf3c 100644 --- a/libs/common/src/lib/types/market-data-preset.type.ts +++ b/libs/common/src/lib/types/market-data-preset.type.ts @@ -1 +1,4 @@ -export type MarketDataPreset = 'ETF_WITHOUT_COUNTRIES' | 'ETF_WITHOUT_SECTORS'; +export type MarketDataPreset = + | 'CURRENCIES' + | 'ETF_WITHOUT_COUNTRIES' + | 'ETF_WITHOUT_SECTORS';