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

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

@ -1,6 +1,7 @@
import { AccountService } from '@ghostfolio/api/app/account/account.service';
import { OrderService } from '@ghostfolio/api/app/order/order.service';
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 { Filter, Export } from '@ghostfolio/common/interfaces';
@ -12,6 +13,7 @@ import { groupBy, uniqBy } from 'lodash';
export class ExportService {
public constructor(
private readonly accountService: AccountService,
private readonly marketDataService: MarketDataService,
private readonly orderService: OrderService,
private readonly tagService: TagService
) {}
@ -108,15 +110,36 @@ export class ExportService {
}
);
const assetProfiles = uniqBy(
activities.map(({ SymbolProfile }) => {
const customAssetProfiles = uniqBy(
activities
.map(({ SymbolProfile }) => {
return SymbolProfile;
})
.filter(({ userId: assetProfileUserId }) => {
return assetProfileUserId === userId;
}),
({ 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))
.filter(
({ id, isUsed }) =>
@ -137,7 +160,7 @@ export class ExportService {
return {
meta: { date: new Date().toISOString(), version: environment.version },
accounts,
assetProfiles: assetProfiles.map(
assetProfiles: customAssetProfiles.map(
({
assetClass,
assetSubClass,
@ -175,6 +198,7 @@ export class ExportService {
id,
isActive,
isin,
marketData: marketDataByAssetProfile[id],
name,
scraperConfiguration:
scraperConfiguration as unknown as Prisma.JsonArray,

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

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

Loading…
Cancel
Save