@things-factory/shell 5.0.0-alpha.52 → 5.0.0-alpha.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertListParams = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
+ const debug = require('debug')('things-factory:shell:list-params-converter');
5
6
  const OPERATION_FUNCTION_MAP = {
6
7
  search: value => (0, typeorm_1.ILike)(value),
7
8
  eq: value => (0, typeorm_1.Equal)(value),
@@ -61,14 +62,31 @@ function makeSortingParams(sortings) {
61
62
  }
62
63
  function makeFilterParams(filters, searchables) {
63
64
  /* for where AND clauses */
64
- const columnFilters = filters.filter(filter => filter.operator !== 'search');
65
+ const columnFilters = (filters === null || filters === void 0 ? void 0 : filters.filter(filter => {
66
+ if (filter.operator === 'search') {
67
+ return false;
68
+ }
69
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
70
+ return false;
71
+ }
72
+ return true;
73
+ })) || [];
74
+ const searchFilters = searchables instanceof Array
75
+ ? (filters === null || filters === void 0 ? void 0 : filters.filter(filter => {
76
+ if (filter.operator !== 'search') {
77
+ return false;
78
+ }
79
+ if (!searchables.includes(filter.name)) {
80
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name);
81
+ return false;
82
+ }
83
+ return true;
84
+ })) || []
85
+ : [];
65
86
  const columnWhere = columnFilters.reduce((where, f) => {
66
87
  where[f.name] = getOperatorFunction(f);
67
88
  return where;
68
89
  }, {});
69
- const searchFilters = searchables instanceof Array
70
- ? filters.filter(filter => filter.operator === 'search' && searchables.includes(filter.name))
71
- : [];
72
90
  if (searchFilters.length === 0) {
73
91
  return {
74
92
  where: columnWhere
@@ -1 +1 @@
1
- {"version":3,"file":"list-params-converter.js","sourceRoot":"","sources":["../../server/utils/list-params-converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-params-converter.js","sourceRoot":"","sources":["../../server/utils/list-params-converter.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getQueryBuilderFromListParams = exports.buildQuery = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
5
  const condition_builder_1 = require("./condition-builder");
6
- const where_clause_builder_1 = require("./where-clause-builder");
6
+ const debug = require('debug')('things-factory:shell:list-query-builder');
7
7
  /**
8
8
  * @deprecated The name of this function does not imply an exact purpose and it is not possible to correspond to a foreign key using the meta information of the table column, so it is recommended to replace it with the A function.
9
9
  */
@@ -15,9 +15,27 @@ const buildQuery = function (queryBuilder, params, context, options) {
15
15
  if (typeof options === 'object') {
16
16
  var { domainRef = true, searchables } = options;
17
17
  }
18
- const columnFilters = ((_a = params.filters) === null || _a === void 0 ? void 0 : _a.filter(filter => filter.operator !== 'search')) || [];
18
+ const columnFilters = ((_a = params.filters) === null || _a === void 0 ? void 0 : _a.filter(filter => {
19
+ if (filter.operator === 'search') {
20
+ return false;
21
+ }
22
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
23
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name);
24
+ return false;
25
+ }
26
+ return true;
27
+ })) || [];
19
28
  const searchFilters = searchables instanceof Array
20
- ? ((_b = params.filters) === null || _b === void 0 ? void 0 : _b.filter(filter => filter.operator === 'search' && searchables.includes(filter.name))) || []
29
+ ? ((_b = params.filters) === null || _b === void 0 ? void 0 : _b.filter(filter => {
30
+ if (filter.operator !== 'search') {
31
+ return false;
32
+ }
33
+ if (!searchables.includes(filter.name)) {
34
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name);
35
+ return false;
36
+ }
37
+ return true;
38
+ })) || []
21
39
  : [];
22
40
  const pagination = params.pagination;
23
41
  const sortings = params.sortings;
@@ -62,62 +80,48 @@ const buildQuery = function (queryBuilder, params, context, options) {
62
80
  exports.buildQuery = buildQuery;
63
81
  function getQueryBuilderFromListParams(options) {
64
82
  var _a, _b;
65
- var { repository, params, domain, alias, searchables } = options;
83
+ var { repository, params, domain, alias, searchables, filtersMap = {} } = options;
66
84
  const selectQueryBuilder = repository.createQueryBuilder(alias);
67
- alias = selectQueryBuilder.alias;
68
- const columnFilters = ((_a = params.filters) === null || _a === void 0 ? void 0 : _a.filter(filter => filter.operator !== 'search')) || [];
85
+ const entityAlias = selectQueryBuilder.alias;
86
+ const columnFilters = ((_a = params.filters) === null || _a === void 0 ? void 0 : _a.filter(filter => {
87
+ if (filter.operator === 'search') {
88
+ return false;
89
+ }
90
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
91
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name);
92
+ return false;
93
+ }
94
+ return true;
95
+ })) || [];
69
96
  const searchFilters = searchables instanceof Array
70
- ? ((_b = params.filters) === null || _b === void 0 ? void 0 : _b.filter(filter => filter.operator === 'search' && searchables.includes(filter.name))) || []
97
+ ? ((_b = params.filters) === null || _b === void 0 ? void 0 : _b.filter(filter => {
98
+ if (filter.operator !== 'search') {
99
+ return false;
100
+ }
101
+ if (!searchables.includes(filter.name)) {
102
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name);
103
+ return false;
104
+ }
105
+ return true;
106
+ })) || []
71
107
  : [];
72
108
  const pagination = params.pagination;
73
109
  const sortings = params.sortings;
74
110
  const metadata = repository.metadata;
75
- const columnMetas = params.filters
76
- .map(filter => filter.name)
77
- .reduce((sum, name) => {
78
- sum[name] = metadata.columns.find(column => column.propertyName === name);
79
- return sum;
80
- }, {});
81
111
  if (columnFilters && columnFilters.length > 0) {
82
112
  columnFilters.forEach(filter => {
83
- const { name, operator, value } = filter;
84
- const condition = (0, where_clause_builder_1.buildWhereClause)({
85
- alias,
86
- columnMeta: columnMetas[name],
87
- operator,
88
- value,
89
- seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
90
- domain,
91
- selectQueryBuilder
92
- });
93
- if (condition === null || condition === void 0 ? void 0 : condition.clause)
94
- selectQueryBuilder.andWhere(condition.clause);
95
- if (condition === null || condition === void 0 ? void 0 : condition.parameters)
96
- selectQueryBuilder.setParameters(condition.parameters);
113
+ addCondition(metadata, selectQueryBuilder, selectQueryBuilder, filter, filtersMap, true);
97
114
  });
98
115
  }
99
116
  if (searchFilters.length > 0) {
100
117
  selectQueryBuilder.andWhere(new typeorm_1.Brackets(qb => {
101
118
  searchFilters.forEach(filter => {
102
- const { name, operator, value } = filter;
103
- const condition = (0, where_clause_builder_1.buildWhereClause)({
104
- alias,
105
- columnMeta: columnMetas[name],
106
- operator /* has to be 'search' */,
107
- value,
108
- seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
109
- domain,
110
- selectQueryBuilder
111
- });
112
- if (condition === null || condition === void 0 ? void 0 : condition.clause)
113
- qb.orWhere(condition.clause);
114
- if (condition === null || condition === void 0 ? void 0 : condition.parameters)
115
- selectQueryBuilder.setParameters(condition.parameters);
119
+ addCondition(metadata, selectQueryBuilder, qb, filter, filtersMap, false);
116
120
  });
117
121
  }));
118
122
  }
119
123
  if (domain) {
120
- selectQueryBuilder.andWhere(`${selectQueryBuilder.alias}.domain = :domain`, { domain: domain.id });
124
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id });
121
125
  }
122
126
  if (pagination && pagination.page > 0 && pagination.limit > 0) {
123
127
  selectQueryBuilder.skip(pagination.limit * (pagination.page - 1));
@@ -125,7 +129,7 @@ function getQueryBuilderFromListParams(options) {
125
129
  }
126
130
  if (sortings && sortings.length > 0) {
127
131
  sortings.forEach((sorting, index) => {
128
- const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${selectQueryBuilder.alias}.${sorting.name}`;
132
+ const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${entityAlias}.${sorting.name}`;
129
133
  if (index === 0) {
130
134
  selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC');
131
135
  }
@@ -137,4 +141,171 @@ function getQueryBuilderFromListParams(options) {
137
141
  return selectQueryBuilder;
138
142
  }
139
143
  exports.getQueryBuilderFromListParams = getQueryBuilderFromListParams;
144
+ function addCondition(metadata, selectQueryBuilder, whereExpressionBuilder, filter, filtersMap = {}, andCondition) {
145
+ const { name, operator, value } = filter;
146
+ const values = value instanceof Array ? value : [value];
147
+ const entityAlias = selectQueryBuilder.alias;
148
+ var { relationColumn, columnName } = filtersMap[name] || {};
149
+ /*
150
+ 1. relationColumn과 columnName이 지정된 경우
151
+ - relation inverse 테이블에서, columnName을 찾는다.
152
+ 2. relationColumn만 지정된 경우는 없어야 한다.
153
+ - 이 경우 columnName 은 'name' 이라고 판단한다.
154
+ 3. columnName이 지정된 경우.
155
+ - 이 경우는 columnName 만 적용한다.
156
+ */
157
+ if (relationColumn) {
158
+ var relationColumnMeta = metadata.columns.find(column => column.propertyName === relationColumn);
159
+ if (!relationColumnMeta) {
160
+ debug(`relationColumn "${relationColumn}" in filtersMap for "${name}" is not a relation column`);
161
+ return;
162
+ }
163
+ var relation = relationColumnMeta.relationMetadata;
164
+ var entityMetadata = relation.inverseEntityMetadata;
165
+ var columnMeta = entityMetadata.columns.find(column => column.propertyName === (columnName || 'name'));
166
+ if (!columnMeta) {
167
+ debug(`columnName "${columnName}" in filtersMap for "${name}" is not a column`);
168
+ return;
169
+ }
170
+ }
171
+ else {
172
+ var columnMeta = metadata.columns.find(column => column.propertyName === (columnName || name));
173
+ if (!columnMeta) {
174
+ columnName
175
+ ? debug(`columnName "${columnName}" in filtersMap for "${name}" is not a column`)
176
+ : debug(`name "${name}" is not a column`);
177
+ return;
178
+ }
179
+ var relation = columnMeta.relationMetadata;
180
+ if (relation) {
181
+ /* filterMap에 의해서 relationColumn 이 지정되지 않았더라도, name 또는 columnName의 column이 relation인 경우에는
182
+ - 조건절 구성을 위한 타겟필드명은 'name' 으로만 한정된다.
183
+ */
184
+ var relationColumnMeta = columnMeta;
185
+ var entityMetadata = relation.inverseEntityMetadata;
186
+ columnMeta = entityMetadata.columns.find(column => column.propertyName === 'name');
187
+ if (!columnMeta) {
188
+ debug(`relation column "${columnName || name}" does not have "name" column`);
189
+ return;
190
+ }
191
+ }
192
+ }
193
+ const dbNameForColumn = columnMeta.databaseName;
194
+ const alias = relationColumnMeta ? `${name}-filter` : entityAlias;
195
+ /* relation columne인 경우 name을 alias로 사용한다. */
196
+ const field = `${alias}.${dbNameForColumn}`;
197
+ var clause = '';
198
+ var parameters = {};
199
+ switch (operator) {
200
+ case 'eq':
201
+ clause = `${field} = :${name}`;
202
+ parameters = { [name]: value };
203
+ break;
204
+ case 'like':
205
+ clause = `${field} LIKE :${name}`;
206
+ parameters = { [name]: `%${value}%` };
207
+ break;
208
+ case 'search':
209
+ case 'i_like':
210
+ clause = `LOWER(${field}) LIKE :${name}`;
211
+ parameters = { [name]: `%${String(value).toLowerCase()}%` };
212
+ break;
213
+ case 'nlike':
214
+ clause = `${field} NOT LIKE :${name}`;
215
+ parameters = { [name]: `%${value}%` };
216
+ break;
217
+ case 'i_nlike':
218
+ clause = `LOWER(${field}) NOT LIKE :${name}`;
219
+ parameters = { [name]: `%${String(value).toLowerCase()}%` };
220
+ break;
221
+ case 'lt':
222
+ clause = `${field} < :${name}`;
223
+ parameters = { [name]: value };
224
+ break;
225
+ case 'gt':
226
+ clause = `${field} > :${name}`;
227
+ parameters = { [name]: value };
228
+ break;
229
+ case 'lte':
230
+ clause = `${field} <= :${name}`;
231
+ parameters = { [name]: value };
232
+ break;
233
+ case 'gte':
234
+ clause = `${field} >= :${name}`;
235
+ parameters = { [name]: value };
236
+ break;
237
+ case 'noteq':
238
+ clause = `${field} != :${name}`;
239
+ parameters = { [name]: value };
240
+ break;
241
+ case 'in':
242
+ clause = `${field} IN (:...${name})`;
243
+ parameters = { [name]: values };
244
+ break;
245
+ case 'notin':
246
+ clause = `${field} NOT IN (:...${name})`;
247
+ parameters = { [name]: values };
248
+ break;
249
+ case 'notin_with_null':
250
+ clause = `${field} IS NULL OR ${field} NOT IN (:...${name}))`;
251
+ parameters = { [name]: values };
252
+ break;
253
+ case 'is_null':
254
+ clause = `${field} IS NULL`;
255
+ break;
256
+ case 'is_not_null':
257
+ clause = `${field} IS NOT NULL`;
258
+ break;
259
+ case 'is_false':
260
+ clause = `${field} IS FALSE`;
261
+ break;
262
+ case 'is_true':
263
+ clause = `${field} IS TRUE`;
264
+ break;
265
+ case 'is_not_false':
266
+ clause = `${field} IS NOT FALSE`;
267
+ break;
268
+ case 'is_not_true':
269
+ clause = `${field} IS NOT TRUE`;
270
+ break;
271
+ case 'is_present':
272
+ clause = `${field} IS PRESENT`;
273
+ break;
274
+ case 'is_blank':
275
+ clause = `${field} IS BLANK`;
276
+ break;
277
+ case 'is_empty_num_id':
278
+ clause = `${field} IS EMPTY NUMERIC ID`;
279
+ break;
280
+ case 'between':
281
+ clause = `${field} BETWEEN :${name}_1 AND :${name}_2`;
282
+ parameters = { [`${name}_1`]: values[0], [`${name}_2`]: values[1] };
283
+ break;
284
+ }
285
+ if (relationColumnMeta) {
286
+ const { propertyName } = relationColumnMeta;
287
+ const property = `${entityAlias}.${propertyName}`;
288
+ if (andCondition) {
289
+ selectQueryBuilder.innerJoin(property, alias, clause, parameters);
290
+ }
291
+ else {
292
+ selectQueryBuilder.leftJoin(property, alias);
293
+ whereExpressionBuilder.orWhere(clause, parameters);
294
+ }
295
+ }
296
+ else {
297
+ andCondition
298
+ ? whereExpressionBuilder.andWhere(clause, parameters)
299
+ : whereExpressionBuilder.orWhere(clause, parameters);
300
+ }
301
+ }
302
+ // export function adjustFiltersFromListParam(params: ListParam, filtersChange: Filter[]): ListParam {
303
+ // const { filters = [] } = params
304
+ // var filtersNew = [...filters]
305
+ // filtersChange.forEach(change => {
306
+ // const idx = (filtersNew || []).findIndex(f => f.name === change.name)
307
+ // idx !== -1 ? filtersNew.splice(idx, 1, change) : filtersNew.push(change)
308
+ // })
309
+ // return { ...params, filters: filtersNew }
310
+ // }
140
311
  //# sourceMappingURL=list-query-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/shell",
3
- "version": "5.0.0-alpha.52",
3
+ "version": "5.0.0-alpha.54",
4
4
  "description": "Core module for framework",
5
5
  "bin": {
6
6
  "things-factory": "bin/things-factory",
@@ -50,10 +50,10 @@
50
50
  "@operato/layout": "1.0.0-beta.26",
51
51
  "@operato/shell": "1.0.0-beta.26",
52
52
  "@operato/utils": "1.0.0-beta.26",
53
- "@things-factory/ejs-remote": "^5.0.0-alpha.52",
54
- "@things-factory/env": "^5.0.0-alpha.52",
55
- "@things-factory/styles": "^5.0.0-alpha.52",
56
- "@things-factory/utils": "^5.0.0-alpha.52",
53
+ "@things-factory/ejs-remote": "^5.0.0-alpha.54",
54
+ "@things-factory/env": "^5.0.0-alpha.54",
55
+ "@things-factory/styles": "^5.0.0-alpha.54",
56
+ "@things-factory/utils": "^5.0.0-alpha.54",
57
57
  "@webcomponents/webcomponentsjs": "^2.6.0",
58
58
  "@webpack-contrib/schema-utils": "^1.0.0-beta.0",
59
59
  "apollo-server-core": "^3.6.4",
@@ -121,7 +121,7 @@
121
121
  },
122
122
  "optionalDependencies": {
123
123
  "better-sqlite3": "^7.1.2",
124
- "mssql": "^6.1.0",
124
+ "mssql": "^8.1.2",
125
125
  "mysql2": "^2.3.3",
126
126
  "oracledb": "^5.1.0",
127
127
  "pg": "^8.3.0",
@@ -130,5 +130,5 @@
130
130
  "resolutions": {
131
131
  "core-js": "^3.16.0"
132
132
  },
133
- "gitHead": "dd9c8f2e256e256e42bd9bd26db5eaa955f85620"
133
+ "gitHead": "0274aad474b254a6215fdf54d4f553c5b45becd8"
134
134
  }
@@ -3,6 +3,8 @@ import { Between, Equal, FindOperator, ILike, In, IsNull, Like, Not, Raw } from
3
3
  import { Filter, ListParam, Pagination, Sorting } from '../service/common-types'
4
4
  import { Domain } from '../service/domain/domain'
5
5
 
6
+ const debug = require('debug')('things-factory:shell:list-params-converter')
7
+
6
8
  const OPERATION_FUNCTION_MAP: { [operator: string]: (value: any) => FindOperator<any> } = {
7
9
  search: value => ILike(value),
8
10
  eq: value => Equal(value),
@@ -75,17 +77,36 @@ function makeFilterParams(
75
77
  where: { [name: string]: FindOperator<any> } | { [name: string]: FindOperator<any> }[]
76
78
  } {
77
79
  /* for where AND clauses */
78
- const columnFilters = filters.filter(filter => filter.operator !== 'search')
79
- const columnWhere = columnFilters.reduce((where, f) => {
80
- where[f.name] = getOperatorFunction(f)
81
- return where
82
- }, {} as { [name: string]: FindOperator<any> })
80
+ const columnFilters =
81
+ filters?.filter(filter => {
82
+ if (filter.operator === 'search') {
83
+ return false
84
+ }
85
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
86
+ return false
87
+ }
88
+ return true
89
+ }) || []
83
90
 
84
91
  const searchFilters =
85
92
  searchables instanceof Array
86
- ? filters.filter(filter => filter.operator === 'search' && searchables.includes(filter.name))
93
+ ? filters?.filter(filter => {
94
+ if (filter.operator !== 'search') {
95
+ return false
96
+ }
97
+ if (!searchables.includes(filter.name)) {
98
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
99
+ return false
100
+ }
101
+ return true
102
+ }) || []
87
103
  : []
88
104
 
105
+ const columnWhere = columnFilters.reduce((where, f) => {
106
+ where[f.name] = getOperatorFunction(f)
107
+ return where
108
+ }, {} as { [name: string]: FindOperator<any> })
109
+
89
110
  if (searchFilters.length === 0) {
90
111
  return {
91
112
  where: columnWhere
@@ -1,9 +1,10 @@
1
- import { Brackets, Repository, SelectQueryBuilder } from 'typeorm'
2
- import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata'
1
+ import { Filter, ListParam } from 'server/service'
2
+ import { Brackets, EntityMetadata, Repository, SelectQueryBuilder, WhereExpressionBuilder } from 'typeorm'
3
3
 
4
4
  import { Domain } from '../service/domain/domain'
5
5
  import { buildCondition } from './condition-builder'
6
- import { buildWhereClause } from './where-clause-builder'
6
+
7
+ const debug = require('debug')('things-factory:shell:list-query-builder')
7
8
 
8
9
  /**
9
10
  * @deprecated The name of this function does not imply an exact purpose and it is not possible to correspond to a foreign key using the meta information of the table column, so it is recommended to replace it with the A function.
@@ -27,11 +28,32 @@ export const buildQuery = function (
27
28
  var { domainRef = true, searchables } = options
28
29
  }
29
30
 
30
- const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
31
+ const columnFilters =
32
+ params.filters?.filter(filter => {
33
+ if (filter.operator === 'search') {
34
+ return false
35
+ }
36
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
37
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
38
+ return false
39
+ }
40
+ return true
41
+ }) || []
42
+
31
43
  const searchFilters =
32
44
  searchables instanceof Array
33
- ? params.filters?.filter(filter => filter.operator === 'search' && searchables.includes(filter.name)) || []
45
+ ? params.filters?.filter(filter => {
46
+ if (filter.operator !== 'search') {
47
+ return false
48
+ }
49
+ if (!searchables.includes(filter.name)) {
50
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
51
+ return false
52
+ }
53
+ return true
54
+ }) || []
34
55
  : []
56
+
35
57
  const pagination = params.pagination
36
58
  const sortings = params.sortings
37
59
  const domainId = context && context.state.domain && context.state.domain.id
@@ -88,47 +110,49 @@ export const buildQuery = function (
88
110
 
89
111
  export function getQueryBuilderFromListParams<Type>(options: {
90
112
  repository: Repository<Type>
91
- params: any
113
+ params: ListParam
92
114
  domain?: Domain
93
115
  alias?: string
94
116
  searchables?: string[]
117
+ filtersMap?: { [name: string]: { columnName: string; relationColumn: string } }
95
118
  }): SelectQueryBuilder<Type> {
96
- var { repository, params, domain, alias, searchables } = options
119
+ var { repository, params, domain, alias, searchables, filtersMap = {} } = options
120
+
97
121
  const selectQueryBuilder = repository.createQueryBuilder(alias)
98
- alias = selectQueryBuilder.alias
122
+ const entityAlias = selectQueryBuilder.alias
99
123
 
100
- const columnFilters = params.filters?.filter(filter => filter.operator !== 'search') || []
124
+ const columnFilters =
125
+ params.filters?.filter(filter => {
126
+ if (filter.operator === 'search') {
127
+ return false
128
+ }
129
+ if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {
130
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
131
+ return false
132
+ }
133
+ return true
134
+ }) || []
101
135
  const searchFilters =
102
136
  searchables instanceof Array
103
- ? params.filters?.filter(filter => filter.operator === 'search' && searchables.includes(filter.name)) || []
137
+ ? params.filters?.filter(filter => {
138
+ if (filter.operator !== 'search') {
139
+ return false
140
+ }
141
+ if (!searchables.includes(filter.name)) {
142
+ debug('"searchables" setting is required for like searches with a heavy database query load', filter.name)
143
+ return false
144
+ }
145
+ return true
146
+ }) || []
104
147
  : []
105
148
  const pagination = params.pagination
106
149
  const sortings = params.sortings
107
150
 
108
151
  const metadata = repository.metadata
109
- const columnMetas = params.filters
110
- .map(filter => filter.name)
111
- .reduce((sum, name) => {
112
- sum[name] = metadata.columns.find(column => column.propertyName === name)
113
- return sum
114
- }, {} as { [name: string]: ColumnMetadata })
115
152
 
116
153
  if (columnFilters && columnFilters.length > 0) {
117
154
  columnFilters.forEach(filter => {
118
- const { name, operator, value } = filter
119
-
120
- const condition = buildWhereClause({
121
- alias,
122
- columnMeta: columnMetas[name],
123
- operator,
124
- value,
125
- seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
126
- domain,
127
- selectQueryBuilder
128
- })
129
-
130
- if (condition?.clause) selectQueryBuilder.andWhere(condition.clause)
131
- if (condition?.parameters) selectQueryBuilder.setParameters(condition.parameters)
155
+ addCondition(metadata, selectQueryBuilder, selectQueryBuilder, filter, filtersMap, true)
132
156
  })
133
157
  }
134
158
 
@@ -136,27 +160,14 @@ export function getQueryBuilderFromListParams<Type>(options: {
136
160
  selectQueryBuilder.andWhere(
137
161
  new Brackets(qb => {
138
162
  searchFilters.forEach(filter => {
139
- const { name, operator, value } = filter
140
-
141
- const condition = buildWhereClause({
142
- alias,
143
- columnMeta: columnMetas[name],
144
- operator /* has to be 'search' */,
145
- value,
146
- seq: Object.keys(selectQueryBuilder.getParameters()).length + 1,
147
- domain,
148
- selectQueryBuilder
149
- })
150
-
151
- if (condition?.clause) qb.orWhere(condition.clause)
152
- if (condition?.parameters) selectQueryBuilder.setParameters(condition.parameters)
163
+ addCondition(metadata, selectQueryBuilder, qb, filter, filtersMap, false)
153
164
  })
154
165
  })
155
166
  )
156
167
  }
157
168
 
158
169
  if (domain) {
159
- selectQueryBuilder.andWhere(`${selectQueryBuilder.alias}.domain = :domain`, { domain: domain.id })
170
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id })
160
171
  }
161
172
 
162
173
  if (pagination && pagination.page > 0 && pagination.limit > 0) {
@@ -166,8 +177,7 @@ export function getQueryBuilderFromListParams<Type>(options: {
166
177
 
167
178
  if (sortings && sortings.length > 0) {
168
179
  sortings.forEach((sorting, index) => {
169
- const sortField =
170
- sorting.name.split('.').length > 1 ? sorting.name : `${selectQueryBuilder.alias}.${sorting.name}`
180
+ const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${entityAlias}.${sorting.name}`
171
181
  if (index === 0) {
172
182
  selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')
173
183
  } else {
@@ -178,3 +188,209 @@ export function getQueryBuilderFromListParams<Type>(options: {
178
188
 
179
189
  return selectQueryBuilder
180
190
  }
191
+
192
+ function addCondition<T>(
193
+ metadata: EntityMetadata,
194
+ selectQueryBuilder: SelectQueryBuilder<T>,
195
+ whereExpressionBuilder: WhereExpressionBuilder,
196
+ filter: Filter,
197
+ filtersMap: { [name: string]: { columnName: string; relationColumn: string } } = {},
198
+ andCondition: boolean
199
+ ): void {
200
+ const { name, operator, value } = filter
201
+ const values = value instanceof Array ? value : [value]
202
+ const entityAlias = selectQueryBuilder.alias
203
+
204
+ var { relationColumn, columnName } = filtersMap[name] || {}
205
+ /*
206
+ 1. relationColumn과 columnName이 지정된 경우
207
+ - relation inverse 테이블에서, columnName을 찾는다.
208
+ 2. relationColumn만 지정된 경우는 없어야 한다.
209
+ - 이 경우 columnName 은 'name' 이라고 판단한다.
210
+ 3. columnName이 지정된 경우.
211
+ - 이 경우는 columnName 만 적용한다.
212
+ */
213
+ if (relationColumn) {
214
+ var relationColumnMeta = metadata.columns.find(column => column.propertyName === relationColumn)
215
+ if (!relationColumnMeta) {
216
+ debug(`relationColumn "${relationColumn}" in filtersMap for "${name}" is not a relation column`)
217
+ return
218
+ }
219
+
220
+ var relation = relationColumnMeta.relationMetadata
221
+ var entityMetadata = relation.inverseEntityMetadata
222
+ var columnMeta = entityMetadata.columns.find(column => column.propertyName === (columnName || 'name'))
223
+ if (!columnMeta) {
224
+ debug(`columnName "${columnName}" in filtersMap for "${name}" is not a column`)
225
+ return
226
+ }
227
+ } else {
228
+ var columnMeta = metadata.columns.find(column => column.propertyName === (columnName || name))
229
+ if (!columnMeta) {
230
+ columnName
231
+ ? debug(`columnName "${columnName}" in filtersMap for "${name}" is not a column`)
232
+ : debug(`name "${name}" is not a column`)
233
+ return
234
+ }
235
+ var relation = columnMeta.relationMetadata
236
+
237
+ if (relation) {
238
+ /* filterMap에 의해서 relationColumn 이 지정되지 않았더라도, name 또는 columnName의 column이 relation인 경우에는
239
+ - 조건절 구성을 위한 타겟필드명은 'name' 으로만 한정된다.
240
+ */
241
+ var relationColumnMeta = columnMeta
242
+ var entityMetadata = relation.inverseEntityMetadata
243
+ columnMeta = entityMetadata.columns.find(column => column.propertyName === 'name')
244
+ if (!columnMeta) {
245
+ debug(`relation column "${columnName || name}" does not have "name" column`)
246
+ return
247
+ }
248
+ }
249
+ }
250
+
251
+ const dbNameForColumn = columnMeta.databaseName
252
+ const alias = relationColumnMeta ? `${name}-filter` : entityAlias
253
+
254
+ /* relation columne인 경우 name을 alias로 사용한다. */
255
+ const field = `${alias}.${dbNameForColumn}`
256
+
257
+ var clause = ''
258
+ var parameters = {}
259
+
260
+ switch (operator) {
261
+ case 'eq':
262
+ clause = `${field} = :${name}`
263
+ parameters = { [name]: value }
264
+ break
265
+
266
+ case 'like':
267
+ clause = `${field} LIKE :${name}`
268
+ parameters = { [name]: `%${value}%` }
269
+ break
270
+
271
+ case 'search':
272
+ case 'i_like':
273
+ clause = `LOWER(${field}) LIKE :${name}`
274
+ parameters = { [name]: `%${String(value).toLowerCase()}%` }
275
+ break
276
+
277
+ case 'nlike':
278
+ clause = `${field} NOT LIKE :${name}`
279
+ parameters = { [name]: `%${value}%` }
280
+ break
281
+
282
+ case 'i_nlike':
283
+ clause = `LOWER(${field}) NOT LIKE :${name}`
284
+ parameters = { [name]: `%${String(value).toLowerCase()}%` }
285
+ break
286
+
287
+ case 'lt':
288
+ clause = `${field} < :${name}`
289
+ parameters = { [name]: value }
290
+ break
291
+
292
+ case 'gt':
293
+ clause = `${field} > :${name}`
294
+ parameters = { [name]: value }
295
+ break
296
+
297
+ case 'lte':
298
+ clause = `${field} <= :${name}`
299
+ parameters = { [name]: value }
300
+ break
301
+
302
+ case 'gte':
303
+ clause = `${field} >= :${name}`
304
+ parameters = { [name]: value }
305
+ break
306
+
307
+ case 'noteq':
308
+ clause = `${field} != :${name}`
309
+ parameters = { [name]: value }
310
+ break
311
+
312
+ case 'in':
313
+ clause = `${field} IN (:...${name})`
314
+ parameters = { [name]: values }
315
+ break
316
+
317
+ case 'notin':
318
+ clause = `${field} NOT IN (:...${name})`
319
+ parameters = { [name]: values }
320
+ break
321
+
322
+ case 'notin_with_null':
323
+ clause = `${field} IS NULL OR ${field} NOT IN (:...${name}))`
324
+ parameters = { [name]: values }
325
+ break
326
+
327
+ case 'is_null':
328
+ clause = `${field} IS NULL`
329
+ break
330
+
331
+ case 'is_not_null':
332
+ clause = `${field} IS NOT NULL`
333
+ break
334
+
335
+ case 'is_false':
336
+ clause = `${field} IS FALSE`
337
+ break
338
+
339
+ case 'is_true':
340
+ clause = `${field} IS TRUE`
341
+ break
342
+
343
+ case 'is_not_false':
344
+ clause = `${field} IS NOT FALSE`
345
+ break
346
+
347
+ case 'is_not_true':
348
+ clause = `${field} IS NOT TRUE`
349
+ break
350
+
351
+ case 'is_present':
352
+ clause = `${field} IS PRESENT`
353
+ break
354
+
355
+ case 'is_blank':
356
+ clause = `${field} IS BLANK`
357
+ break
358
+
359
+ case 'is_empty_num_id':
360
+ clause = `${field} IS EMPTY NUMERIC ID`
361
+ break
362
+
363
+ case 'between':
364
+ clause = `${field} BETWEEN :${name}_1 AND :${name}_2`
365
+ parameters = { [`${name}_1`]: values[0], [`${name}_2`]: values[1] }
366
+ break
367
+ }
368
+
369
+ if (relationColumnMeta) {
370
+ const { propertyName } = relationColumnMeta
371
+ const property = `${entityAlias}.${propertyName}`
372
+ if (andCondition) {
373
+ selectQueryBuilder.innerJoin(property, alias, clause, parameters)
374
+ } else {
375
+ selectQueryBuilder.leftJoin(property, alias)
376
+ whereExpressionBuilder.orWhere(clause, parameters)
377
+ }
378
+ } else {
379
+ andCondition
380
+ ? whereExpressionBuilder.andWhere(clause, parameters)
381
+ : whereExpressionBuilder.orWhere(clause, parameters)
382
+ }
383
+ }
384
+
385
+ // export function adjustFiltersFromListParam(params: ListParam, filtersChange: Filter[]): ListParam {
386
+ // const { filters = [] } = params
387
+
388
+ // var filtersNew = [...filters]
389
+
390
+ // filtersChange.forEach(change => {
391
+ // const idx = (filtersNew || []).findIndex(f => f.name === change.name)
392
+ // idx !== -1 ? filtersNew.splice(idx, 1, change) : filtersNew.push(change)
393
+ // })
394
+
395
+ // return { ...params, filters: filtersNew }
396
+ // }
@@ -1,159 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildWhereClause = void 0;
4
- function getClause(selectQueryBuilder, columnMeta, operator, field, pname) {
5
- const relation = columnMeta.relationMetadata;
6
- if (!relation) {
7
- switch (operator) {
8
- case 'like':
9
- return `${field} LIKE :${pname}`;
10
- case 'search':
11
- case 'i_like':
12
- return `LOWER(${field}) LIKE :${pname}`;
13
- case 'nlike':
14
- return `${field} NOT LIKE :${pname}`;
15
- case 'i_nlike':
16
- return `LOWER(${field}) NOT LIKE :${pname}`;
17
- }
18
- }
19
- const inverseEntityMetadata = relation.inverseEntityMetadata;
20
- const { target, tableName, ownColumns } = inverseEntityMetadata;
21
- var subquery = selectQueryBuilder.subQuery().select('id').from(target, tableName);
22
- switch (operator) {
23
- case 'like':
24
- subquery = subquery.where(`${tableName}.name LIKE :${pname}`);
25
- break;
26
- case 'search':
27
- case 'i_like':
28
- subquery = subquery.where(`LOWER(${tableName}.name) LIKE :${pname}`);
29
- break;
30
- case 'nlike':
31
- subquery = subquery.where(`${tableName}.name NOT LIKE :${pname}`);
32
- break;
33
- case 'i_nlike':
34
- subquery = subquery.where(`LOWER(${tableName}.name) NOT LIKE :${pname}`);
35
- break;
36
- }
37
- if (ownColumns.find(column => column.propertyName === 'domain')) {
38
- subquery.andWhere(`${tableName}.domain_id = :domain`);
39
- }
40
- return `${field} IN ${subquery.getQuery()}`;
41
- }
42
- const buildWhereClause = function (options) {
43
- const { alias, columnMeta, operator, value, seq, selectQueryBuilder, domain } = options;
44
- const values = value instanceof Array ? value : [value];
45
- const { propertyName: name, propertyAliasName, propertyPath: path, databaseName } = columnMeta;
46
- const field = `${alias}.${databaseName}`;
47
- const pname = `args${seq}`;
48
- switch (operator) {
49
- case 'eq':
50
- return {
51
- clause: `${field} = :${pname}`,
52
- parameters: { [pname]: value }
53
- };
54
- case 'like':
55
- return {
56
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
57
- parameters: { [pname]: `%${value}%` }
58
- };
59
- case 'search':
60
- case 'i_like':
61
- return {
62
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
63
- parameters: { [pname]: `%${String(value).toLowerCase()}%` }
64
- };
65
- case 'nlike':
66
- return {
67
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
68
- value: { [pname]: `%${value}%` }
69
- };
70
- case 'i_nlike':
71
- return {
72
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
73
- value: { [pname]: `%${String(value).toLowerCase()}%` }
74
- };
75
- case 'lt':
76
- return {
77
- clause: `${field} < :${pname}`,
78
- parameters: { [pname]: value }
79
- };
80
- case 'gt':
81
- return {
82
- clause: `${field} > :${pname}`,
83
- parameters: { [pname]: value }
84
- };
85
- case 'lte':
86
- return {
87
- clause: `${field} <= :${pname}`,
88
- parameters: { [pname]: value }
89
- };
90
- case 'gte':
91
- return {
92
- clause: `${field} >= :${pname}`,
93
- parameters: { [pname]: value }
94
- };
95
- case 'noteq':
96
- return {
97
- clause: `${field} != :${pname}`,
98
- parameters: { [pname]: value }
99
- };
100
- case 'in':
101
- return {
102
- clause: `${field} IN (:...${pname})`,
103
- parameters: { [pname]: values }
104
- };
105
- case 'notin':
106
- return {
107
- clause: `${field} NOT IN (:...${pname})`,
108
- parameters: { [pname]: values }
109
- };
110
- case 'notin_with_null':
111
- return {
112
- clause: `${field} IS NULL OR ${field} NOT IN (:...${pname}))`,
113
- parameters: { [pname]: values }
114
- };
115
- case 'is_null':
116
- return {
117
- clause: `${field} IS NULL`
118
- };
119
- case 'is_not_null':
120
- return {
121
- clause: `${field} IS NOT NULL`
122
- };
123
- case 'is_false':
124
- return {
125
- clause: `${field} IS FALSE`
126
- };
127
- case 'is_true':
128
- return {
129
- clause: `${field} IS TRUE`
130
- };
131
- case 'is_not_false':
132
- return {
133
- clause: `${field} IS NOT FALSE`
134
- };
135
- case 'is_not_true':
136
- return {
137
- clause: `${field} IS NOT TRUE`
138
- };
139
- case 'is_present':
140
- return {
141
- clause: `${field} IS PRESENT`
142
- };
143
- case 'is_blank':
144
- return {
145
- clause: `${field} IS BLANK`
146
- };
147
- case 'is_empty_num_id':
148
- return {
149
- clause: `${field} IS EMPTY NUMERIC ID`
150
- };
151
- case 'between':
152
- return {
153
- clause: `${field} BETWEEN :${pname}_1 AND :${pname}_2`,
154
- parameters: { [`args${seq}_1`]: values[0], [`args${seq}_2`]: values[1] }
155
- };
156
- }
157
- };
158
- exports.buildWhereClause = buildWhereClause;
159
- //# sourceMappingURL=where-clause-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"where-clause-builder.js","sourceRoot":"","sources":["../../server/utils/where-clause-builder.ts"],"names":[],"mappings":"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"}
@@ -1,200 +0,0 @@
1
- import { SelectQueryBuilder } from 'typeorm'
2
- import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata'
3
-
4
- import { Domain } from '../service/domain/domain'
5
-
6
- function getClause(
7
- selectQueryBuilder: SelectQueryBuilder<any>,
8
- columnMeta: ColumnMetadata,
9
- operator: string,
10
- field: string,
11
- pname: string
12
- ): string {
13
- const relation = columnMeta.relationMetadata
14
-
15
- if (!relation) {
16
- switch (operator) {
17
- case 'like':
18
- return `${field} LIKE :${pname}`
19
-
20
- case 'search':
21
- case 'i_like':
22
- return `LOWER(${field}) LIKE :${pname}`
23
-
24
- case 'nlike':
25
- return `${field} NOT LIKE :${pname}`
26
-
27
- case 'i_nlike':
28
- return `LOWER(${field}) NOT LIKE :${pname}`
29
- }
30
- }
31
-
32
- const inverseEntityMetadata = relation.inverseEntityMetadata
33
- const { target, tableName, ownColumns } = inverseEntityMetadata
34
- var subquery = selectQueryBuilder.subQuery().select('id').from(target, tableName)
35
-
36
- switch (operator) {
37
- case 'like':
38
- subquery = subquery.where(`${tableName}.name LIKE :${pname}`)
39
- break
40
-
41
- case 'search':
42
- case 'i_like':
43
- subquery = subquery.where(`LOWER(${tableName}.name) LIKE :${pname}`)
44
- break
45
-
46
- case 'nlike':
47
- subquery = subquery.where(`${tableName}.name NOT LIKE :${pname}`)
48
- break
49
-
50
- case 'i_nlike':
51
- subquery = subquery.where(`LOWER(${tableName}.name) NOT LIKE :${pname}`)
52
- break
53
- }
54
-
55
- if (ownColumns.find(column => column.propertyName === 'domain')) {
56
- subquery.andWhere(`${tableName}.domain_id = :domain`)
57
- }
58
-
59
- return `${field} IN ${subquery.getQuery()}`
60
- }
61
-
62
- export const buildWhereClause = function (options: {
63
- alias: string
64
- columnMeta: ColumnMetadata
65
- operator: string
66
- value: any
67
- seq: number
68
- domain: Domain
69
- selectQueryBuilder: SelectQueryBuilder<any>
70
- }) {
71
- const { alias, columnMeta, operator, value, seq, selectQueryBuilder, domain } = options
72
- const values = value instanceof Array ? value : [value]
73
- const { propertyName: name, propertyAliasName, propertyPath: path, databaseName } = columnMeta
74
- const field = `${alias}.${databaseName}`
75
- const pname = `args${seq}`
76
-
77
- switch (operator) {
78
- case 'eq':
79
- return {
80
- clause: `${field} = :${pname}`,
81
- parameters: { [pname]: value }
82
- }
83
-
84
- case 'like':
85
- return {
86
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
87
- parameters: { [pname]: `%${value}%` }
88
- }
89
-
90
- case 'search':
91
- case 'i_like':
92
- return {
93
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
94
- parameters: { [pname]: `%${String(value).toLowerCase()}%` }
95
- }
96
-
97
- case 'nlike':
98
- return {
99
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
100
- value: { [pname]: `%${value}%` }
101
- }
102
-
103
- case 'i_nlike':
104
- return {
105
- clause: getClause(selectQueryBuilder, columnMeta, operator, field, pname),
106
- value: { [pname]: `%${String(value).toLowerCase()}%` }
107
- }
108
-
109
- case 'lt':
110
- return {
111
- clause: `${field} < :${pname}`,
112
- parameters: { [pname]: value }
113
- }
114
-
115
- case 'gt':
116
- return {
117
- clause: `${field} > :${pname}`,
118
- parameters: { [pname]: value }
119
- }
120
-
121
- case 'lte':
122
- return {
123
- clause: `${field} <= :${pname}`,
124
- parameters: { [pname]: value }
125
- }
126
-
127
- case 'gte':
128
- return {
129
- clause: `${field} >= :${pname}`,
130
- parameters: { [pname]: value }
131
- }
132
-
133
- case 'noteq':
134
- return {
135
- clause: `${field} != :${pname}`,
136
- parameters: { [pname]: value }
137
- }
138
-
139
- case 'in':
140
- return {
141
- clause: `${field} IN (:...${pname})`,
142
- parameters: { [pname]: values }
143
- }
144
-
145
- case 'notin':
146
- return {
147
- clause: `${field} NOT IN (:...${pname})`,
148
- parameters: { [pname]: values }
149
- }
150
-
151
- case 'notin_with_null':
152
- return {
153
- clause: `${field} IS NULL OR ${field} NOT IN (:...${pname}))`,
154
- parameters: { [pname]: values }
155
- }
156
-
157
- case 'is_null':
158
- return {
159
- clause: `${field} IS NULL`
160
- }
161
- case 'is_not_null':
162
- return {
163
- clause: `${field} IS NOT NULL`
164
- }
165
- case 'is_false':
166
- return {
167
- clause: `${field} IS FALSE`
168
- }
169
- case 'is_true':
170
- return {
171
- clause: `${field} IS TRUE`
172
- }
173
- case 'is_not_false':
174
- return {
175
- clause: `${field} IS NOT FALSE`
176
- }
177
- case 'is_not_true':
178
- return {
179
- clause: `${field} IS NOT TRUE`
180
- }
181
- case 'is_present':
182
- return {
183
- clause: `${field} IS PRESENT`
184
- }
185
- case 'is_blank':
186
- return {
187
- clause: `${field} IS BLANK`
188
- }
189
- case 'is_empty_num_id':
190
- return {
191
- clause: `${field} IS EMPTY NUMERIC ID`
192
- }
193
-
194
- case 'between':
195
- return {
196
- clause: `${field} BETWEEN :${pname}_1 AND :${pname}_2`,
197
- parameters: { [`args${seq}_1`]: values[0], [`args${seq}_2`]: values[1] }
198
- }
199
- }
200
- }