Browse Source

getAllAccounts endpoint extended by search query filter

pull/5329/head
Attila Cseh 2 weeks ago
parent
commit
3565992953
  1. 2
      apps/api/src/app/account/account.controller.ts
  2. 19
      apps/api/src/app/portfolio/portfolio.service.ts

2
apps/api/src/app/account/account.controller.ts

@ -89,6 +89,7 @@ export class AccountController {
public async getAllAccounts( public async getAllAccounts(
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string,
@Query('dataSource') filterByDataSource?: string, @Query('dataSource') filterByDataSource?: string,
@Query('query') filterBySearchQuery?: string,
@Query('symbol') filterBySymbol?: string @Query('symbol') filterBySymbol?: string
): Promise<AccountsResponse> { ): Promise<AccountsResponse> {
const impersonationUserId = const impersonationUserId =
@ -101,6 +102,7 @@ export class AccountController {
return this.portfolioService.getAccountsWithAggregations({ return this.portfolioService.getAccountsWithAggregations({
filters, filters,
query: filterBySearchQuery,
userId: impersonationUserId || this.request.user.id, userId: impersonationUserId || this.request.user.id,
withExcludedAccounts: true withExcludedAccounts: true
}); });

19
apps/api/src/app/portfolio/portfolio.service.ts

@ -86,14 +86,13 @@ import {
parseISO, parseISO,
set set
} from 'date-fns'; } from 'date-fns';
import Fuse from 'fuse.js';
import { isEmpty } from 'lodash'; import { isEmpty } from 'lodash';
import { PortfolioCalculator } from './calculator/portfolio-calculator'; import { PortfolioCalculator } from './calculator/portfolio-calculator';
import { PortfolioCalculatorFactory } from './calculator/portfolio-calculator.factory'; import { PortfolioCalculatorFactory } from './calculator/portfolio-calculator.factory';
import { RulesService } from './rules.service'; import { RulesService } from './rules.service';
const Fuse = require('fuse.js');
const asiaPacificMarkets = require('../../assets/countries/asia-pacific-markets.json'); const asiaPacificMarkets = require('../../assets/countries/asia-pacific-markets.json');
const developedMarkets = require('../../assets/countries/developed-markets.json'); const developedMarkets = require('../../assets/countries/developed-markets.json');
const emergingMarkets = require('../../assets/countries/emerging-markets.json'); const emergingMarkets = require('../../assets/countries/emerging-markets.json');
@ -213,18 +212,32 @@ export class PortfolioService {
public async getAccountsWithAggregations({ public async getAccountsWithAggregations({
filters, filters,
query,
userId, userId,
withExcludedAccounts = false withExcludedAccounts = false
}: { }: {
filters?: Filter[]; filters?: Filter[];
query?: string;
userId: string; userId: string;
withExcludedAccounts?: boolean; withExcludedAccounts?: boolean;
}): Promise<AccountsResponse> { }): Promise<AccountsResponse> {
const accounts = await this.getAccounts({ let accounts = await this.getAccounts({
filters, filters,
userId, userId,
withExcludedAccounts withExcludedAccounts
}); });
if (query) {
const fuse = new Fuse(accounts, {
keys: ['name', 'platform.name'],
threshold: 0.3
});
accounts = fuse.search(query).map(({ item }) => {
return item;
});
}
let totalBalanceInBaseCurrency = new Big(0); let totalBalanceInBaseCurrency = new Big(0);
let totalValueInBaseCurrency = new Big(0); let totalValueInBaseCurrency = new Big(0);
let transactionCount = 0; let transactionCount = 0;

Loading…
Cancel
Save