Browse Source

refactoring

pull/3495/head
José Marinho 1 year ago
parent
commit
d686f5f10e
  1. 2
      apps/api/src/app/admin/admin.module.ts
  2. 52
      apps/api/src/app/admin/admin.service.ts
  3. 23
      apps/api/src/app/order/order.service.ts

2
apps/api/src/app/admin/admin.module.ts

@ -12,6 +12,7 @@ import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/sym
import { Module } from '@nestjs/common';
import { OrderModule } from '../order/order.module';
import { AdminController } from './admin.controller';
import { AdminService } from './admin.service';
import { QueueModule } from './queue/queue.module';
@ -24,6 +25,7 @@ import { QueueModule } from './queue/queue.module';
DataProviderModule,
ExchangeRateDataModule,
MarketDataModule,
OrderModule,
PrismaModule,
PropertyModule,
QueueModule,

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

@ -34,10 +34,11 @@ import {
Property,
SymbolProfile
} from '@prisma/client';
import { isNumber } from 'class-validator';
import { differenceInDays } from 'date-fns';
import { groupBy } from 'lodash';
import { OrderService } from '../order/order.service';
@Injectable()
export class AdminService {
public constructor(
@ -45,6 +46,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,
@ -304,19 +306,8 @@ export class AdminService {
if (isCurrency(symbol.replace(DEFAULT_CURRENCY, ''))) {
currency = symbol.replace(DEFAULT_CURRENCY, '');
const { _count, _min } = await this.prismaService.order.aggregate({
_count: true,
_min: {
date: true
},
where: {
SymbolProfile: {
currency
}
}
});
activitiesCount = _count as number;
dateOfFirstActivity = _min.date;
[activitiesCount, dateOfFirstActivity] =
await this.orderService.getCountAndDateMin(currency);
}
const [[assetProfile], marketData] = await Promise.all([
@ -346,14 +337,15 @@ export class AdminService {
return {
marketData,
assetProfile: assetProfile ?? {
activitiesCount,
dateOfFirstActivity,
currency,
dataSource,
symbol,
activitiesCount,
dateOfFirstActivity
symbol
}
};
}
public async patchAssetProfileData({
assetClass,
assetSubClass,
@ -439,19 +431,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 dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
let currency: EnhancedSymbolProfile['currency'] = '-';
if (isCurrency(symbol.replace(DEFAULT_CURRENCY, ''))) {
currency = symbol.replace(DEFAULT_CURRENCY, '');
[activitiesCount, dateOfFirstActivity] =
await this.orderService.getCountAndDateMin(currency);
}
const marketDataItemCount =
marketDataItems.find((marketDataItem) => {
@ -466,11 +454,11 @@ export class AdminService {
dataSource,
marketDataItemCount,
symbol,
activitiesCount: _count as number,
activitiesCount,
assetClass: AssetClass.LIQUIDITY,
assetSubClass: AssetSubClass.CASH,
countriesCount: 0,
date: _min.date,
date: dateOfFirstActivity,
id: undefined,
name: symbol,
sectorsCount: 0

23
apps/api/src/app/order/order.service.ts

@ -10,7 +10,11 @@ import {
GATHER_ASSET_PROFILE_PROCESS_OPTIONS
} from '@ghostfolio/common/config';
import { getAssetProfileIdentifier } from '@ghostfolio/common/helper';
import { Filter, UniqueAsset } from '@ghostfolio/common/interfaces';
import {
EnhancedSymbolProfile,
Filter,
UniqueAsset
} from '@ghostfolio/common/interfaces';
import { OrderWithAccount } from '@ghostfolio/common/types';
import { Injectable } from '@nestjs/common';
@ -541,4 +545,21 @@ export class OrderService {
where
});
}
public async getCountAndDateMin(
currency: EnhancedSymbolProfile['currency']
): Promise<[number, Date]> {
const { _count, _min } = await this.prismaService.order.aggregate({
_count: true,
_min: {
date: true
},
where: { SymbolProfile: { currency } }
});
const activitiesCount: EnhancedSymbolProfile['activitiesCount'] =
_count as number;
const dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'] =
_min.date;
return [activitiesCount, dateOfFirstActivity];
}
}

Loading…
Cancel
Save