From cc89719cc2cf70120008421e356e2790d30b2f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Marinho?= Date: Thu, 6 Jun 2024 12:45:29 +0100 Subject: [PATCH] Feature/ extend market data with preset by activities count and date --- apps/api/src/app/admin/admin.service.ts | 74 +++++++++++++------ .../interfaces/admin-market-data.interface.ts | 4 +- 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 3323e775d..4e80d5e8d 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -409,30 +409,60 @@ export class AdminService { 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; + const marketDataPromise: Promise[] = + this.exchangeRateDataService + .getCurrencyPairs() + .map(async ({ dataSource, symbol }) => { + let date: Date = null; + let activitiesCount = 0; + + const marketDataItemCount = + marketDataItems.find((marketDataItem) => { + return ( + marketDataItem.dataSource === dataSource && + marketDataItem.symbol === symbol + ); + })?._count ?? 0; + + const symbolProfile = + await this.prismaService.symbolProfile.findFirst({ + where: { symbol, dataSource } + }); + + if (symbolProfile?.id) { + const orders = await this.prismaService.order.findMany({ + orderBy: { date: 'asc' }, + where: { symbolProfileId: symbolProfile.id } + }); + activitiesCount = orders.length; + } - return { - dataSource, - marketDataItemCount, - symbol, - assetClass: AssetClass.LIQUIDITY, - countriesCount: 0, - currency: symbol.replace(DEFAULT_CURRENCY, ''), - id: undefined, - name: symbol, - sectorsCount: 0 - }; - }); + if (activitiesCount > 0) { + const earliestId = await this.prismaService.order.findFirst({ + orderBy: { + date: 'asc' + }, + where: { symbolProfileId: symbolProfile?.id } + }); + date = earliestId.date; + } + + return { + activitiesCount, + assetClass: AssetClass.LIQUIDITY, + countriesCount: 0, + currency: symbol.replace(DEFAULT_CURRENCY, ''), + dataSource, + date, + id: undefined, + marketDataItemCount, + name: symbol, + sectorsCount: 0, + symbol + }; + }); + const marketData = await Promise.all(marketDataPromise); return { marketData, count: marketData.length }; } diff --git a/libs/common/src/lib/interfaces/admin-market-data.interface.ts b/libs/common/src/lib/interfaces/admin-market-data.interface.ts index 6f3a82a0b..d52ac03b9 100644 --- a/libs/common/src/lib/interfaces/admin-market-data.interface.ts +++ b/libs/common/src/lib/interfaces/admin-market-data.interface.ts @@ -6,13 +6,13 @@ export interface AdminMarketData { } export interface AdminMarketDataItem { - activitiesCount?: number; + activitiesCount: number; assetClass?: AssetClass; assetSubClass?: AssetSubClass; countriesCount: number; currency: string; dataSource: DataSource; - date?: Date; + date: Date; id: string; isBenchmark?: boolean; marketDataItemCount: number;