Browse Source

extend filters of order endpoint

pull/3743/head
Shaunak Das 12 months ago
parent
commit
ba5446fc62
  1. 4
      apps/api/src/app/order/order.controller.ts
  2. 22
      apps/api/src/app/order/order.service.ts
  3. 18
      apps/api/src/services/api/api.service.ts
  4. 1
      libs/common/src/lib/interfaces/filter.interface.ts

4
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
});

22
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: <DataSource[]>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 } },

18
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 <Filter>{
id: dataSource,
type: 'DATA_SOURCE'
};
}),
...symbols.map((symbol) => {
return <Filter>{
id: symbol,
type: 'SYMBOL'
};
}),
...tagIds.map((tagId) => {
return <Filter>{
id: tagId,

1
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'

Loading…
Cancel
Save