@things-factory/shell 6.0.113 → 6.0.115

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.getQueryBuilderFromListParams = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
+ const list_param_1 = require("../service/common-types/list-param");
5
6
  /**
6
7
  *
7
8
  * @param options
@@ -10,6 +11,7 @@ const typeorm_1 = require("typeorm");
10
11
  function getQueryBuilderFromListParams(options) {
11
12
  var _a, _b;
12
13
  var { repository, params, domain, alias, searchables, filtersMap = {} } = options;
14
+ var { inherited = list_param_1.InheritedValueType.None } = params || {};
13
15
  const selectQueryBuilder = repository.createQueryBuilder(alias);
14
16
  const entityAlias = selectQueryBuilder.alias;
15
17
  const columnFilters = ((_a = params.filters) === null || _a === void 0 ? void 0 : _a.filter(filter => {
@@ -50,7 +52,20 @@ function getQueryBuilderFromListParams(options) {
50
52
  }));
51
53
  }
52
54
  if (domain) {
53
- selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id });
55
+ if (!inherited || inherited == list_param_1.InheritedValueType.None) {
56
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id });
57
+ }
58
+ else if (inherited == list_param_1.InheritedValueType.Include) {
59
+ selectQueryBuilder.andWhere(`${entityAlias}.domain In(:...domains)`, {
60
+ domains: [domain.id, domain.parentId].filter(Boolean)
61
+ });
62
+ }
63
+ else if (inherited == list_param_1.InheritedValueType.Only) {
64
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.parentId || 'Impossible' });
65
+ }
66
+ else {
67
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: 'Impossible' });
68
+ }
54
69
  }
55
70
  if (pagination && pagination.page > 0 && pagination.limit > 0) {
56
71
  selectQueryBuilder.skip(pagination.limit * (pagination.page - 1));
@@ -1 +1 @@
1
- {"version":3,"file":"get-query-builder-from-list-params.js","sourceRoot":"","sources":["../../server/utils/get-query-builder-from-list-params.ts"],"names":[],"mappings":"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","sourcesContent":["import { Brackets, EntityMetadata, Repository, SelectQueryBuilder, WhereExpressionBuilder } from 'typeorm'\nimport { RelationMetadata } from 'typeorm/metadata/RelationMetadata'\n\nimport { Filter, ListParam } from '../service/common-types/list-param'\nimport { Domain } from '../service/domain/domain'\n\n/**\n *\n * @param options\n * @returns\n */\nexport function getQueryBuilderFromListParams<Type>(options: {\n repository: Repository<Type>\n params: ListParam\n domain?: Domain\n alias?: string\n searchables?: string[]\n filtersMap?: { [name: string]: { columnName: string; relationColumn?: string } }\n}): SelectQueryBuilder<Type> {\n var { repository, params, domain, alias, searchables, filtersMap = {} } = options\n\n const selectQueryBuilder = repository.createQueryBuilder(alias)\n const entityAlias = selectQueryBuilder.alias\n\n const columnFilters =\n params.filters?.filter(filter => {\n if (filter.operator === 'search') {\n return false\n }\n if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n const searchFilters =\n searchables instanceof Array\n ? params.filters?.filter(filter => {\n if (filter.operator !== 'search') {\n return false\n }\n if (!searchables.includes(filter.name)) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n : []\n const pagination = params.pagination\n const sortings = params.sortings\n\n const metadata = repository.metadata\n\n if (columnFilters && columnFilters.length > 0) {\n columnFilters.forEach(filter => {\n addCondition(metadata, selectQueryBuilder, selectQueryBuilder, filter, filtersMap, true)\n })\n }\n\n if (searchFilters.length > 0) {\n selectQueryBuilder.andWhere(\n new Brackets(qb => {\n searchFilters.forEach(filter => {\n addCondition(metadata, selectQueryBuilder, qb, filter, filtersMap, false)\n })\n })\n )\n }\n\n if (domain) {\n selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id })\n }\n\n if (pagination && pagination.page > 0 && pagination.limit > 0) {\n selectQueryBuilder.skip(pagination.limit * (pagination.page - 1))\n selectQueryBuilder.take(pagination.limit)\n }\n\n if (sortings && sortings.length > 0) {\n sortings.forEach((sorting, index) => {\n const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${entityAlias}.${sorting.name}`\n if (index === 0) {\n selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n } else {\n selectQueryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n }\n })\n }\n\n return selectQueryBuilder\n}\n\nfunction addCondition<T>(\n metadata: EntityMetadata,\n selectQueryBuilder: SelectQueryBuilder<T>,\n whereExpressionBuilder: WhereExpressionBuilder,\n filter: Filter,\n filtersMap: { [name: string]: { columnName: string; relationColumn?: string } } = {},\n andCondition: boolean\n): void {\n const { name, operator, value } = filter\n const values = value instanceof Array ? value : [value]\n var entityAlias = selectQueryBuilder.alias\n\n var { relationColumn, columnName } = filtersMap[name] || {}\n /*\n 1. relationColumn과 columnName이 지정된 경우 \n - relation inverse 테이블에서, columnName을 찾는다.\n 2. relationColumn만 지정된 경우는 없어야 한다.\n - 이 경우 columnName 은 'name' 이라고 판단한다.\n 3. columnName이 지정된 경우.\n - 이 경우는 columnName 만 적용한다.\n */\n if (relationColumn) {\n const columns = relationColumn.split('.')\n var entityMetadata: EntityMetadata\n var relation: RelationMetadata\n\n for (const rcolumn of columns) {\n if (relation) {\n const { propertyName } = relationColumnMeta\n const property = `${entityAlias}.${propertyName}`\n\n entityAlias = `${entityAlias}-${entityMetadata.tableName}-for-${columnName || 'name'}` as string\n\n if (andCondition) {\n selectQueryBuilder.innerJoin(property, entityAlias)\n } else {\n selectQueryBuilder.leftJoin(property, entityAlias)\n }\n } else {\n entityMetadata = metadata\n }\n\n var relationColumnMeta = entityMetadata.columns.find(column => column.propertyName === rcolumn)\n if (!relationColumnMeta) {\n console.warn(`relationColumn \"${relationColumn}\" in filtersMap for \"${name}\" is not a relation column`)\n return\n }\n\n relation = relationColumnMeta.relationMetadata\n entityMetadata = relation.inverseEntityMetadata\n }\n\n var columnMeta = entityMetadata.columns.find(column => column.propertyName === (columnName || 'name'))\n if (!columnMeta) {\n console.warn(`columnName \"${columnName}\" in filtersMap for \"${name}\" is not a column`)\n return\n }\n } else {\n var columnMeta = metadata.columns.find(column => column.propertyName === (columnName || name))\n if (!columnMeta) {\n /* relationId 에 대한 필터링은 해당 컬럼값 자체의 비교로 한다. */\n var relationIdMeta = metadata.relationIds.find(relationId => relationId.propertyName === (columnName || name))\n if (relationIdMeta) {\n columnMeta = relationIdMeta.relation.joinColumns[0]\n } else {\n columnName\n ? console.warn(`columnName \"${columnName}\" in filtersMap for \"${name}\" is not a column`)\n : console.warn(`name \"${name}\" is not a column`)\n }\n } else {\n var relation = columnMeta.relationMetadata\n }\n\n if (relation) {\n /* filterMap에 의해서 relationColumn 이 지정되지 않았더라도, name 또는 columnName의 column이 relation인 경우에는\n - 조건절 구성을 위한 타겟필드명은 'name' 으로만 한정된다.\n */\n var relationColumnMeta = columnMeta\n var entityMetadata = relation.inverseEntityMetadata\n columnMeta = entityMetadata.columns.find(column => column.propertyName === 'name')\n if (!columnMeta) {\n console.warn(`relation column \"${columnName || name}\" does not have \"name\" column`)\n return\n }\n }\n }\n\n const dbNameForColumn = columnMeta.databaseName\n const alias = relationColumnMeta ? `${name}-filter` : entityAlias\n\n /* relation columne인 경우 name을 alias로 사용한다. */\n const field = `${alias}.${dbNameForColumn}`\n\n var clause = ''\n var parameters = {}\n\n switch (operator) {\n case 'eq':\n clause = `${field} = :${name}`\n parameters = { [name]: value }\n break\n\n case 'like':\n clause = `${field} LIKE :${name}`\n parameters = { [name]: `%${value}%` }\n break\n\n case 'search':\n case 'i_like':\n clause = `LOWER(${field}) LIKE :${name}`\n parameters = { [name]: `%${String(value).toLowerCase()}%` }\n break\n\n case 'nlike':\n clause = `${field} NOT LIKE :${name}`\n parameters = { [name]: `%${value}%` }\n break\n\n case 'i_nlike':\n clause = `LOWER(${field}) NOT LIKE :${name}`\n parameters = { [name]: `%${String(value).toLowerCase()}%` }\n break\n\n case 'lt':\n clause = `${field} < :${name}`\n parameters = { [name]: value }\n break\n\n case 'gt':\n clause = `${field} > :${name}`\n parameters = { [name]: value }\n break\n\n case 'lte':\n clause = `${field} <= :${name}`\n parameters = { [name]: value }\n break\n\n case 'gte':\n clause = `${field} >= :${name}`\n parameters = { [name]: value }\n break\n\n case 'noteq':\n clause = `${field} != :${name}`\n parameters = { [name]: value }\n break\n\n case 'in':\n clause = `${field} IN (:...${name})`\n parameters = { [name]: values }\n break\n\n case 'notin':\n clause = `${field} NOT IN (:...${name})`\n parameters = { [name]: values }\n break\n\n case 'notin_with_null':\n clause = `${field} IS NULL OR ${field} NOT IN (:...${name}))`\n parameters = { [name]: values }\n break\n\n case 'is_null':\n clause = `${field} IS NULL`\n break\n\n case 'is_not_null':\n clause = `${field} IS NOT NULL`\n break\n\n case 'is_false':\n clause = `${field} IS FALSE`\n break\n\n case 'is_true':\n clause = `${field} IS TRUE`\n break\n\n case 'is_not_false':\n clause = `${field} IS NOT FALSE`\n break\n\n case 'is_not_true':\n clause = `${field} IS NOT TRUE`\n break\n\n case 'is_present':\n clause = `${field} IS PRESENT`\n break\n\n case 'is_blank':\n clause = `${field} IS BLANK`\n break\n\n case 'is_empty_num_id':\n clause = `${field} IS EMPTY NUMERIC ID`\n break\n\n case 'between':\n clause = `${field} BETWEEN :${name}_1 AND :${name}_2`\n parameters = { [`${name}_1`]: values[0], [`${name}_2`]: values[1] }\n break\n }\n\n if (relationColumnMeta) {\n const { propertyName } = relationColumnMeta\n const property = `${entityAlias}.${propertyName}`\n if (andCondition) {\n selectQueryBuilder.innerJoin(property, alias, clause, parameters)\n } else {\n selectQueryBuilder.leftJoin(property, alias)\n whereExpressionBuilder.orWhere(clause, parameters)\n }\n } else {\n andCondition\n ? whereExpressionBuilder.andWhere(clause, parameters)\n : whereExpressionBuilder.orWhere(clause, parameters)\n }\n}\n"]}
1
+ {"version":3,"file":"get-query-builder-from-list-params.js","sourceRoot":"","sources":["../../server/utils/get-query-builder-from-list-params.ts"],"names":[],"mappings":"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","sourcesContent":["import { Brackets, EntityMetadata, Repository, SelectQueryBuilder, WhereExpressionBuilder } from 'typeorm'\nimport { RelationMetadata } from 'typeorm/metadata/RelationMetadata'\n\nimport { Filter, ListParam, InheritedValueType } from '../service/common-types/list-param'\nimport { Domain } from '../service/domain/domain'\n\n/**\n *\n * @param options\n * @returns\n */\nexport function getQueryBuilderFromListParams<Type>(options: {\n repository: Repository<Type>\n params: ListParam\n domain?: Domain\n alias?: string\n searchables?: string[]\n filtersMap?: { [name: string]: { columnName: string; relationColumn?: string } }\n}): SelectQueryBuilder<Type> {\n var { repository, params, domain, alias, searchables, filtersMap = {} } = options\n var { inherited = InheritedValueType.None } = params || {}\n\n const selectQueryBuilder = repository.createQueryBuilder(alias)\n const entityAlias = selectQueryBuilder.alias\n\n const columnFilters =\n params.filters?.filter(filter => {\n if (filter.operator === 'search') {\n return false\n }\n if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n const searchFilters =\n searchables instanceof Array\n ? params.filters?.filter(filter => {\n if (filter.operator !== 'search') {\n return false\n }\n if (!searchables.includes(filter.name)) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n : []\n const pagination = params.pagination\n const sortings = params.sortings\n\n const metadata = repository.metadata\n\n if (columnFilters && columnFilters.length > 0) {\n columnFilters.forEach(filter => {\n addCondition(metadata, selectQueryBuilder, selectQueryBuilder, filter, filtersMap, true)\n })\n }\n\n if (searchFilters.length > 0) {\n selectQueryBuilder.andWhere(\n new Brackets(qb => {\n searchFilters.forEach(filter => {\n addCondition(metadata, selectQueryBuilder, qb, filter, filtersMap, false)\n })\n })\n )\n }\n\n if (domain) {\n if (!inherited || inherited == InheritedValueType.None) {\n selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id })\n } else if (inherited == InheritedValueType.Include) {\n selectQueryBuilder.andWhere(`${entityAlias}.domain In(:...domains)`, {\n domains: [domain.id, domain.parentId].filter(Boolean)\n })\n } else if (inherited == InheritedValueType.Only) {\n selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.parentId || 'Impossible' })\n } else {\n selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: 'Impossible' })\n }\n }\n\n if (pagination && pagination.page > 0 && pagination.limit > 0) {\n selectQueryBuilder.skip(pagination.limit * (pagination.page - 1))\n selectQueryBuilder.take(pagination.limit)\n }\n\n if (sortings && sortings.length > 0) {\n sortings.forEach((sorting, index) => {\n const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${entityAlias}.${sorting.name}`\n if (index === 0) {\n selectQueryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n } else {\n selectQueryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n }\n })\n }\n\n return selectQueryBuilder\n}\n\nfunction addCondition<T>(\n metadata: EntityMetadata,\n selectQueryBuilder: SelectQueryBuilder<T>,\n whereExpressionBuilder: WhereExpressionBuilder,\n filter: Filter,\n filtersMap: { [name: string]: { columnName: string; relationColumn?: string } } = {},\n andCondition: boolean\n): void {\n const { name, operator, value } = filter\n const values = value instanceof Array ? value : [value]\n var entityAlias = selectQueryBuilder.alias\n\n var { relationColumn, columnName } = filtersMap[name] || {}\n /*\n 1. relationColumn과 columnName이 지정된 경우 \n - relation inverse 테이블에서, columnName을 찾는다.\n 2. relationColumn만 지정된 경우는 없어야 한다.\n - 이 경우 columnName 은 'name' 이라고 판단한다.\n 3. columnName이 지정된 경우.\n - 이 경우는 columnName 만 적용한다.\n */\n if (relationColumn) {\n const columns = relationColumn.split('.')\n var entityMetadata: EntityMetadata\n var relation: RelationMetadata\n\n for (const rcolumn of columns) {\n if (relation) {\n const { propertyName } = relationColumnMeta\n const property = `${entityAlias}.${propertyName}`\n\n entityAlias = `${entityAlias}-${entityMetadata.tableName}-for-${columnName || 'name'}` as string\n\n if (andCondition) {\n selectQueryBuilder.innerJoin(property, entityAlias)\n } else {\n selectQueryBuilder.leftJoin(property, entityAlias)\n }\n } else {\n entityMetadata = metadata\n }\n\n var relationColumnMeta = entityMetadata.columns.find(column => column.propertyName === rcolumn)\n if (!relationColumnMeta) {\n console.warn(`relationColumn \"${relationColumn}\" in filtersMap for \"${name}\" is not a relation column`)\n return\n }\n\n relation = relationColumnMeta.relationMetadata\n entityMetadata = relation.inverseEntityMetadata\n }\n\n var columnMeta = entityMetadata.columns.find(column => column.propertyName === (columnName || 'name'))\n if (!columnMeta) {\n console.warn(`columnName \"${columnName}\" in filtersMap for \"${name}\" is not a column`)\n return\n }\n } else {\n var columnMeta = metadata.columns.find(column => column.propertyName === (columnName || name))\n if (!columnMeta) {\n /* relationId 에 대한 필터링은 해당 컬럼값 자체의 비교로 한다. */\n var relationIdMeta = metadata.relationIds.find(relationId => relationId.propertyName === (columnName || name))\n if (relationIdMeta) {\n columnMeta = relationIdMeta.relation.joinColumns[0]\n } else {\n columnName\n ? console.warn(`columnName \"${columnName}\" in filtersMap for \"${name}\" is not a column`)\n : console.warn(`name \"${name}\" is not a column`)\n }\n } else {\n var relation = columnMeta.relationMetadata\n }\n\n if (relation) {\n /* filterMap에 의해서 relationColumn 이 지정되지 않았더라도, name 또는 columnName의 column이 relation인 경우에는\n - 조건절 구성을 위한 타겟필드명은 'name' 으로만 한정된다.\n */\n var relationColumnMeta = columnMeta\n var entityMetadata = relation.inverseEntityMetadata\n columnMeta = entityMetadata.columns.find(column => column.propertyName === 'name')\n if (!columnMeta) {\n console.warn(`relation column \"${columnName || name}\" does not have \"name\" column`)\n return\n }\n }\n }\n\n const dbNameForColumn = columnMeta.databaseName\n const alias = relationColumnMeta ? `${name}-filter` : entityAlias\n\n /* relation columne인 경우 name을 alias로 사용한다. */\n const field = `${alias}.${dbNameForColumn}`\n\n var clause = ''\n var parameters = {}\n\n switch (operator) {\n case 'eq':\n clause = `${field} = :${name}`\n parameters = { [name]: value }\n break\n\n case 'like':\n clause = `${field} LIKE :${name}`\n parameters = { [name]: `%${value}%` }\n break\n\n case 'search':\n case 'i_like':\n clause = `LOWER(${field}) LIKE :${name}`\n parameters = { [name]: `%${String(value).toLowerCase()}%` }\n break\n\n case 'nlike':\n clause = `${field} NOT LIKE :${name}`\n parameters = { [name]: `%${value}%` }\n break\n\n case 'i_nlike':\n clause = `LOWER(${field}) NOT LIKE :${name}`\n parameters = { [name]: `%${String(value).toLowerCase()}%` }\n break\n\n case 'lt':\n clause = `${field} < :${name}`\n parameters = { [name]: value }\n break\n\n case 'gt':\n clause = `${field} > :${name}`\n parameters = { [name]: value }\n break\n\n case 'lte':\n clause = `${field} <= :${name}`\n parameters = { [name]: value }\n break\n\n case 'gte':\n clause = `${field} >= :${name}`\n parameters = { [name]: value }\n break\n\n case 'noteq':\n clause = `${field} != :${name}`\n parameters = { [name]: value }\n break\n\n case 'in':\n clause = `${field} IN (:...${name})`\n parameters = { [name]: values }\n break\n\n case 'notin':\n clause = `${field} NOT IN (:...${name})`\n parameters = { [name]: values }\n break\n\n case 'notin_with_null':\n clause = `${field} IS NULL OR ${field} NOT IN (:...${name}))`\n parameters = { [name]: values }\n break\n\n case 'is_null':\n clause = `${field} IS NULL`\n break\n\n case 'is_not_null':\n clause = `${field} IS NOT NULL`\n break\n\n case 'is_false':\n clause = `${field} IS FALSE`\n break\n\n case 'is_true':\n clause = `${field} IS TRUE`\n break\n\n case 'is_not_false':\n clause = `${field} IS NOT FALSE`\n break\n\n case 'is_not_true':\n clause = `${field} IS NOT TRUE`\n break\n\n case 'is_present':\n clause = `${field} IS PRESENT`\n break\n\n case 'is_blank':\n clause = `${field} IS BLANK`\n break\n\n case 'is_empty_num_id':\n clause = `${field} IS EMPTY NUMERIC ID`\n break\n\n case 'between':\n clause = `${field} BETWEEN :${name}_1 AND :${name}_2`\n parameters = { [`${name}_1`]: values[0], [`${name}_2`]: values[1] }\n break\n }\n\n if (relationColumnMeta) {\n const { propertyName } = relationColumnMeta\n const property = `${entityAlias}.${propertyName}`\n if (andCondition) {\n selectQueryBuilder.innerJoin(property, alias, clause, parameters)\n } else {\n selectQueryBuilder.leftJoin(property, alias)\n whereExpressionBuilder.orWhere(clause, parameters)\n }\n } else {\n andCondition\n ? whereExpressionBuilder.andWhere(clause, parameters)\n : whereExpressionBuilder.orWhere(clause, parameters)\n }\n}\n"]}
@@ -1,7 +1,8 @@
1
+ import { ListParam } from '../service/common-types/list-param';
1
2
  /**
2
3
  * @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 getQueryBuilderFromListParams function.
3
4
  */
4
- export declare const buildQuery: (queryBuilder: any, params: any, context: any, options?: boolean | {
5
+ export declare const buildQuery: (queryBuilder: any, params: ListParam, context: any, options?: boolean | {
5
6
  domainRef?: boolean;
6
7
  searchables?: string[];
7
8
  }) => void;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildQuery = void 0;
4
4
  const typeorm_1 = require("typeorm");
5
5
  const condition_builder_1 = require("./condition-builder");
6
+ const list_param_1 = require("../service/common-types/list-param");
6
7
  /**
7
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 getQueryBuilderFromListParams function.
8
9
  */
@@ -38,7 +39,7 @@ const buildQuery = function (queryBuilder, params, context, options) {
38
39
  : [];
39
40
  const pagination = params.pagination;
40
41
  const sortings = params.sortings;
41
- const domainId = context && context.state.domain && context.state.domain.id;
42
+ const domain = context === null || context === void 0 ? void 0 : context.state.domain;
42
43
  if (columnFilters && columnFilters.length > 0) {
43
44
  columnFilters.forEach(filter => {
44
45
  const condition = (0, condition_builder_1.buildCondition)(queryBuilder.alias, filter.name, filter.operator, filter.value, filter.relation, Object.keys(queryBuilder.getParameters()).length);
@@ -58,7 +59,21 @@ const buildQuery = function (queryBuilder, params, context, options) {
58
59
  }));
59
60
  }
60
61
  if (domainRef) {
61
- queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domainId`, { domainId });
62
+ const inherited = (params === null || params === void 0 ? void 0 : params.inherited) || list_param_1.InheritedValueType.None;
63
+ if (!inherited || inherited == list_param_1.InheritedValueType.None) {
64
+ queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: domain.id });
65
+ }
66
+ else if (inherited == list_param_1.InheritedValueType.Include) {
67
+ queryBuilder.andWhere(`${queryBuilder.alias}.domain In(:...domains)`, {
68
+ domains: [domain.id, domain.parentId].filter(Boolean)
69
+ });
70
+ }
71
+ else if (inherited == list_param_1.InheritedValueType.Only) {
72
+ queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: domain.parentId || 'Impossible' });
73
+ }
74
+ else {
75
+ queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: 'Impossible' });
76
+ }
62
77
  }
63
78
  if (pagination && pagination.page > 0 && pagination.limit > 0) {
64
79
  queryBuilder.skip(pagination.limit * (pagination.page - 1));
@@ -1 +1 @@
1
- {"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Brackets } from 'typeorm'\n\nimport { buildCondition } from './condition-builder'\n\n/**\n * @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 getQueryBuilderFromListParams function.\n */\nexport const buildQuery = function (\n queryBuilder: any,\n params: any,\n context: any,\n options?:\n | boolean\n | {\n domainRef?: boolean\n searchables?: string[]\n }\n) {\n /* default value of domainRef is 'true' */\n var domainRef = typeof options === 'boolean' ? options : true\n\n /* for backwards compatibility of function spec */\n if (typeof options === 'object') {\n var { domainRef = true, searchables } = options\n }\n\n const columnFilters =\n params.filters?.filter(filter => {\n if (filter.operator === 'search') {\n return false\n }\n if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n\n const searchFilters =\n searchables instanceof Array\n ? params.filters?.filter(filter => {\n if (filter.operator !== 'search') {\n return false\n }\n if (!searchables.includes(filter.name)) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n : []\n\n const pagination = params.pagination\n const sortings = params.sortings\n const domainId = context && context.state.domain && context.state.domain.id\n\n if (columnFilters && columnFilters.length > 0) {\n columnFilters.forEach(filter => {\n const condition = buildCondition(\n queryBuilder.alias,\n filter.name,\n filter.operator,\n filter.value,\n filter.relation,\n Object.keys(queryBuilder.getParameters()).length\n )\n\n if (condition?.clause) queryBuilder.andWhere(condition.clause)\n if (condition?.parameters) queryBuilder.setParameters(condition.parameters)\n })\n }\n\n if (searchFilters.length > 0) {\n queryBuilder.andWhere(\n new Brackets(qb => {\n searchFilters.forEach((filter, index) => {\n const clause = `${queryBuilder.alias}.${filter.name} LIKE :${filter.name}`\n const parameters = { [filter.name]: filter.value }\n\n index === 0 ? qb.where(clause, parameters) : qb.orWhere(clause, parameters)\n })\n })\n )\n }\n\n if (domainRef) {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domainId`, { domainId })\n }\n\n if (pagination && pagination.page > 0 && pagination.limit > 0) {\n queryBuilder.skip(pagination.limit * (pagination.page - 1))\n queryBuilder.take(pagination.limit)\n }\n\n if (sortings && sortings.length > 0) {\n sortings.forEach((sorting, index) => {\n const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${queryBuilder.alias}.${sorting.name}`\n if (index === 0) {\n queryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n } else {\n queryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n }\n })\n }\n}\n"]}
1
+ {"version":3,"file":"list-query-builder.js","sourceRoot":"","sources":["../../server/utils/list-query-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Brackets } from 'typeorm'\n\nimport { buildCondition } from './condition-builder'\nimport { Filter, ListParam, InheritedValueType } from '../service/common-types/list-param'\n\n/**\n * @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 getQueryBuilderFromListParams function.\n */\nexport const buildQuery = function (\n queryBuilder: any,\n params: ListParam,\n context: any,\n options?:\n | boolean\n | {\n domainRef?: boolean\n searchables?: string[]\n }\n) {\n /* default value of domainRef is 'true' */\n var domainRef = typeof options === 'boolean' ? options : true\n\n /* for backwards compatibility of function spec */\n if (typeof options === 'object') {\n var { domainRef = true, searchables } = options\n }\n\n const columnFilters: Filter[] =\n params.filters?.filter(filter => {\n if (filter.operator === 'search') {\n return false\n }\n if (filter.operator.toLowerCase().includes('like') && (!searchables || !searchables.includes(filter.name))) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n\n const searchFilters =\n searchables instanceof Array\n ? params.filters?.filter(filter => {\n if (filter.operator !== 'search') {\n return false\n }\n if (!searchables.includes(filter.name)) {\n console.warn(\n '\"searchables\" setting is required for like searches with a heavy database query load',\n filter.name\n )\n return false\n }\n return true\n }) || []\n : []\n\n const pagination = params.pagination\n const sortings = params.sortings\n const domain = context?.state.domain\n\n if (columnFilters && columnFilters.length > 0) {\n columnFilters.forEach(filter => {\n const condition = buildCondition(\n queryBuilder.alias,\n filter.name,\n filter.operator,\n filter.value,\n filter.relation,\n Object.keys(queryBuilder.getParameters()).length\n )\n\n if (condition?.clause) queryBuilder.andWhere(condition.clause)\n if (condition?.parameters) queryBuilder.setParameters(condition.parameters)\n })\n }\n\n if (searchFilters.length > 0) {\n queryBuilder.andWhere(\n new Brackets(qb => {\n searchFilters.forEach((filter, index) => {\n const clause = `${queryBuilder.alias}.${filter.name} LIKE :${filter.name}`\n const parameters = { [filter.name]: filter.value }\n\n index === 0 ? qb.where(clause, parameters) : qb.orWhere(clause, parameters)\n })\n })\n )\n }\n\n if (domainRef) {\n const inherited = params?.inherited || InheritedValueType.None\n\n if (!inherited || inherited == InheritedValueType.None) {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: domain.id })\n } else if (inherited == InheritedValueType.Include) {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain In(:...domains)`, {\n domains: [domain.id, domain.parentId].filter(Boolean)\n })\n } else if (inherited == InheritedValueType.Only) {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: domain.parentId || 'Impossible' })\n } else {\n queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: 'Impossible' })\n }\n }\n\n if (pagination && pagination.page > 0 && pagination.limit > 0) {\n queryBuilder.skip(pagination.limit * (pagination.page - 1))\n queryBuilder.take(pagination.limit)\n }\n\n if (sortings && sortings.length > 0) {\n sortings.forEach((sorting, index) => {\n const sortField = sorting.name.split('.').length > 1 ? sorting.name : `${queryBuilder.alias}.${sorting.name}`\n if (index === 0) {\n queryBuilder.orderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n } else {\n queryBuilder.addOrderBy(sortField, sorting.desc ? 'DESC' : 'ASC')\n }\n })\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/shell",
3
- "version": "6.0.113",
3
+ "version": "6.0.115",
4
4
  "description": "Core module for framework",
5
5
  "bin": {
6
6
  "things-factory": "bin/things-factory",
@@ -129,5 +129,5 @@
129
129
  "pg": "^8.7.3",
130
130
  "sqlite3": "^5.0.8"
131
131
  },
132
- "gitHead": "1f753c3122911f7e014edae7e469784cdfb8678e"
132
+ "gitHead": "4937b4fe2040f49d906a4df5cdfced17553b83ef"
133
133
  }
@@ -1,7 +1,17 @@
1
- import { ArgsType, Field, InputType, Int } from 'type-graphql'
1
+ import { ArgsType, Field, InputType, Int, registerEnumType } from 'type-graphql'
2
2
 
3
3
  import { ScalarAny } from './scalar-any'
4
4
 
5
+ export enum InheritedValueType {
6
+ None = 'None',
7
+ Only = 'Only',
8
+ Include = 'Include'
9
+ }
10
+
11
+ registerEnumType(InheritedValueType, {
12
+ name: 'InheritedValueType'
13
+ })
14
+
5
15
  @InputType()
6
16
  export class Sorting {
7
17
  @Field({ description: 'Field name to sort by' })
@@ -45,4 +55,7 @@ export class ListParam {
45
55
 
46
56
  @Field(type => [Sorting], { nullable: true })
47
57
  sortings?: Sorting[]
58
+
59
+ @Field(type => InheritedValueType, { nullable: true })
60
+ inherited?: InheritedValueType
48
61
  }
@@ -1,4 +1,4 @@
1
- import { Column, CreateDateColumn, ManyToOne, RelationId, Entity, Index, UpdateDateColumn } from 'typeorm'
1
+ import { Column, CreateDateColumn, ManyToOne, OneToMany, RelationId, Entity, Index, UpdateDateColumn } from 'typeorm'
2
2
  import { ObjectType, Directive, Field, ID } from 'type-graphql'
3
3
  import { config } from '@things-factory/env'
4
4
  import { ScalarObject } from '../common-types'
@@ -78,6 +78,10 @@ export class Domain {
78
78
  @RelationId((domain: Domain) => domain.parent)
79
79
  parentId?: string
80
80
 
81
+ @OneToMany(type => Domain, domain => domain.parent)
82
+ @Field(type => Domain, { nullable: true })
83
+ children: Domain[]
84
+
81
85
  @Field({ nullable: true })
82
86
  @Column({ nullable: true })
83
87
  brandName: string
@@ -1,7 +1,7 @@
1
1
  import { Brackets, EntityMetadata, Repository, SelectQueryBuilder, WhereExpressionBuilder } from 'typeorm'
2
2
  import { RelationMetadata } from 'typeorm/metadata/RelationMetadata'
3
3
 
4
- import { Filter, ListParam } from '../service/common-types/list-param'
4
+ import { Filter, ListParam, InheritedValueType } from '../service/common-types/list-param'
5
5
  import { Domain } from '../service/domain/domain'
6
6
 
7
7
  /**
@@ -18,6 +18,7 @@ export function getQueryBuilderFromListParams<Type>(options: {
18
18
  filtersMap?: { [name: string]: { columnName: string; relationColumn?: string } }
19
19
  }): SelectQueryBuilder<Type> {
20
20
  var { repository, params, domain, alias, searchables, filtersMap = {} } = options
21
+ var { inherited = InheritedValueType.None } = params || {}
21
22
 
22
23
  const selectQueryBuilder = repository.createQueryBuilder(alias)
23
24
  const entityAlias = selectQueryBuilder.alias
@@ -74,7 +75,17 @@ export function getQueryBuilderFromListParams<Type>(options: {
74
75
  }
75
76
 
76
77
  if (domain) {
77
- selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id })
78
+ if (!inherited || inherited == InheritedValueType.None) {
79
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.id })
80
+ } else if (inherited == InheritedValueType.Include) {
81
+ selectQueryBuilder.andWhere(`${entityAlias}.domain In(:...domains)`, {
82
+ domains: [domain.id, domain.parentId].filter(Boolean)
83
+ })
84
+ } else if (inherited == InheritedValueType.Only) {
85
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: domain.parentId || 'Impossible' })
86
+ } else {
87
+ selectQueryBuilder.andWhere(`${entityAlias}.domain = :domain`, { domain: 'Impossible' })
88
+ }
78
89
  }
79
90
 
80
91
  if (pagination && pagination.page > 0 && pagination.limit > 0) {
@@ -1,13 +1,14 @@
1
1
  import { Brackets } from 'typeorm'
2
2
 
3
3
  import { buildCondition } from './condition-builder'
4
+ import { Filter, ListParam, InheritedValueType } from '../service/common-types/list-param'
4
5
 
5
6
  /**
6
7
  * @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 getQueryBuilderFromListParams function.
7
8
  */
8
9
  export const buildQuery = function (
9
10
  queryBuilder: any,
10
- params: any,
11
+ params: ListParam,
11
12
  context: any,
12
13
  options?:
13
14
  | boolean
@@ -24,7 +25,7 @@ export const buildQuery = function (
24
25
  var { domainRef = true, searchables } = options
25
26
  }
26
27
 
27
- const columnFilters =
28
+ const columnFilters: Filter[] =
28
29
  params.filters?.filter(filter => {
29
30
  if (filter.operator === 'search') {
30
31
  return false
@@ -58,7 +59,7 @@ export const buildQuery = function (
58
59
 
59
60
  const pagination = params.pagination
60
61
  const sortings = params.sortings
61
- const domainId = context && context.state.domain && context.state.domain.id
62
+ const domain = context?.state.domain
62
63
 
63
64
  if (columnFilters && columnFilters.length > 0) {
64
65
  columnFilters.forEach(filter => {
@@ -90,7 +91,19 @@ export const buildQuery = function (
90
91
  }
91
92
 
92
93
  if (domainRef) {
93
- queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domainId`, { domainId })
94
+ const inherited = params?.inherited || InheritedValueType.None
95
+
96
+ if (!inherited || inherited == InheritedValueType.None) {
97
+ queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: domain.id })
98
+ } else if (inherited == InheritedValueType.Include) {
99
+ queryBuilder.andWhere(`${queryBuilder.alias}.domain In(:...domains)`, {
100
+ domains: [domain.id, domain.parentId].filter(Boolean)
101
+ })
102
+ } else if (inherited == InheritedValueType.Only) {
103
+ queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: domain.parentId || 'Impossible' })
104
+ } else {
105
+ queryBuilder.andWhere(`${queryBuilder.alias}.domain = :domain`, { domain: 'Impossible' })
106
+ }
94
107
  }
95
108
 
96
109
  if (pagination && pagination.page > 0 && pagination.limit > 0) {