diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 7033e64cc..14d356799 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -60,8 +60,6 @@ import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { PortfolioService } from './portfolio.service'; import { UpdateHoldingTagsDto } from './update-holding-tags.dto'; -const Fuse = require('fuse.js'); - @Controller('portfolio') export class PortfolioController { public constructor( @@ -418,26 +416,14 @@ export class PortfolioController { filterByTags }); - const { holdings: holdingsMap } = await this.portfolioService.getDetails({ + const holdings = await this.portfolioService.getHoldings({ dateRange, filters, impersonationId, + query: filterBySearchQuery, userId: this.request.user.id }); - let holdings = Object.values(holdingsMap); - - if (filterBySearchQuery) { - const fuse = new Fuse(holdings, { - keys: ['isin', 'name', 'symbol'], - threshold: 0.3 - }); - - holdings = fuse.search(filterBySearchQuery).map(({ item }) => { - return item; - }); - } - return { holdings }; } diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 4b9d9c41b..ddc81fa4a 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -91,6 +91,8 @@ import { PortfolioCalculator } from './calculator/portfolio-calculator'; import { PortfolioCalculatorFactory } from './calculator/portfolio-calculator.factory'; import { RulesService } from './rules.service'; +const Fuse = require('fuse.js'); + const asiaPacificMarkets = require('../../assets/countries/asia-pacific-markets.json'); const developedMarkets = require('../../assets/countries/developed-markets.json'); const emergingMarkets = require('../../assets/countries/emerging-markets.json'); @@ -268,6 +270,43 @@ export class PortfolioService { return dividends; } + public async getHoldings({ + dateRange, + filters, + impersonationId, + query, + userId + }: { + dateRange: DateRange; + filters?: Filter[]; + impersonationId: string; + query?: string; + userId: string; + }) { + userId = await this.getUserId(impersonationId, userId); + const { holdings: holdingsMap } = await this.getDetails({ + dateRange, + filters, + impersonationId, + userId + }); + + let holdings = Object.values(holdingsMap); + + if (query) { + const fuse = new Fuse(holdings, { + keys: ['isin', 'name', 'symbol'], + threshold: 0.3 + }); + + holdings = fuse.search(query).map(({ item }) => { + return item; + }); + } + + return holdings; + } + public async getInvestments({ dateRange, filters,