diff --git a/CHANGELOG.md b/CHANGELOG.md index 70912c64b..1c8d180bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,10 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Extended the import functionality by tags -- Introduced fuzzy search for the accounts -- Improved the language localization for Polish (`pl`) -- Improved the language localization for Spanish (`es`) +- Introduced fuzzy search for the accounts endpoint ## 2.189.0 - 2025-08-05 diff --git a/apps/api/src/app/account/account.controller.ts b/apps/api/src/app/account/account.controller.ts index 2f41c271b..7b24ccdcb 100644 --- a/apps/api/src/app/account/account.controller.ts +++ b/apps/api/src/app/account/account.controller.ts @@ -97,12 +97,12 @@ export class AccountController { const filters = this.apiService.buildFiltersFromQueryParams({ filterByDataSource, + filterBySearchQuery, filterBySymbol }); return this.portfolioService.getAccountsWithAggregations({ filters, - query: filterBySearchQuery, userId: impersonationUserId || this.request.user.id, withExcludedAccounts: true }); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 7ca00d3df..5ad291238 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -86,13 +86,14 @@ import { parseISO, set } from 'date-fns'; -import Fuse from 'fuse.js'; import { isEmpty } from 'lodash'; 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'); @@ -212,12 +213,10 @@ export class PortfolioService { public async getAccountsWithAggregations({ filters, - query, userId, withExcludedAccounts = false }: { filters?: Filter[]; - query?: string; userId: string; withExcludedAccounts?: boolean; }): Promise { @@ -227,13 +226,17 @@ export class PortfolioService { withExcludedAccounts }); - if (query) { + const searchQuery = filters.find(({ type }) => { + return type === 'SEARCH_QUERY'; + })?.id; + + if (searchQuery) { const fuse = new Fuse(accounts, { keys: ['name', 'platform.name'], threshold: 0.3 }); - accounts = fuse.search(query).map(({ item }) => { + accounts = fuse.search(searchQuery).map(({ item }) => { return item; }); }