diff --git a/apps/api/src/app/order/order.controller.ts b/apps/api/src/app/order/order.controller.ts index 7a9cf3d17..7523c0c1c 100644 --- a/apps/api/src/app/order/order.controller.ts +++ b/apps/api/src/app/order/order.controller.ts @@ -99,6 +99,8 @@ export class OrderController { @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId, @Query('accounts') filterByAccounts?: string, @Query('assetClasses') filterByAssetClasses?: string, + @Query('dataSource') filterByDataSource?: string, + @Query('symbol') filterBySymbol?: string, @Query('range') dateRange?: DateRange, @Query('skip') skip?: number, @Query('sortColumn') sortColumn?: string, @@ -116,6 +118,8 @@ export class OrderController { const filters = this.apiService.buildFiltersFromQueryParams({ filterByAccounts, filterByAssetClasses, + filterByDataSource, + filterBySymbol, filterByTags }); diff --git a/apps/api/src/app/order/order.service.ts b/apps/api/src/app/order/order.service.ts index d9ff68d61..5260ed22d 100644 --- a/apps/api/src/app/order/order.service.ts +++ b/apps/api/src/app/order/order.service.ts @@ -345,6 +345,8 @@ export class OrderService { const { ACCOUNT: filtersByAccount, ASSET_CLASS: filtersByAssetClass, + DATA_SOURCE: filtersByDataSource, + SYMBOL: filtersBySymbol, TAG: filtersByTag } = groupBy(filters, ({ type }) => { return type; @@ -395,6 +397,26 @@ export class OrderService { }; } + if (filtersByDataSource?.length > 0) { + where.SymbolProfile = { + dataSource: { + in: filtersByDataSource.map(({ id }) => { + return id; + }) + } + }; + } + + if (filtersBySymbol?.length > 0) { + where.SymbolProfile = { + symbol: { + in: filtersBySymbol.map(({ id }) => { + return id; + }) + } + }; + } + if (searchQuery) { const searchQueryWhereInput: Prisma.SymbolProfileWhereInput[] = [ { id: { mode: 'insensitive', startsWith: searchQuery } }, diff --git a/apps/api/src/services/api/api.service.ts b/apps/api/src/services/api/api.service.ts index e961ec037..b4504a814 100644 --- a/apps/api/src/services/api/api.service.ts +++ b/apps/api/src/services/api/api.service.ts @@ -10,22 +10,28 @@ export class ApiService { filterByAccounts, filterByAssetClasses, filterByAssetSubClasses, + filterByDataSource, filterByHoldingType, filterBySearchQuery, + filterBySymbol, filterByTags }: { filterByAccounts?: string; filterByAssetClasses?: string; filterByAssetSubClasses?: string; + filterByDataSource?: string; filterByHoldingType?: string; filterBySearchQuery?: string; + filterBySymbol?: string; filterByTags?: string; }): Filter[] { const accountIds = filterByAccounts?.split(',') ?? []; const assetClasses = filterByAssetClasses?.split(',') ?? []; const assetSubClasses = filterByAssetSubClasses?.split(',') ?? []; + const dataSource = filterByDataSource?.split(',') ?? []; const holdingType = filterByHoldingType; const searchQuery = filterBySearchQuery?.toLowerCase(); + const symbols = filterBySymbol?.split(',') ?? []; const tagIds = filterByTags?.split(',') ?? []; const filters = [ @@ -47,6 +53,18 @@ export class ApiService { type: 'ASSET_SUB_CLASS' }; }), + ...dataSource.map((dataSource) => { + return { + id: dataSource, + type: 'DATA_SOURCE' + }; + }), + ...symbols.map((symbol) => { + return { + id: symbol, + type: 'SYMBOL' + }; + }), ...tagIds.map((tagId) => { return { id: tagId, diff --git a/libs/common/src/lib/interfaces/filter.interface.ts b/libs/common/src/lib/interfaces/filter.interface.ts index 3d555f796..43634f876 100644 --- a/libs/common/src/lib/interfaces/filter.interface.ts +++ b/libs/common/src/lib/interfaces/filter.interface.ts @@ -5,6 +5,7 @@ export interface Filter { | 'ACCOUNT' | 'ASSET_CLASS' | 'ASSET_SUB_CLASS' + | 'DATA_SOURCE' | 'HOLDING_TYPE' | 'PRESET_ID' | 'SEARCH_QUERY'