From c88ad2c22563b06eeb1edb80bef22c78bdf4602c Mon Sep 17 00:00:00 2001 From: Valentin Zickner Date: Tue, 20 Jul 2021 20:42:56 +0200 Subject: [PATCH] change getValues to multiple symbols --- .../src/app/core/current-rate.service.spec.ts | 24 +++++++++++-------- apps/api/src/app/core/current-rate.service.ts | 14 +++++------ apps/api/src/app/core/market-data.service.ts | 8 ++++--- 3 files changed, 26 insertions(+), 20 deletions(-) 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 6a3caa018..477e5ef98 100644 --- a/apps/api/src/app/core/current-rate.service.spec.ts +++ b/apps/api/src/app/core/current-rate.service.spec.ts @@ -18,22 +18,26 @@ jest.mock('./market-data.service', () => { marketPrice: 1847.839966 }); }, - getRange: ( - dateRangeEnd: Date, - dateRangeStart: Date, - symbol: string - ) => { + getRange: ({ + dateRangeEnd, + dateRangeStart, + symbols + }: { + dateRangeEnd: Date; + dateRangeStart: Date; + symbols: string[]; + }) => { return Promise.resolve([ { date: dateRangeStart, - symbol, + symbol: symbols[0], createdAt: dateRangeStart, id: '8fa48fde-f397-4b0d-adbc-fb940e830e6d', marketPrice: 1841.823902 }, { date: dateRangeEnd, - symbol, + symbol: symbols[0], createdAt: dateRangeEnd, id: '082d6893-df27-4c91-8a5d-092e84315b56', marketPrice: 1847.839966 @@ -45,7 +49,7 @@ jest.mock('./market-data.service', () => { }; }); -jest.mock('../../services/exchange-rate-data.service', () => { +jest.mock('@ghostfolio/api/services/exchange-rate-data.service', () => { return { ExchangeRateDataService: jest.fn().mockImplementation(() => { return { @@ -101,10 +105,10 @@ describe('CurrentRateService', () => { it('getValues', async () => { expect( await currentRateService.getValues({ - currency: Currency.USD, + currencies: { AMZN: Currency.USD }, dateRangeEnd: new Date(Date.UTC(2020, 0, 2, 0, 0, 0)), dateRangeStart: new Date(Date.UTC(2020, 0, 1, 0, 0, 0)), - symbol: 'AMZN', + symbols: ['AMZN'], userCurrency: Currency.CHF }) ).toMatchObject([ diff --git a/apps/api/src/app/core/current-rate.service.ts b/apps/api/src/app/core/current-rate.service.ts index f80bf14e3..14edd4bc3 100644 --- a/apps/api/src/app/core/current-rate.service.ts +++ b/apps/api/src/app/core/current-rate.service.ts @@ -49,16 +49,16 @@ export class CurrentRateService { } public async getValues({ - currency, + currencies, dateRangeEnd, dateRangeStart, - symbol, + symbols, userCurrency }: GetValuesParams): Promise { const marketData = await this.marketDataService.getRange({ dateRangeEnd, dateRangeStart, - symbol + symbols }); if (marketData) { @@ -67,7 +67,7 @@ export class CurrentRateService { date: marketDataItem.date, marketPrice: this.exchangeRateDataService.toCurrency( marketDataItem.marketPrice, - currency, + currencies[marketDataItem.symbol], userCurrency ) }; @@ -75,7 +75,7 @@ export class CurrentRateService { } throw new Error( - `Values not found for ${symbol} from ${resetHours( + `Values not found for symbols ${symbols.join(', ')} from ${resetHours( dateRangeStart )} to ${resetHours(dateRangeEnd)}` ); @@ -92,8 +92,8 @@ export interface GetValueParams { export interface GetValuesParams { dateRangeEnd: Date; dateRangeStart: Date; - symbol: string; - currency: Currency; + symbols: string[]; + currencies: { [symbol: string]: Currency }; userCurrency: Currency; } diff --git a/apps/api/src/app/core/market-data.service.ts b/apps/api/src/app/core/market-data.service.ts index 4075ade56..873611ec0 100644 --- a/apps/api/src/app/core/market-data.service.ts +++ b/apps/api/src/app/core/market-data.service.ts @@ -26,11 +26,11 @@ export class MarketDataService { public async getRange({ dateRangeEnd, dateRangeStart, - symbol + symbols }: { dateRangeEnd: Date; dateRangeStart: Date; - symbol: string; + symbols: string[]; }): Promise { return await this.prisma.marketData.findMany({ where: { @@ -38,7 +38,9 @@ export class MarketDataService { gte: dateRangeStart, lt: endOfDay(dateRangeEnd) }, - symbol + symbol: { + in: symbols + } } }); }