Browse Source

Refactoring

pull/6346/head
Thomas Kaul 1 month ago
parent
commit
0907aab937
  1. 86
      apps/api/src/app/admin/admin.service.ts
  2. 4
      apps/client/src/app/components/admin-market-data/admin-market-data.component.ts
  3. 2
      libs/common/src/lib/types/market-data-preset.type.ts

86
apps/api/src/app/admin/admin.service.ts

@ -205,8 +205,6 @@ export class AdminService {
sortDirection?: Prisma.SortOrder; sortDirection?: Prisma.SortOrder;
take?: number; take?: number;
}): Promise<AdminMarketData> { }): Promise<AdminMarketData> {
const MARKET_DATA_QUERY_SYMBOL_CHUNK_SIZE = 5000;
let orderBy: Prisma.Enumerable<Prisma.SymbolProfileOrderByWithRelationInput> = let orderBy: Prisma.Enumerable<Prisma.SymbolProfileOrderByWithRelationInput> =
[{ symbol: 'asc' }]; [{ symbol: 'asc' }];
const where: Prisma.SymbolProfileWhereInput = {}; const where: Prisma.SymbolProfileWhereInput = {};
@ -227,7 +225,7 @@ export class AdminService {
presetId === 'ETF_WITHOUT_SECTORS' presetId === 'ETF_WITHOUT_SECTORS'
) { ) {
filters = [{ id: 'ETF', type: 'ASSET_SUB_CLASS' }]; filters = [{ id: 'ETF', type: 'ASSET_SUB_CLASS' }];
} else if (presetId === 'WITHOUT_ACTIVITIES') { } else if (presetId === 'NO_ACTIVITIES') {
where.activities = { where.activities = {
none: {} none: {}
}; };
@ -322,47 +320,27 @@ export class AdminService {
const assetProfiles = symbolProfileResult[0]; const assetProfiles = symbolProfileResult[0];
let count = symbolProfileResult[1]; let count = symbolProfileResult[1];
const dataSources = [ const lastMarketPrices = await this.prismaService.marketData.findMany({
...new Set(assetProfiles.map(({ dataSource }) => dataSource)) distinct: ['dataSource', 'symbol'],
]; orderBy: { date: 'desc' },
const symbols = [...new Set(assetProfiles.map(({ symbol }) => symbol))]; select: {
const symbolChunks: string[][] = []; dataSource: true,
marketPrice: true,
for ( symbol: true
let chunkStartIndex = 0; },
chunkStartIndex < symbols.length; where: {
chunkStartIndex += MARKET_DATA_QUERY_SYMBOL_CHUNK_SIZE dataSource: {
) { in: assetProfiles.map(({ dataSource }) => {
symbolChunks.push( return dataSource;
symbols.slice( })
chunkStartIndex, },
chunkStartIndex + MARKET_DATA_QUERY_SYMBOL_CHUNK_SIZE symbol: {
) in: assetProfiles.map(({ symbol }) => {
); return symbol;
} })
}
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 lastMarketPriceMap = new Map<string, number>(); const lastMarketPriceMap = new Map<string, number>();
@ -459,15 +437,17 @@ export class AdminService {
) )
); );
if (presetId === 'ETF_WITHOUT_COUNTRIES') { if (presetId) {
marketData = marketData.filter(({ countriesCount }) => { if (presetId === 'ETF_WITHOUT_COUNTRIES') {
return countriesCount === 0; marketData = marketData.filter(({ countriesCount }) => {
}); return countriesCount === 0;
count = marketData.length; });
} else if (presetId === 'ETF_WITHOUT_SECTORS') { } else if (presetId === 'ETF_WITHOUT_SECTORS') {
marketData = marketData.filter(({ sectorsCount }) => { marketData = marketData.filter(({ sectorsCount }) => {
return sectorsCount === 0; return sectorsCount === 0;
}); });
}
count = marketData.length; count = marketData.length;
} }

4
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'] type: 'PRESET_ID' as Filter['type']
}, },
{ {
id: 'WITHOUT_ACTIVITIES', id: 'NO_ACTIVITIES',
label: $localize`Without Activities`, label: $localize`No Activities`,
type: 'PRESET_ID' as Filter['type'] type: 'PRESET_ID' as Filter['type']
} }
]; ];

2
libs/common/src/lib/types/market-data-preset.type.ts

@ -3,4 +3,4 @@ export type MarketDataPreset =
| 'CURRENCIES' | 'CURRENCIES'
| 'ETF_WITHOUT_COUNTRIES' | 'ETF_WITHOUT_COUNTRIES'
| 'ETF_WITHOUT_SECTORS' | 'ETF_WITHOUT_SECTORS'
| 'WITHOUT_ACTIVITIES'; | 'NO_ACTIVITIES';

Loading…
Cancel
Save