Browse Source

Refactoring

pull/3495/head
Thomas Kaul 1 year ago
parent
commit
dbb2ef364b
  1. 2
      apps/api/src/app/admin/admin.module.ts
  2. 21
      apps/api/src/app/admin/admin.service.ts
  3. 37
      apps/api/src/app/order/order.service.ts
  4. 25
      libs/common/src/lib/helper.ts

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

@ -1,3 +1,4 @@
import { OrderModule } from '@ghostfolio/api/app/order/order.module';
import { SubscriptionModule } from '@ghostfolio/api/app/subscription/subscription.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module';
import { ApiModule } from '@ghostfolio/api/services/api/api.module';
@ -12,7 +13,6 @@ 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';

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

@ -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,7 +14,7 @@ import {
PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_IS_USER_SIGNUP_ENABLED
} from '@ghostfolio/common/config';
import { isCurrency } from '@ghostfolio/common/helper';
import { isCurrency, getCurrencyFromSymbol } from '@ghostfolio/common/helper';
import {
AdminData,
AdminMarketData,
@ -37,8 +38,6 @@ import {
import { differenceInDays } from 'date-fns';
import { groupBy } from 'lodash';
import { OrderService } from '../order/order.service';
@Injectable()
export class AdminService {
public constructor(
@ -301,11 +300,11 @@ export class AdminService {
symbol
}: UniqueAsset): Promise<AdminMarketDataDetails> {
let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0;
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
let currency: EnhancedSymbolProfile['currency'] = '-';
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
if (isCurrency(symbol.replace(DEFAULT_CURRENCY, ''))) {
currency = symbol.replace(DEFAULT_CURRENCY, '');
if (isCurrency(getCurrencyFromSymbol(symbol))) {
currency = getCurrencyFromSymbol(symbol);
({ activitiesCount, dateOfFirstActivity } =
await this.orderService.getStatisticsByCurrency(currency));
}
@ -340,8 +339,8 @@ export class AdminService {
activitiesCount,
currency,
dataSource,
symbol,
dateOfFirstActivity
dateOfFirstActivity,
symbol
}
};
}
@ -432,11 +431,11 @@ export class AdminService {
.getCurrencyPairs()
.map(async ({ dataSource, symbol }) => {
let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0;
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
let currency: EnhancedSymbolProfile['currency'] = '-';
let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
if (isCurrency(symbol.replace(DEFAULT_CURRENCY, ''))) {
currency = symbol.replace(DEFAULT_CURRENCY, '');
if (isCurrency(getCurrencyFromSymbol(symbol))) {
currency = getCurrencyFromSymbol(symbol);
({ activitiesCount, dateOfFirstActivity } =
await this.orderService.getStatisticsByCurrency(currency));
}

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

@ -433,6 +433,26 @@ export class OrderService {
return { activities, count };
}
public async getStatisticsByCurrency(
currency: EnhancedSymbolProfile['currency']
): Promise<{
activitiesCount: EnhancedSymbolProfile['activitiesCount'];
dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity'];
}> {
const { _count, _min } = await this.prismaService.order.aggregate({
_count: true,
_min: {
date: true
},
where: { SymbolProfile: { currency } }
});
return {
activitiesCount: _count as number,
dateOfFirstActivity: _min.date
};
}
public async order(
orderWhereUniqueInput: Prisma.OrderWhereUniqueInput
): Promise<Order | null> {
@ -545,21 +565,4 @@ export class OrderService {
where
});
}
public async getStatisticsByCurrency(
currency: EnhancedSymbolProfile['currency']
): Promise<{ activitiesCount: number; dateOfFirstActivity: 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 };
}
}

25
libs/common/src/lib/helper.ts

@ -13,7 +13,12 @@ import {
} from 'date-fns';
import { de, es, fr, it, nl, pl, pt, tr, zhCN } from 'date-fns/locale';
import { ghostfolioScraperApiSymbolPrefix, locale } from './config';
import {
DEFAULT_CURRENCY,
DERIVED_CURRENCIES,
ghostfolioScraperApiSymbolPrefix,
locale
} from './config';
import { Benchmark, UniqueAsset } from './interfaces';
import { BenchmarkTrend, ColorScheme } from './types';
@ -161,6 +166,10 @@ export function getCssVariable(aCssVariable: string) {
);
}
export function getCurrencyFromSymbol(aSymbol = '') {
return aSymbol.replace(DEFAULT_CURRENCY, '');
}
export function getDateFnsLocale(aLanguageCode: string) {
if (aLanguageCode === 'de') {
return de;
@ -322,8 +331,18 @@ export function interpolate(template: string, context: any) {
});
}
export function isCurrency(aSymbol = '') {
return currencies[aSymbol];
export function isCurrency(aCurrency = '') {
return currencies[aCurrency] || isDerivedCurrency(aCurrency);
}
export function isDerivedCurrency(aCurrency: string) {
if (aCurrency === 'USX') {
return true;
}
return DERIVED_CURRENCIES.find(({ currency }) => {
return currency === aCurrency;
});
}
export function parseDate(date: string): Date | null {

Loading…
Cancel
Save