diff --git a/apps/api/src/app/core/current-rate.service.spec.ts b/apps/api/src/app/core/current-rate.service.spec.ts index 9a3ea074f..4c9d454f1 100644 --- a/apps/api/src/app/core/current-rate.service.spec.ts +++ b/apps/api/src/app/core/current-rate.service.spec.ts @@ -1,4 +1,5 @@ import { CurrentRateService } from '@ghostfolio/api/app/core/current-rate.service'; +import { DataProviderService } from '@ghostfolio/api/services/data-provider.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service'; import { Currency, MarketData } from '@prisma/client'; @@ -37,16 +38,26 @@ jest.mock('../../services/exchange-rate-data.service', () => { describe('CurrentRateService', () => { let currentRateService: CurrentRateService; + let dataProviderService: DataProviderService; let exchangeRateDataService: ExchangeRateDataService; let marketDataService: MarketDataService; beforeAll(async () => { + dataProviderService = new DataProviderService( + null, + null, + null, + null, + null, + null + ); exchangeRateDataService = new ExchangeRateDataService(null); marketDataService = new MarketDataService(null); await exchangeRateDataService.initialize(); currentRateService = new CurrentRateService( + dataProviderService, exchangeRateDataService, marketDataService ); diff --git a/apps/api/src/app/core/current-rate.service.ts b/apps/api/src/app/core/current-rate.service.ts index b5167e8fc..0a4b618ea 100644 --- a/apps/api/src/app/core/current-rate.service.ts +++ b/apps/api/src/app/core/current-rate.service.ts @@ -1,12 +1,15 @@ +import { DataProviderService } from '@ghostfolio/api/services/data-provider.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data.service'; import { Injectable } from '@nestjs/common'; import { Currency } from '@prisma/client'; +import { isToday } from 'date-fns'; import { MarketDataService } from './market-data.service'; @Injectable() export class CurrentRateService { public constructor( + private readonly dataProviderService: DataProviderService, private readonly exchangeRateDataService: ExchangeRateDataService, private readonly marketDataService: MarketDataService ) {} @@ -17,6 +20,11 @@ export class CurrentRateService { symbol, userCurrency }: GetValueParams): Promise { + if (isToday(date)) { + const dataProviderResult = await this.dataProviderService.get([symbol]); + return dataProviderResult?.[symbol]?.marketPrice ?? 0; + } + const marketData = await this.marketDataService.get({ date, symbol diff --git a/apps/api/src/app/core/market-data.service.ts b/apps/api/src/app/core/market-data.service.ts index 06a3991f0..151998f20 100644 --- a/apps/api/src/app/core/market-data.service.ts +++ b/apps/api/src/app/core/market-data.service.ts @@ -1,7 +1,7 @@ import { PrismaService } from '@ghostfolio/api/services/prisma.service'; import { Injectable } from '@nestjs/common'; import { MarketData } from '@prisma/client'; -import { subDays } from 'date-fns'; +import { addDays } from 'date-fns'; @Injectable() export class MarketDataService { @@ -16,9 +16,10 @@ export class MarketDataService { }): Promise { return await this.prisma.marketData.findFirst({ where: { + // Filter for given date date: { - gte: subDays(date, 1), - lt: date + gte: date, + lt: addDays(date, 1) }, symbol } diff --git a/apps/api/src/app/core/portfolio-calculator.spec.ts b/apps/api/src/app/core/portfolio-calculator.spec.ts index da150535e..43ce93c5f 100644 --- a/apps/api/src/app/core/portfolio-calculator.spec.ts +++ b/apps/api/src/app/core/portfolio-calculator.spec.ts @@ -69,8 +69,9 @@ jest.mock('./current-rate.service.ts', () => { describe('PortfolioCalculator', () => { let currentRateService: CurrentRateService; + beforeEach(() => { - currentRateService = new CurrentRateService(null, null); + currentRateService = new CurrentRateService(null, null, null); }); describe('calculate transaction points', () => { diff --git a/apps/api/src/services/data-provider.service.ts b/apps/api/src/services/data-provider.service.ts index cc32876c7..e920399ea 100644 --- a/apps/api/src/services/data-provider.service.ts +++ b/apps/api/src/services/data-provider.service.ts @@ -29,7 +29,7 @@ export class DataProviderService { private readonly rakutenRapidApiService: RakutenRapidApiService, private readonly yahooFinanceService: YahooFinanceService ) { - this.rakutenRapidApiService.setPrisma(this.prisma); + this.rakutenRapidApiService?.setPrisma(this.prisma); } public async get(