Browse Source

Refactoring

pull/1560/head
Thomas 3 years ago
parent
commit
7743d69b9e
  1. 11
      apps/api/src/app/import/import.controller.ts
  2. 86
      apps/api/src/app/import/import.service.ts
  3. 1
      apps/api/src/app/symbol/symbol.controller.ts
  4. 5
      apps/api/src/app/symbol/symbol.service.ts
  5. 8
      apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

11
apps/api/src/app/import/import.controller.ts

@ -92,19 +92,12 @@ export class ImportController {
): Promise<ImportResponse> { ): Promise<ImportResponse> {
const userCurrency = this.request.user.Settings.settings.baseCurrency; const userCurrency = this.request.user.Settings.settings.baseCurrency;
const result = await this.importService.getDividends({ const activities = await this.importService.getDividends({
dataSource, dataSource,
symbol, symbol,
userCurrency userCurrency
}); });
if (!result || isEmpty(result)) { return { activities };
throw new HttpException(
getReasonPhrase(StatusCodes.NOT_FOUND),
StatusCodes.NOT_FOUND
);
}
return result;
} }
} }

86
apps/api/src/app/import/import.service.ts

@ -7,7 +7,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service';
import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service';
import { parseDate } from '@ghostfolio/common/helper'; import { parseDate } from '@ghostfolio/common/helper';
import { ImportResponse, UniqueAsset } from '@ghostfolio/common/interfaces'; import { UniqueAsset } from '@ghostfolio/common/interfaces';
import { import {
AccountWithPlatform, AccountWithPlatform,
OrderWithAccount OrderWithAccount
@ -33,17 +33,11 @@ export class ImportService {
dataSource, dataSource,
symbol, symbol,
userCurrency userCurrency
}: UniqueAsset & { userCurrency: string }): Promise<ImportResponse> { }: UniqueAsset & { userCurrency: string }): Promise<Activity[]> {
try { try {
const { firstBuyDate, historicalData, orders } = const { firstBuyDate, historicalData, orders } =
await this.portfolioService.getPosition(dataSource, undefined, symbol); await this.portfolioService.getPosition(dataSource, undefined, symbol);
const accounts = orders.map(({ Account }) => {
return Account;
});
const Account = this.isUniqueAccount(accounts) ? accounts[0] : undefined;
const [[assetProfile], dividends] = await Promise.all([ const [[assetProfile], dividends] = await Promise.all([
this.symbolProfileService.getSymbolProfiles([ this.symbolProfileService.getSymbolProfiles([
{ {
@ -60,46 +54,48 @@ export class ImportService {
}) })
]); ]);
return { const accounts = orders.map((order) => {
activities: Object.entries(dividends).map( return order.Account;
([dateString, { marketPrice }]) => { });
const quantity =
historicalData.find((historicalDataItem) => {
return historicalDataItem.date === dateString;
})?.quantity ?? 0;
const value = new Big(quantity).mul(marketPrice).toNumber(); const Account = this.isUniqueAccount(accounts) ? accounts[0] : undefined;
return { return Object.entries(dividends).map(([dateString, { marketPrice }]) => {
Account, const quantity =
quantity, historicalData.find((historicalDataItem) => {
value, return historicalDataItem.date === dateString;
accountId: Account?.id, })?.quantity ?? 0;
accountUserId: undefined,
comment: undefined, const value = new Big(quantity).mul(marketPrice).toNumber();
createdAt: undefined,
date: parseDate(dateString), return {
fee: 0, Account,
feeInBaseCurrency: 0, quantity,
id: assetProfile.id, value,
isDraft: false, accountId: Account?.id,
SymbolProfile: <SymbolProfile>(<unknown>assetProfile), accountUserId: undefined,
symbolProfileId: assetProfile.id, comment: undefined,
type: 'DIVIDEND', createdAt: undefined,
unitPrice: marketPrice, date: parseDate(dateString),
updatedAt: undefined, fee: 0,
userId: Account?.userId, feeInBaseCurrency: 0,
valueInBaseCurrency: this.exchangeRateDataService.toCurrency( id: assetProfile.id,
value, isDraft: false,
assetProfile.currency, SymbolProfile: <SymbolProfile>(<unknown>assetProfile),
userCurrency symbolProfileId: assetProfile.id,
) type: 'DIVIDEND',
}; unitPrice: marketPrice,
} updatedAt: undefined,
) userId: Account?.userId,
}; valueInBaseCurrency: this.exchangeRateDataService.toCurrency(
value,
assetProfile.currency,
userCurrency
)
};
});
} catch { } catch {
return { activities: [] }; return [];
} }
} }

1
apps/api/src/app/symbol/symbol.controller.ts

@ -1,7 +1,6 @@
import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request.interceptor'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request.interceptor';
import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor'; import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor';
import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces';
import { ImportResponse } from '@ghostfolio/common/interfaces';
import { import {
Controller, Controller,
Get, Get,

5
apps/api/src/app/symbol/symbol.service.ts

@ -5,10 +5,7 @@ import {
} from '@ghostfolio/api/services/interfaces/interfaces'; } from '@ghostfolio/api/services/interfaces/interfaces';
import { MarketDataService } from '@ghostfolio/api/services/market-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data.service';
import { DATE_FORMAT } from '@ghostfolio/common/helper'; import { DATE_FORMAT } from '@ghostfolio/common/helper';
import { import { HistoricalDataItem } from '@ghostfolio/common/interfaces';
HistoricalDataItem,
ImportResponse
} from '@ghostfolio/common/interfaces';
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { format, subDays } from 'date-fns'; import { format, subDays } from 'date-fns';

8
apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts

@ -175,11 +175,9 @@ export class YahooFinanceService implements DataProviderInterface {
to = addDays(to, 1); to = addDays(to, 1);
} }
const yahooFinanceSymbol = this.convertToYahooFinanceSymbol(symbol);
try { try {
const historicalResult = await yahooFinance.historical( const historicalResult = await yahooFinance.historical(
yahooFinanceSymbol, this.convertToYahooFinanceSymbol(symbol),
{ {
events: 'dividends', events: 'dividends',
interval: granularity === 'month' ? '1mo' : '1d', interval: granularity === 'month' ? '1mo' : '1d',
@ -227,11 +225,9 @@ export class YahooFinanceService implements DataProviderInterface {
to = addDays(to, 1); to = addDays(to, 1);
} }
const yahooFinanceSymbol = this.convertToYahooFinanceSymbol(aSymbol);
try { try {
const historicalResult = await yahooFinance.historical( const historicalResult = await yahooFinance.historical(
yahooFinanceSymbol, this.convertToYahooFinanceSymbol(aSymbol),
{ {
interval: '1d', interval: '1d',
period1: format(from, DATE_FORMAT), period1: format(from, DATE_FORMAT),

Loading…
Cancel
Save