From 9c086edffe3ec9c6c1c15a8bf1c8bfc96ef840f9 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 23 Jan 2022 17:02:12 +0100 Subject: [PATCH] Feature/extend historical data view in admin control (#646) * Extend market data view * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.service.ts | 68 +++++++++++++++++-- .../admin-market-data/admin-market-data.html | 6 +- .../home-overview/home-overview.html | 2 +- .../interfaces/admin-market-data.interface.ts | 5 ++ libs/common/src/lib/interfaces/index.ts | 6 +- 6 files changed, 79 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 40bfd330b..cae550a08 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 3ea3d8f22..4df3ea09f 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 50d6790a5..d1e45bfc9 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 }}