From 4fe73378e9fcf49d19746fece1864a2578745e7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Marinho?= Date: Fri, 14 Jun 2024 19:41:09 +0100 Subject: [PATCH] Feature/extend asset profile for currency --- apps/api/src/app/admin/admin.service.ts | 30 +++++++++++++++++-- .../asset-profile-dialog.html | 2 +- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index c061c996c..6dfedc32a 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -13,11 +13,13 @@ import { PROPERTY_IS_READ_ONLY_MODE, PROPERTY_IS_USER_SIGNUP_ENABLED } from '@ghostfolio/common/config'; +import { isCurrency } from '@ghostfolio/common/helper'; import { AdminData, AdminMarketData, AdminMarketDataDetails, AdminMarketDataItem, + EnhancedSymbolProfile, Filter, UniqueAsset } from '@ghostfolio/common/interfaces'; @@ -32,6 +34,7 @@ import { Property, SymbolProfile } from '@prisma/client'; +import { isNumber } from 'class-validator'; import { differenceInDays } from 'date-fns'; import { groupBy } from 'lodash'; @@ -295,6 +298,27 @@ export class AdminService { dataSource, symbol }: UniqueAsset): Promise { + let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0; + let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity']; + let currency: EnhancedSymbolProfile['currency'] = '-'; + + if (isCurrency(symbol.replace(DEFAULT_CURRENCY, ''))) { + currency = symbol.replace(DEFAULT_CURRENCY, ''); + const { _count, _min } = await this.prismaService.order.aggregate({ + _count: true, + _min: { + date: true + }, + where: { + SymbolProfile: { + currency + } + } + }); + activitiesCount = _count as number; + dateOfFirstActivity = _min.date; + } + const [[assetProfile], marketData] = await Promise.all([ this.symbolProfileService.getSymbolProfiles([ { @@ -322,12 +346,14 @@ export class AdminService { return { marketData, assetProfile: assetProfile ?? { + currency, + dataSource, symbol, - currency: '-' + activitiesCount, + dateOfFirstActivity } }; } - public async patchAssetProfileData({ assetClass, assetSubClass, diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index af71477b4..2e0de0e65 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -146,7 +146,7 @@ i18n size="medium" [locale]="data.locale" - [value]="assetProfile?.activitiesCount ?? 0" + [value]="assetProfile?.activitiesCount" >Activities