diff --git a/CHANGELOG.md b/CHANGELOG.md index 40bfd330..cae550a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Extended the historical data view in the admin control panel - Upgraded _Stripe_ dependencies - Upgraded `prisma` from version `3.7.0` to `3.8.1` diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 3ea3d8f2..4df3ea09 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -9,7 +9,8 @@ import { PROPERTY_CURRENCIES, baseCurrency } from '@ghostfolio/common/config'; import { AdminData, AdminMarketData, - AdminMarketDataDetails + AdminMarketDataDetails, + AdminMarketDataItem } from '@ghostfolio/common/interfaces'; import { Injectable } from '@nestjs/common'; import { Property } from '@prisma/client'; @@ -56,12 +57,67 @@ export class AdminService { } public async getMarketData(): Promise { - return { - marketData: await ( - await this.dataGatheringService.getSymbolsMax() - ).map((symbol) => { - return symbol; + const marketData = await this.prismaService.marketData.groupBy({ + _count: true, + by: ['dataSource', 'symbol'] + }); + + const currencyPairsToGather: AdminMarketDataItem[] = + this.exchangeRateDataService + .getCurrencyPairs() + .map(({ dataSource, symbol }) => { + const marketDataItemCount = + marketData.find((marketDataItem) => { + return ( + marketDataItem.dataSource === dataSource && + marketDataItem.symbol === symbol + ); + })?._count ?? 0; + + return { + dataSource, + marketDataItemCount, + symbol + }; + }); + + const symbolProfilesToGather: AdminMarketDataItem[] = ( + await this.prismaService.symbolProfile.findMany({ + orderBy: [{ symbol: 'asc' }], + select: { + _count: { + select: { Order: true } + }, + dataSource: true, + Order: { + orderBy: [{ date: 'asc' }], + select: { date: true }, + take: 1 + }, + scraperConfiguration: true, + symbol: true + } }) + ).map((symbolProfile) => { + const marketDataItemCount = + marketData.find((marketDataItem) => { + return ( + marketDataItem.dataSource === symbolProfile.dataSource && + marketDataItem.symbol === symbolProfile.symbol + ); + })?._count ?? 0; + + return { + marketDataItemCount, + activityCount: symbolProfile._count.Order, + dataSource: symbolProfile.dataSource, + date: symbolProfile.Order?.[0]?.date, + symbol: symbolProfile.symbol + }; + }); + + return { + marketData: [...currencyPairsToGather, ...symbolProfilesToGather] }; } diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.html b/apps/client/src/app/components/admin-market-data/admin-market-data.html index 50d6790a..d1e45bfc 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.html +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -6,7 +6,9 @@ Symbol Data Source - First Transaction + First Activity + Activity Count + Historical Data @@ -21,6 +23,8 @@ {{ (item.date | date: defaultDateFormat) ?? '' }} + {{ item.activityCount }} + {{ item.marketDataItemCount }}