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, @Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId,
@Query('accounts') filterByAccounts?: string, @Query('accounts') filterByAccounts?: string,
@Query('assetClasses') filterByAssetClasses?: string, @Query('assetClasses') filterByAssetClasses?: string,
@Query('dataSource') filterByDataSource?: string,
@Query('symbol') filterBySymbol?: string,
@Query('range') dateRange?: DateRange, @Query('range') dateRange?: DateRange,
@Query('skip') skip?: number, @Query('skip') skip?: number,
@Query('sortColumn') sortColumn?: string, @Query('sortColumn') sortColumn?: string,
@ -116,6 +118,8 @@ export class OrderController {
const filters = this.apiService.buildFiltersFromQueryParams({ const filters = this.apiService.buildFiltersFromQueryParams({
filterByAccounts, filterByAccounts,
filterByAssetClasses, filterByAssetClasses,
filterByDataSource,
filterBySymbol,
filterByTags filterByTags
}); });

22
apps/api/src/app/order/order.service.ts

@ -345,6 +345,8 @@ export class OrderService {
const { const {
ACCOUNT: filtersByAccount, ACCOUNT: filtersByAccount,
ASSET_CLASS: filtersByAssetClass, ASSET_CLASS: filtersByAssetClass,
DATA_SOURCE: filtersByDataSource,
SYMBOL: filtersBySymbol,
TAG: filtersByTag TAG: filtersByTag
} = groupBy(filters, ({ type }) => { } = groupBy(filters, ({ type }) => {
return 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) { if (searchQuery) {
const searchQueryWhereInput: Prisma.SymbolProfileWhereInput[] = [ const searchQueryWhereInput: Prisma.SymbolProfileWhereInput[] = [
{ id: { mode: 'insensitive', startsWith: searchQuery } }, { id: { mode: 'insensitive', startsWith: searchQuery } },

18
apps/api/src/services/api/api.service.ts

@ -10,22 +10,28 @@ export class ApiService {
filterByAccounts, filterByAccounts,
filterByAssetClasses, filterByAssetClasses,
filterByAssetSubClasses, filterByAssetSubClasses,
filterByDataSource,
filterByHoldingType, filterByHoldingType,
filterBySearchQuery, filterBySearchQuery,
filterBySymbol,
filterByTags filterByTags
}: { }: {
filterByAccounts?: string; filterByAccounts?: string;
filterByAssetClasses?: string; filterByAssetClasses?: string;
filterByAssetSubClasses?: string; filterByAssetSubClasses?: string;
filterByDataSource?: string;
filterByHoldingType?: string; filterByHoldingType?: string;
filterBySearchQuery?: string; filterBySearchQuery?: string;
filterBySymbol?: string;
filterByTags?: string; filterByTags?: string;
}): Filter[] { }): Filter[] {
const accountIds = filterByAccounts?.split(',') ?? []; const accountIds = filterByAccounts?.split(',') ?? [];
const assetClasses = filterByAssetClasses?.split(',') ?? []; const assetClasses = filterByAssetClasses?.split(',') ?? [];
const assetSubClasses = filterByAssetSubClasses?.split(',') ?? []; const assetSubClasses = filterByAssetSubClasses?.split(',') ?? [];
const dataSource = filterByDataSource?.split(',') ?? [];
const holdingType = filterByHoldingType; const holdingType = filterByHoldingType;
const searchQuery = filterBySearchQuery?.toLowerCase(); const searchQuery = filterBySearchQuery?.toLowerCase();
const symbols = filterBySymbol?.split(',') ?? [];
const tagIds = filterByTags?.split(',') ?? []; const tagIds = filterByTags?.split(',') ?? [];
const filters = [ const filters = [
@ -47,6 +53,18 @@ export class ApiService {
type: 'ASSET_SUB_CLASS' 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) => { ...tagIds.map((tagId) => {
return <Filter>{ return <Filter>{
id: tagId, id: tagId,

1
libs/common/src/lib/interfaces/filter.interface.ts

@ -5,6 +5,7 @@ export interface Filter {
| 'ACCOUNT' | 'ACCOUNT'
| 'ASSET_CLASS' | 'ASSET_CLASS'
| 'ASSET_SUB_CLASS' | 'ASSET_SUB_CLASS'
| 'DATA_SOURCE'
| 'HOLDING_TYPE' | 'HOLDING_TYPE'
| 'PRESET_ID' | 'PRESET_ID'
| 'SEARCH_QUERY' | 'SEARCH_QUERY'

Loading…
Cancel
Save