diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 67fc064cc..d77fde346 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -205,8 +205,6 @@ export class AdminService { sortDirection?: Prisma.SortOrder; take?: number; }): Promise { - const MARKET_DATA_QUERY_SYMBOL_CHUNK_SIZE = 5000; - let orderBy: Prisma.Enumerable = [{ symbol: 'asc' }]; const where: Prisma.SymbolProfileWhereInput = {}; @@ -227,7 +225,7 @@ export class AdminService { presetId === 'ETF_WITHOUT_SECTORS' ) { filters = [{ id: 'ETF', type: 'ASSET_SUB_CLASS' }]; - } else if (presetId === 'WITHOUT_ACTIVITIES') { + } else if (presetId === 'NO_ACTIVITIES') { where.activities = { none: {} }; @@ -322,47 +320,27 @@ export class AdminService { const assetProfiles = symbolProfileResult[0]; let count = symbolProfileResult[1]; - const dataSources = [ - ...new Set(assetProfiles.map(({ dataSource }) => dataSource)) - ]; - const symbols = [...new Set(assetProfiles.map(({ symbol }) => symbol))]; - const symbolChunks: string[][] = []; - - for ( - let chunkStartIndex = 0; - chunkStartIndex < symbols.length; - chunkStartIndex += MARKET_DATA_QUERY_SYMBOL_CHUNK_SIZE - ) { - symbolChunks.push( - symbols.slice( - chunkStartIndex, - chunkStartIndex + MARKET_DATA_QUERY_SYMBOL_CHUNK_SIZE - ) - ); - } - - const lastMarketPriceResults = await Promise.all( - symbolChunks.map((symbolChunk) => { - return this.prismaService.marketData.findMany({ - distinct: ['dataSource', 'symbol'], - orderBy: { date: 'desc' }, - select: { - dataSource: true, - marketPrice: true, - symbol: true - }, - where: { - dataSource: { - in: dataSources - }, - symbol: { - in: symbolChunk - } - } - }); - }) - ); - const lastMarketPrices = lastMarketPriceResults.flat(); + const lastMarketPrices = await this.prismaService.marketData.findMany({ + distinct: ['dataSource', 'symbol'], + orderBy: { date: 'desc' }, + select: { + dataSource: true, + marketPrice: true, + symbol: true + }, + where: { + dataSource: { + in: assetProfiles.map(({ dataSource }) => { + return dataSource; + }) + }, + symbol: { + in: assetProfiles.map(({ symbol }) => { + return symbol; + }) + } + } + }); const lastMarketPriceMap = new Map(); @@ -459,15 +437,17 @@ export class AdminService { ) ); - if (presetId === 'ETF_WITHOUT_COUNTRIES') { - marketData = marketData.filter(({ countriesCount }) => { - return countriesCount === 0; - }); - count = marketData.length; - } else if (presetId === 'ETF_WITHOUT_SECTORS') { - marketData = marketData.filter(({ sectorsCount }) => { - return sectorsCount === 0; - }); + if (presetId) { + if (presetId === 'ETF_WITHOUT_COUNTRIES') { + marketData = marketData.filter(({ countriesCount }) => { + return countriesCount === 0; + }); + } else if (presetId === 'ETF_WITHOUT_SECTORS') { + marketData = marketData.filter(({ sectorsCount }) => { + return sectorsCount === 0; + }); + } + count = marketData.length; } 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 21016a2b3..6a079c20a 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 @@ -142,8 +142,8 @@ export class GfAdminMarketDataComponent type: 'PRESET_ID' as Filter['type'] }, { - id: 'WITHOUT_ACTIVITIES', - label: $localize`Without Activities`, + id: 'NO_ACTIVITIES', + label: $localize`No Activities`, type: 'PRESET_ID' as Filter['type'] } ]; 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 b98d2bba3..2622feac3 100644 --- a/libs/common/src/lib/types/market-data-preset.type.ts +++ b/libs/common/src/lib/types/market-data-preset.type.ts @@ -3,4 +3,4 @@ export type MarketDataPreset = | 'CURRENCIES' | 'ETF_WITHOUT_COUNTRIES' | 'ETF_WITHOUT_SECTORS' - | 'WITHOUT_ACTIVITIES'; + | 'NO_ACTIVITIES';