From 7743d69b9e11707c80f73513c9f2813ba50cd46b Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Sat, 7 Jan 2023 17:34:38 +0100 Subject: [PATCH] Refactoring --- apps/api/src/app/import/import.controller.ts | 11 +-- apps/api/src/app/import/import.service.ts | 86 +++++++++---------- apps/api/src/app/symbol/symbol.controller.ts | 1 - apps/api/src/app/symbol/symbol.service.ts | 5 +- .../yahoo-finance/yahoo-finance.service.ts | 8 +- 5 files changed, 46 insertions(+), 65 deletions(-) diff --git a/apps/api/src/app/import/import.controller.ts b/apps/api/src/app/import/import.controller.ts index 0df72f463..4a9ef5093 100644 --- a/apps/api/src/app/import/import.controller.ts +++ b/apps/api/src/app/import/import.controller.ts @@ -92,19 +92,12 @@ export class ImportController { ): Promise { const userCurrency = this.request.user.Settings.settings.baseCurrency; - const result = await this.importService.getDividends({ + const activities = await this.importService.getDividends({ dataSource, symbol, userCurrency }); - if (!result || isEmpty(result)) { - throw new HttpException( - getReasonPhrase(StatusCodes.NOT_FOUND), - StatusCodes.NOT_FOUND - ); - } - - return result; + return { activities }; } } diff --git a/apps/api/src/app/import/import.service.ts b/apps/api/src/app/import/import.service.ts index a381bd703..d3be33bbc 100644 --- a/apps/api/src/app/import/import.service.ts +++ b/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 { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service'; import { parseDate } from '@ghostfolio/common/helper'; -import { ImportResponse, UniqueAsset } from '@ghostfolio/common/interfaces'; +import { UniqueAsset } from '@ghostfolio/common/interfaces'; import { AccountWithPlatform, OrderWithAccount @@ -33,17 +33,11 @@ export class ImportService { dataSource, symbol, userCurrency - }: UniqueAsset & { userCurrency: string }): Promise { + }: UniqueAsset & { userCurrency: string }): Promise { try { const { firstBuyDate, historicalData, orders } = 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([ this.symbolProfileService.getSymbolProfiles([ { @@ -60,46 +54,48 @@ export class ImportService { }) ]); - return { - activities: Object.entries(dividends).map( - ([dateString, { marketPrice }]) => { - const quantity = - historicalData.find((historicalDataItem) => { - return historicalDataItem.date === dateString; - })?.quantity ?? 0; + const accounts = orders.map((order) => { + return order.Account; + }); - const value = new Big(quantity).mul(marketPrice).toNumber(); + const Account = this.isUniqueAccount(accounts) ? accounts[0] : undefined; - return { - Account, - quantity, - value, - accountId: Account?.id, - accountUserId: undefined, - comment: undefined, - createdAt: undefined, - date: parseDate(dateString), - fee: 0, - feeInBaseCurrency: 0, - id: assetProfile.id, - isDraft: false, - SymbolProfile: (assetProfile), - symbolProfileId: assetProfile.id, - type: 'DIVIDEND', - unitPrice: marketPrice, - updatedAt: undefined, - userId: Account?.userId, - valueInBaseCurrency: this.exchangeRateDataService.toCurrency( - value, - assetProfile.currency, - userCurrency - ) - }; - } - ) - }; + return Object.entries(dividends).map(([dateString, { marketPrice }]) => { + const quantity = + historicalData.find((historicalDataItem) => { + return historicalDataItem.date === dateString; + })?.quantity ?? 0; + + const value = new Big(quantity).mul(marketPrice).toNumber(); + + return { + Account, + quantity, + value, + accountId: Account?.id, + accountUserId: undefined, + comment: undefined, + createdAt: undefined, + date: parseDate(dateString), + fee: 0, + feeInBaseCurrency: 0, + id: assetProfile.id, + isDraft: false, + SymbolProfile: (assetProfile), + symbolProfileId: assetProfile.id, + type: 'DIVIDEND', + unitPrice: marketPrice, + updatedAt: undefined, + userId: Account?.userId, + valueInBaseCurrency: this.exchangeRateDataService.toCurrency( + value, + assetProfile.currency, + userCurrency + ) + }; + }); } catch { - return { activities: [] }; + return []; } } diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/symbol/symbol.controller.ts index 45581bd00..249284ea8 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/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 { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response.interceptor'; import { IDataProviderHistoricalResponse } from '@ghostfolio/api/services/interfaces/interfaces'; -import { ImportResponse } from '@ghostfolio/common/interfaces'; import { Controller, Get, diff --git a/apps/api/src/app/symbol/symbol.service.ts b/apps/api/src/app/symbol/symbol.service.ts index 89300ecd6..7a5f5586d 100644 --- a/apps/api/src/app/symbol/symbol.service.ts +++ b/apps/api/src/app/symbol/symbol.service.ts @@ -5,10 +5,7 @@ import { } from '@ghostfolio/api/services/interfaces/interfaces'; import { MarketDataService } from '@ghostfolio/api/services/market-data.service'; import { DATE_FORMAT } from '@ghostfolio/common/helper'; -import { - HistoricalDataItem, - ImportResponse -} from '@ghostfolio/common/interfaces'; +import { HistoricalDataItem } from '@ghostfolio/common/interfaces'; import { Injectable, Logger } from '@nestjs/common'; import { format, subDays } from 'date-fns'; diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index e77d90f42..bccc5c648 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/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); } - const yahooFinanceSymbol = this.convertToYahooFinanceSymbol(symbol); - try { const historicalResult = await yahooFinance.historical( - yahooFinanceSymbol, + this.convertToYahooFinanceSymbol(symbol), { events: 'dividends', interval: granularity === 'month' ? '1mo' : '1d', @@ -227,11 +225,9 @@ export class YahooFinanceService implements DataProviderInterface { to = addDays(to, 1); } - const yahooFinanceSymbol = this.convertToYahooFinanceSymbol(aSymbol); - try { const historicalResult = await yahooFinance.historical( - yahooFinanceSymbol, + this.convertToYahooFinanceSymbol(aSymbol), { interval: '1d', period1: format(from, DATE_FORMAT),