|
|
@ -6,14 +6,12 @@ import { MarketDataService } from '@ghostfolio/api/services/market-data/market-d |
|
|
|
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; |
|
|
|
import { PropertyService } from '@ghostfolio/api/services/property/property.service'; |
|
|
|
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; |
|
|
|
import { |
|
|
|
DEFAULT_PAGE_SIZE, |
|
|
|
PROPERTY_CURRENCIES |
|
|
|
} from '@ghostfolio/common/config'; |
|
|
|
import { PROPERTY_CURRENCIES } from '@ghostfolio/common/config'; |
|
|
|
import { |
|
|
|
AdminData, |
|
|
|
AdminMarketData, |
|
|
|
AdminMarketDataDetails, |
|
|
|
AdminMarketDataItem, |
|
|
|
Filter, |
|
|
|
UniqueAsset |
|
|
|
} from '@ghostfolio/common/interfaces'; |
|
|
@ -121,7 +119,9 @@ export class AdminService { |
|
|
|
[{ symbol: 'asc' }]; |
|
|
|
const where: Prisma.SymbolProfileWhereInput = {}; |
|
|
|
|
|
|
|
if ( |
|
|
|
if (presetId === 'CURRENCIES') { |
|
|
|
return this.getMarketDataForCurrencies(); |
|
|
|
} else if ( |
|
|
|
presetId === 'ETF_WITHOUT_COUNTRIES' || |
|
|
|
presetId === 'ETF_WITHOUT_SECTORS' |
|
|
|
) { |
|
|
@ -313,6 +313,36 @@ export class AdminService { |
|
|
|
return response; |
|
|
|
} |
|
|
|
|
|
|
|
private async getMarketDataForCurrencies(): Promise<AdminMarketData> { |
|
|
|
const marketDataItems = await this.prismaService.marketData.groupBy({ |
|
|
|
_count: true, |
|
|
|
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; |
|
|
|
|
|
|
|
return { |
|
|
|
dataSource, |
|
|
|
marketDataItemCount, |
|
|
|
symbol, |
|
|
|
assetClass: 'CASH', |
|
|
|
countriesCount: 0, |
|
|
|
sectorsCount: 0 |
|
|
|
}; |
|
|
|
}); |
|
|
|
|
|
|
|
return { marketData, count: marketData.length }; |
|
|
|
} |
|
|
|
|
|
|
|
private async getUsersWithAnalytics(): Promise<AdminData['users']> { |
|
|
|
let orderBy: any = { |
|
|
|
createdAt: 'desc' |
|
|
|