Browse Source

Refactoring

pull/5062/head
Thomas Kaul 2 days ago
parent
commit
2700611e1d
  1. 18
      apps/api/src/app/portfolio/portfolio.controller.ts
  2. 39
      apps/api/src/app/portfolio/portfolio.service.ts

18
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 };
}

39
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,

Loading…
Cancel
Save