Browse Source

code review changes

pull/5165/head
Attila Cseh 6 days ago
committed by Thomas Kaul
parent
commit
bb07343336
  1. 2
      apps/api/src/app/export/export.module.ts
  2. 30
      apps/api/src/app/export/export.service.ts
  3. 4
      libs/common/src/lib/interfaces/export.interface.ts

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

@ -2,6 +2,7 @@ import { AccountModule } from '@ghostfolio/api/app/account/account.module';
import { OrderModule } from '@ghostfolio/api/app/order/order.module'; import { OrderModule } from '@ghostfolio/api/app/order/order.module';
import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.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'; import { ApiModule } from '@ghostfolio/api/services/api/api.module';
import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module';
import { TagModule } from '@ghostfolio/api/services/tag/tag.module'; import { TagModule } from '@ghostfolio/api/services/tag/tag.module';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
@ -14,6 +15,7 @@ import { ExportService } from './export.service';
imports: [ imports: [
AccountModule, AccountModule,
ApiModule, ApiModule,
MarketDataModule,
OrderModule, OrderModule,
TagModule, TagModule,
TransformDataSourceInRequestModule TransformDataSourceInRequestModule

30
apps/api/src/app/export/export.service.ts

@ -1,6 +1,7 @@
import { AccountService } from '@ghostfolio/api/app/account/account.service'; import { AccountService } from '@ghostfolio/api/app/account/account.service';
import { OrderService } from '@ghostfolio/api/app/order/order.service'; import { OrderService } from '@ghostfolio/api/app/order/order.service';
import { environment } from '@ghostfolio/api/environments/environment'; import { environment } from '@ghostfolio/api/environments/environment';
import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service';
import { TagService } from '@ghostfolio/api/services/tag/tag.service'; import { TagService } from '@ghostfolio/api/services/tag/tag.service';
import { Filter, Export } from '@ghostfolio/common/interfaces'; import { Filter, Export } from '@ghostfolio/common/interfaces';
@ -12,6 +13,7 @@ import { groupBy, uniqBy } from 'lodash';
export class ExportService { export class ExportService {
public constructor( public constructor(
private readonly accountService: AccountService, private readonly accountService: AccountService,
private readonly marketDataService: MarketDataService,
private readonly orderService: OrderService, private readonly orderService: OrderService,
private readonly tagService: TagService private readonly tagService: TagService
) {} ) {}
@ -108,15 +110,36 @@ export class ExportService {
} }
); );
const assetProfiles = uniqBy( const customAssetProfiles = uniqBy(
activities.map(({ SymbolProfile }) => { activities
.map(({ SymbolProfile }) => {
return SymbolProfile; return SymbolProfile;
})
.filter(({ userId: assetProfileUserId }) => {
return assetProfileUserId === userId;
}), }),
({ id }) => { ({ id }) => {
return id; return id;
} }
); );
const marketDataByAssetProfile = Object.fromEntries(
await Promise.all(
customAssetProfiles.map(async ({ dataSource, id, symbol }) => {
const marketData = (
await this.marketDataService.marketDataItems({
where: { dataSource, symbol }
})
).map(({ date, marketPrice }) => ({
date: date.toISOString(),
marketPrice
}));
return [id, marketData] as const;
})
)
);
const tags = (await this.tagService.getTagsForUser(userId)) const tags = (await this.tagService.getTagsForUser(userId))
.filter( .filter(
({ id, isUsed }) => ({ id, isUsed }) =>
@ -137,7 +160,7 @@ export class ExportService {
return { return {
meta: { date: new Date().toISOString(), version: environment.version }, meta: { date: new Date().toISOString(), version: environment.version },
accounts, accounts,
assetProfiles: assetProfiles.map( assetProfiles: customAssetProfiles.map(
({ ({
assetClass, assetClass,
assetSubClass, assetSubClass,
@ -175,6 +198,7 @@ export class ExportService {
id, id,
isActive, isActive,
isin, isin,
marketData: marketDataByAssetProfile[id],
name, name,
scraperConfiguration: scraperConfiguration:
scraperConfiguration as unknown as Prisma.JsonArray, scraperConfiguration as unknown as Prisma.JsonArray,

4
libs/common/src/lib/interfaces/export.interface.ts

@ -16,7 +16,9 @@ export interface Export {
| 'updatedAt' | 'updatedAt'
| 'userId' | 'userId'
> & { assetProfileId?: string; date: string; symbol: string })[]; > & { assetProfileId?: string; date: string; symbol: string })[];
assetProfiles: Omit<SymbolProfile, 'createdAt' | 'updatedAt' | 'userId'>[]; assetProfiles: (Omit<SymbolProfile, 'createdAt' | 'updatedAt' | 'userId'> & {
marketData: { date: string; marketPrice: number }[];
})[];
meta: { meta: {
date: string; date: string;
version: string; version: string;

Loading…
Cancel
Save