|
|
|
@ -1,3 +1,4 @@
|
|
|
|
|
import { OrderService } from '@ghostfolio/api/app/order/order.service';
|
|
|
|
|
import { SubscriptionService } from '@ghostfolio/api/app/subscription/subscription.service';
|
|
|
|
|
import { environment } from '@ghostfolio/api/environments/environment';
|
|
|
|
|
import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
|
|
|
|
@ -13,11 +14,13 @@ import {
|
|
|
|
|
PROPERTY_IS_READ_ONLY_MODE,
|
|
|
|
|
PROPERTY_IS_USER_SIGNUP_ENABLED
|
|
|
|
|
} from '@ghostfolio/common/config';
|
|
|
|
|
import { isCurrency, getCurrencyFromSymbol } from '@ghostfolio/common/helper';
|
|
|
|
|
import {
|
|
|
|
|
AdminData,
|
|
|
|
|
AdminMarketData,
|
|
|
|
|
AdminMarketDataDetails,
|
|
|
|
|
AdminMarketDataItem,
|
|
|
|
|
EnhancedSymbolProfile,
|
|
|
|
|
Filter,
|
|
|
|
|
UniqueAsset
|
|
|
|
|
} from '@ghostfolio/common/interfaces';
|
|
|
|
@ -42,6 +45,7 @@ export class AdminService {
|
|
|
|
|
private readonly dataProviderService: DataProviderService,
|
|
|
|
|
private readonly exchangeRateDataService: ExchangeRateDataService,
|
|
|
|
|
private readonly marketDataService: MarketDataService,
|
|
|
|
|
private readonly orderService: OrderService,
|
|
|
|
|
private readonly prismaService: PrismaService,
|
|
|
|
|
private readonly propertyService: PropertyService,
|
|
|
|
|
private readonly subscriptionService: SubscriptionService,
|
|
|
|
@ -295,6 +299,16 @@ export class AdminService {
|
|
|
|
|
dataSource,
|
|
|
|
|
symbol
|
|
|
|
|
}: UniqueAsset): Promise<AdminMarketDataDetails> {
|
|
|
|
|
let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0;
|
|
|
|
|
let currency: EnhancedSymbolProfile['currency'] = '-';
|
|
|
|
|
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
|
|
|
|
|
|
|
|
|
|
if (isCurrency(getCurrencyFromSymbol(symbol))) {
|
|
|
|
|
currency = getCurrencyFromSymbol(symbol);
|
|
|
|
|
({ activitiesCount, dateOfFirstActivity } =
|
|
|
|
|
await this.orderService.getStatisticsByCurrency(currency));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const [[assetProfile], marketData] = await Promise.all([
|
|
|
|
|
this.symbolProfileService.getSymbolProfiles([
|
|
|
|
|
{
|
|
|
|
@ -322,8 +336,11 @@ export class AdminService {
|
|
|
|
|
return {
|
|
|
|
|
marketData,
|
|
|
|
|
assetProfile: assetProfile ?? {
|
|
|
|
|
symbol,
|
|
|
|
|
currency: '-'
|
|
|
|
|
activitiesCount,
|
|
|
|
|
currency,
|
|
|
|
|
dataSource,
|
|
|
|
|
dateOfFirstActivity,
|
|
|
|
|
symbol
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
@ -413,19 +430,15 @@ export class AdminService {
|
|
|
|
|
this.exchangeRateDataService
|
|
|
|
|
.getCurrencyPairs()
|
|
|
|
|
.map(async ({ dataSource, symbol }) => {
|
|
|
|
|
const currency = symbol.replace(DEFAULT_CURRENCY, '');
|
|
|
|
|
|
|
|
|
|
const { _count, _min } = await this.prismaService.order.aggregate({
|
|
|
|
|
_count: true,
|
|
|
|
|
_min: {
|
|
|
|
|
date: true
|
|
|
|
|
},
|
|
|
|
|
where: {
|
|
|
|
|
SymbolProfile: {
|
|
|
|
|
currency
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0;
|
|
|
|
|
let currency: EnhancedSymbolProfile['currency'] = '-';
|
|
|
|
|
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
|
|
|
|
|
|
|
|
|
|
if (isCurrency(getCurrencyFromSymbol(symbol))) {
|
|
|
|
|
currency = getCurrencyFromSymbol(symbol);
|
|
|
|
|
({ activitiesCount, dateOfFirstActivity } =
|
|
|
|
|
await this.orderService.getStatisticsByCurrency(currency));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const marketDataItemCount =
|
|
|
|
|
marketDataItems.find((marketDataItem) => {
|
|
|
|
@ -436,15 +449,15 @@ export class AdminService {
|
|
|
|
|
})?._count ?? 0;
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
activitiesCount,
|
|
|
|
|
currency,
|
|
|
|
|
dataSource,
|
|
|
|
|
marketDataItemCount,
|
|
|
|
|
symbol,
|
|
|
|
|
activitiesCount: _count as number,
|
|
|
|
|
assetClass: AssetClass.LIQUIDITY,
|
|
|
|
|
assetSubClass: AssetSubClass.CASH,
|
|
|
|
|
countriesCount: 0,
|
|
|
|
|
date: _min.date,
|
|
|
|
|
date: dateOfFirstActivity,
|
|
|
|
|
id: undefined,
|
|
|
|
|
name: symbol,
|
|
|
|
|
sectorsCount: 0
|
|
|
|
|