@elsikora/nestjs-crud-automator 2.2.0-dev.1 → 2.3.0-dev.1
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.
- package/dist/cjs/factory/api-controller.factory.js +1 -1
- package/dist/cjs/utility/api/controller/get-list/transform/filter.utility.js +33 -7
- package/dist/cjs/utility/api/controller/get-list/transform/filter.utility.js.map +1 -1
- package/dist/cjs/utility/dto/generate/core.utility.js +66 -24
- package/dist/cjs/utility/dto/generate/core.utility.js.map +1 -1
- package/dist/esm/factory/api-controller.factory.js +1 -1
- package/dist/esm/utility/api/controller/get-list/transform/filter.utility.js +33 -7
- package/dist/esm/utility/api/controller/get-list/transform/filter.utility.js.map +1 -1
- package/dist/esm/utility/dto/generate/core.utility.js +66 -24
- package/dist/esm/utility/dto/generate/core.utility.js.map +1 -1
- package/package.json +1 -1
|
@@ -40,6 +40,7 @@ require('../constant/interface/api/property/default-string-format.constant.js');
|
|
|
40
40
|
require('typeorm');
|
|
41
41
|
require('reflect-metadata');
|
|
42
42
|
require('../validator/all-or-none-of-listed-properties.validator.js');
|
|
43
|
+
var generateEntityInformation_utility = require('../utility/generate-entity-information.utility.js');
|
|
43
44
|
require('../validator/has/paired-custom-suffixes-fields.validator.js');
|
|
44
45
|
require('../class/utility/dto/exception/details/foreign-key-violation.class.js');
|
|
45
46
|
require('../class/utility/dto/exception/details/unique-violation.class.js');
|
|
@@ -56,7 +57,6 @@ require('lodash/cloneDeep.js');
|
|
|
56
57
|
require('../constant/utility/api/get-default-string-format-properties/customizer/map.constant.js');
|
|
57
58
|
require('@nestjs/common/constants.js');
|
|
58
59
|
require('@nestjs/common/enums/route-paramtypes.enum.js');
|
|
59
|
-
var generateEntityInformation_utility = require('../utility/generate-entity-information.utility.js');
|
|
60
60
|
|
|
61
61
|
class ApiControllerFactory {
|
|
62
62
|
target;
|
|
@@ -20,6 +20,7 @@ var desribeType_enum = require('../../../../../enum/decorator/api/property/desri
|
|
|
20
20
|
require('../../../../../enum/decorator/api/property/number-type.enum.js');
|
|
21
21
|
require('../../../../../enum/decorator/api/property/string-type.enum.js');
|
|
22
22
|
require('../../../../../enum/decorator/api/route-type.enum.js');
|
|
23
|
+
var generateEntityInformation_utility = require('../../../../generate-entity-information.utility.js');
|
|
23
24
|
var operation_utility = require('./operation.utility.js');
|
|
24
25
|
|
|
25
26
|
/**
|
|
@@ -33,6 +34,7 @@ var operation_utility = require('./operation.utility.js');
|
|
|
33
34
|
*/
|
|
34
35
|
function ApiControllerGetListTransformFilter(query, entityMetadata) {
|
|
35
36
|
const filter = {};
|
|
37
|
+
const filterRecord = filter;
|
|
36
38
|
for (const fullKey of Object.keys(query)) {
|
|
37
39
|
if (!fullKey.includes("["))
|
|
38
40
|
continue;
|
|
@@ -45,15 +47,39 @@ function ApiControllerGetListTransformFilter(query, entityMetadata) {
|
|
|
45
47
|
const value = query[fullKey];
|
|
46
48
|
if (!operation || !key || value === undefined || value === null)
|
|
47
49
|
continue;
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
const path = key.split(".");
|
|
51
|
+
if (path.length === 1) {
|
|
52
|
+
const column = entityMetadata.columns.find((column) => column.name == key);
|
|
53
|
+
const columnMetadata = column?.metadata?.[propertyDescribe_constant.PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
|
|
54
|
+
if (!columnMetadata || columnMetadata.type === desribeType_enum.EApiPropertyDescribeType.RELATION)
|
|
55
|
+
continue;
|
|
56
|
+
filterRecord[key] = operation_utility.ApiControllerGetListTransformOperation(operation, value);
|
|
53
57
|
}
|
|
54
58
|
else {
|
|
55
|
-
// @
|
|
56
|
-
|
|
59
|
+
// eslint-disable-next-line @elsikora/typescript/no-magic-numbers
|
|
60
|
+
if (path.length !== 2)
|
|
61
|
+
continue;
|
|
62
|
+
const [relationName, nestedPropertyName] = path;
|
|
63
|
+
if (!relationName || !nestedPropertyName)
|
|
64
|
+
continue;
|
|
65
|
+
const relationColumn = entityMetadata.columns.find((column) => column.name == relationName);
|
|
66
|
+
const relationMetadata = relationColumn?.metadata?.[propertyDescribe_constant.PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
|
|
67
|
+
if (relationMetadata?.type !== desribeType_enum.EApiPropertyDescribeType.RELATION || !relationColumn?.relation?.target)
|
|
68
|
+
continue;
|
|
69
|
+
let relationEntityMetadata;
|
|
70
|
+
try {
|
|
71
|
+
relationEntityMetadata = generateEntityInformation_utility.GenerateEntityInformation(relationColumn.relation.target);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
const nestedColumn = relationEntityMetadata.columns.find((column) => column.name == nestedPropertyName);
|
|
77
|
+
const nestedColumnMetadata = nestedColumn?.metadata?.[propertyDescribe_constant.PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
|
|
78
|
+
if (!nestedColumnMetadata || nestedColumnMetadata.type === desribeType_enum.EApiPropertyDescribeType.RELATION || nestedColumnMetadata.type === desribeType_enum.EApiPropertyDescribeType.OBJECT)
|
|
79
|
+
continue;
|
|
80
|
+
const relationFilter = (filterRecord[relationName] ?? {});
|
|
81
|
+
relationFilter[nestedPropertyName] = operation_utility.ApiControllerGetListTransformOperation(operation, value);
|
|
82
|
+
filterRecord[relationName] = relationFilter;
|
|
57
83
|
}
|
|
58
84
|
}
|
|
59
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.utility.js","sources":["../../../../../../../../src/utility/api/controller/get-list/transform/filter.utility.ts"],"sourcesContent":[null],"names":["PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT","EApiPropertyDescribeType","ApiControllerGetListTransformOperation"],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter.utility.js","sources":["../../../../../../../../src/utility/api/controller/get-list/transform/filter.utility.ts"],"sourcesContent":[null],"names":["PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT","EApiPropertyDescribeType","ApiControllerGetListTransformOperation","GenerateEntityInformation"],"mappings":"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"}
|
|
@@ -32,6 +32,7 @@ var getListQueryBaseClass_utility = require('../get/get-list-query-base-class.ut
|
|
|
32
32
|
var shouldBeMarked_utility = require('../is/property/should-be-marked.utility.js');
|
|
33
33
|
var shouldBeGenerated_utility = require('../is/should-be-generated.utility.js');
|
|
34
34
|
var exception_utility = require('../../error/exception.utility.js');
|
|
35
|
+
var generateEntityInformation_utility = require('../../generate-entity-information.utility.js');
|
|
35
36
|
var pairedCustomSuffixesFields_validator = require('../../../validator/has/paired-custom-suffixes-fields.validator.js');
|
|
36
37
|
var classValidator = require('class-validator');
|
|
37
38
|
var pop_utility = require('../auto/context/pop.utility.js');
|
|
@@ -82,13 +83,48 @@ function DtoGenerate(entity, entityMetadata, method, dtoType, dtoConfig, current
|
|
|
82
83
|
});
|
|
83
84
|
}
|
|
84
85
|
}
|
|
86
|
+
const queryFilterProperties = [];
|
|
87
|
+
if (method === routeType_enum.EApiRouteType.GET_LIST && dtoType === dtoType_enum.EApiDtoType.QUERY) {
|
|
88
|
+
for (const property of markedProperties) {
|
|
89
|
+
if (property.metadata.type !== desribeType_enum.EApiPropertyDescribeType.RELATION) {
|
|
90
|
+
queryFilterProperties.push({
|
|
91
|
+
entityMetadata: entityMetadata,
|
|
92
|
+
metadata: property.metadata,
|
|
93
|
+
name: property.name,
|
|
94
|
+
});
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const relationColumn = entityMetadata.columns.find((column) => column.name == property.name);
|
|
98
|
+
if (!relationColumn?.relation?.target)
|
|
99
|
+
continue;
|
|
100
|
+
let relationEntityMetadata;
|
|
101
|
+
try {
|
|
102
|
+
relationEntityMetadata = generateEntityInformation_utility.GenerateEntityInformation(relationColumn.relation.target);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
for (const relationProperty of relationEntityMetadata.columns) {
|
|
108
|
+
const relationPropertyMetadata = relationProperty.metadata?.[propertyDescribe_constant.PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
|
|
109
|
+
if (!relationPropertyMetadata || relationPropertyMetadata.type === desribeType_enum.EApiPropertyDescribeType.RELATION || relationPropertyMetadata.type === desribeType_enum.EApiPropertyDescribeType.OBJECT)
|
|
110
|
+
continue;
|
|
111
|
+
if (!relationProperty.isPrimary && !shouldBeMarked_utility.DtoIsPropertyShouldBeMarked(method, dtoType, relationProperty.name, relationPropertyMetadata, relationProperty.isPrimary, currentGuard))
|
|
112
|
+
continue;
|
|
113
|
+
queryFilterProperties.push({
|
|
114
|
+
entityMetadata: relationEntityMetadata,
|
|
115
|
+
metadata: relationPropertyMetadata,
|
|
116
|
+
name: `${property.name}.${relationProperty.name}`,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
85
121
|
const BaseClass = method === routeType_enum.EApiRouteType.GET_LIST && dtoType === dtoType_enum.EApiDtoType.QUERY ? getListQueryBaseClass_utility.DtoGetGetListQueryBaseClass(entity, entityMetadata, method, dtoType) : class {
|
|
86
122
|
};
|
|
87
123
|
class GeneratedDTO extends BaseClass {
|
|
88
124
|
constructor() {
|
|
89
125
|
super();
|
|
90
|
-
|
|
91
|
-
|
|
126
|
+
if (method === routeType_enum.EApiRouteType.GET_LIST && dtoType === dtoType_enum.EApiDtoType.QUERY) {
|
|
127
|
+
for (const property of queryFilterProperties) {
|
|
92
128
|
Object.defineProperty(this, `${property.name}[value]`, {
|
|
93
129
|
// eslint-disable-next-line @elsikora/typescript/naming-convention
|
|
94
130
|
configurable: true,
|
|
@@ -117,7 +153,9 @@ function DtoGenerate(entity, entityMetadata, method, dtoType, dtoConfig, current
|
|
|
117
153
|
writable: true,
|
|
118
154
|
});
|
|
119
155
|
}
|
|
120
|
-
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
for (const property of markedProperties) {
|
|
121
159
|
Object.defineProperty(this, property.name, {
|
|
122
160
|
// eslint-disable-next-line @elsikora/typescript/naming-convention
|
|
123
161
|
configurable: true,
|
|
@@ -136,37 +174,41 @@ function DtoGenerate(entity, entityMetadata, method, dtoType, dtoConfig, current
|
|
|
136
174
|
});
|
|
137
175
|
push_utility.DtoAutoContextPush(GeneratedDTO.prototype, method, dtoType);
|
|
138
176
|
try {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if (method === routeType_enum.EApiRouteType.GET_LIST && dtoType === dtoType_enum.EApiDtoType.QUERY) {
|
|
177
|
+
if (method === routeType_enum.EApiRouteType.GET_LIST && dtoType === dtoType_enum.EApiDtoType.QUERY) {
|
|
178
|
+
for (const property of queryFilterProperties) {
|
|
179
|
+
const decorators = buildDecorator_utility.DtoBuildDecorator(method, property.metadata, property.entityMetadata, dtoType, property.name, currentGuard);
|
|
180
|
+
if (decorators) {
|
|
181
|
+
for (const [, decorator] of decorators.entries()) {
|
|
145
182
|
decorator(GeneratedDTO.prototype, `${property.name}[value]`);
|
|
146
|
-
filterDecorator_utility.DtoGenerateFilterDecorator(property.metadata, entityMetadata)(GeneratedDTO.prototype, `${property.name}[operator]`);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
decorator(GeneratedDTO.prototype, property.name);
|
|
183
|
+
filterDecorator_utility.DtoGenerateFilterDecorator(property.metadata, property.entityMetadata)(GeneratedDTO.prototype, `${property.name}[operator]`);
|
|
150
184
|
}
|
|
151
185
|
}
|
|
152
|
-
}
|
|
153
|
-
if (method === routeType_enum.EApiRouteType.GET_LIST && dtoType === dtoType_enum.EApiDtoType.QUERY) {
|
|
154
|
-
// @ts-ignore
|
|
155
186
|
const metadataArray = { ...property.metadata, isArray: true, isUniqueItems: false, maxItems: generate_constant.DTO_GENERATE_CONSTANT.MAXIMUM_FILTER_PROPERTIES, minItems: generate_constant.DTO_GENERATE_CONSTANT.MINIMUM_FILTER_PROPERTIES };
|
|
156
|
-
const decoratorsArray = buildDecorator_utility.DtoBuildDecorator(method, metadataArray, entityMetadata, dtoType, property.name, currentGuard);
|
|
187
|
+
const decoratorsArray = buildDecorator_utility.DtoBuildDecorator(method, metadataArray, property.entityMetadata, dtoType, property.name, currentGuard);
|
|
157
188
|
if (decoratorsArray) {
|
|
158
189
|
for (const [, decorator] of decoratorsArray.entries()) {
|
|
159
190
|
decorator(GeneratedDTO.prototype, `${property.name}[values]`);
|
|
160
191
|
}
|
|
161
192
|
}
|
|
162
193
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
for (const property of markedProperties) {
|
|
197
|
+
const generatedDTOs = dynamic_utility.DtoGenerateDynamic(method, property.metadata, entityMetadata, dtoType, property.name, currentGuard);
|
|
198
|
+
const decorators = buildDecorator_utility.DtoBuildDecorator(method, property.metadata, entityMetadata, dtoType, property.name, currentGuard, generatedDTOs);
|
|
199
|
+
if (decorators) {
|
|
200
|
+
for (const [, decorator] of decorators.entries()) {
|
|
201
|
+
decorator(GeneratedDTO.prototype, property.name);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
if (property.metadata.type === desribeType_enum.EApiPropertyDescribeType.OBJECT && Array.isArray(property.metadata.dataType)) {
|
|
205
|
+
// @ts-ignore
|
|
206
|
+
extraModels.push(...property.metadata.dataType);
|
|
207
|
+
}
|
|
208
|
+
if (generatedDTOs) {
|
|
209
|
+
for (const [, value] of Object.entries(generatedDTOs)) {
|
|
210
|
+
extraModels.push(value);
|
|
211
|
+
}
|
|
170
212
|
}
|
|
171
213
|
}
|
|
172
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.utility.js","sources":["../../../../../../src/utility/dto/generate/core.utility.ts"],"sourcesContent":[null],"names":["DtoIsShouldBeGenerated","DtoGenerateCacheKey","PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT","ErrorException","DtoIsPropertyShouldBeMarked","EApiRouteType","EApiDtoType","DtoGetGetListQueryBaseClass","CamelCaseString","DtoAutoContextPush","
|
|
1
|
+
{"version":3,"file":"core.utility.js","sources":["../../../../../../src/utility/dto/generate/core.utility.ts"],"sourcesContent":[null],"names":["DtoIsShouldBeGenerated","DtoGenerateCacheKey","PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT","ErrorException","DtoIsPropertyShouldBeMarked","EApiRouteType","EApiDtoType","EApiPropertyDescribeType","GenerateEntityInformation","DtoGetGetListQueryBaseClass","CamelCaseString","DtoAutoContextPush","DtoBuildDecorator","DtoGenerateFilterDecorator","DTO_GENERATE_CONSTANT","DtoGenerateDynamic","DtoAutoContextPop","Validate","HasPairedCustomSuffixesFieldsValidator","ApiExtraModels","DtoGenerateGetListResponse"],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ import '../constant/interface/api/property/default-string-format.constant.js';
|
|
|
38
38
|
import 'typeorm';
|
|
39
39
|
import 'reflect-metadata';
|
|
40
40
|
import '../validator/all-or-none-of-listed-properties.validator.js';
|
|
41
|
+
import { GenerateEntityInformation } from '../utility/generate-entity-information.utility.js';
|
|
41
42
|
import '../validator/has/paired-custom-suffixes-fields.validator.js';
|
|
42
43
|
import '../class/utility/dto/exception/details/foreign-key-violation.class.js';
|
|
43
44
|
import '../class/utility/dto/exception/details/unique-violation.class.js';
|
|
@@ -54,7 +55,6 @@ import 'lodash/cloneDeep.js';
|
|
|
54
55
|
import '../constant/utility/api/get-default-string-format-properties/customizer/map.constant.js';
|
|
55
56
|
import '@nestjs/common/constants.js';
|
|
56
57
|
import '@nestjs/common/enums/route-paramtypes.enum.js';
|
|
57
|
-
import { GenerateEntityInformation } from '../utility/generate-entity-information.utility.js';
|
|
58
58
|
|
|
59
59
|
class ApiControllerFactory {
|
|
60
60
|
target;
|
|
@@ -18,6 +18,7 @@ import { EApiPropertyDescribeType } from '../../../../../enum/decorator/api/prop
|
|
|
18
18
|
import '../../../../../enum/decorator/api/property/number-type.enum.js';
|
|
19
19
|
import '../../../../../enum/decorator/api/property/string-type.enum.js';
|
|
20
20
|
import '../../../../../enum/decorator/api/route-type.enum.js';
|
|
21
|
+
import { GenerateEntityInformation } from '../../../../generate-entity-information.utility.js';
|
|
21
22
|
import { ApiControllerGetListTransformOperation } from './operation.utility.js';
|
|
22
23
|
|
|
23
24
|
/**
|
|
@@ -31,6 +32,7 @@ import { ApiControllerGetListTransformOperation } from './operation.utility.js';
|
|
|
31
32
|
*/
|
|
32
33
|
function ApiControllerGetListTransformFilter(query, entityMetadata) {
|
|
33
34
|
const filter = {};
|
|
35
|
+
const filterRecord = filter;
|
|
34
36
|
for (const fullKey of Object.keys(query)) {
|
|
35
37
|
if (!fullKey.includes("["))
|
|
36
38
|
continue;
|
|
@@ -43,15 +45,39 @@ function ApiControllerGetListTransformFilter(query, entityMetadata) {
|
|
|
43
45
|
const value = query[fullKey];
|
|
44
46
|
if (!operation || !key || value === undefined || value === null)
|
|
45
47
|
continue;
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
const path = key.split(".");
|
|
49
|
+
if (path.length === 1) {
|
|
50
|
+
const column = entityMetadata.columns.find((column) => column.name == key);
|
|
51
|
+
const columnMetadata = column?.metadata?.[PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
|
|
52
|
+
if (!columnMetadata || columnMetadata.type === EApiPropertyDescribeType.RELATION)
|
|
53
|
+
continue;
|
|
54
|
+
filterRecord[key] = ApiControllerGetListTransformOperation(operation, value);
|
|
51
55
|
}
|
|
52
56
|
else {
|
|
53
|
-
// @
|
|
54
|
-
|
|
57
|
+
// eslint-disable-next-line @elsikora/typescript/no-magic-numbers
|
|
58
|
+
if (path.length !== 2)
|
|
59
|
+
continue;
|
|
60
|
+
const [relationName, nestedPropertyName] = path;
|
|
61
|
+
if (!relationName || !nestedPropertyName)
|
|
62
|
+
continue;
|
|
63
|
+
const relationColumn = entityMetadata.columns.find((column) => column.name == relationName);
|
|
64
|
+
const relationMetadata = relationColumn?.metadata?.[PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
|
|
65
|
+
if (relationMetadata?.type !== EApiPropertyDescribeType.RELATION || !relationColumn?.relation?.target)
|
|
66
|
+
continue;
|
|
67
|
+
let relationEntityMetadata;
|
|
68
|
+
try {
|
|
69
|
+
relationEntityMetadata = GenerateEntityInformation(relationColumn.relation.target);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const nestedColumn = relationEntityMetadata.columns.find((column) => column.name == nestedPropertyName);
|
|
75
|
+
const nestedColumnMetadata = nestedColumn?.metadata?.[PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
|
|
76
|
+
if (!nestedColumnMetadata || nestedColumnMetadata.type === EApiPropertyDescribeType.RELATION || nestedColumnMetadata.type === EApiPropertyDescribeType.OBJECT)
|
|
77
|
+
continue;
|
|
78
|
+
const relationFilter = (filterRecord[relationName] ?? {});
|
|
79
|
+
relationFilter[nestedPropertyName] = ApiControllerGetListTransformOperation(operation, value);
|
|
80
|
+
filterRecord[relationName] = relationFilter;
|
|
55
81
|
}
|
|
56
82
|
}
|
|
57
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.utility.js","sources":["../../../../../../../../src/utility/api/controller/get-list/transform/filter.utility.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filter.utility.js","sources":["../../../../../../../../src/utility/api/controller/get-list/transform/filter.utility.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ import { DtoGetGetListQueryBaseClass } from '../get/get-list-query-base-class.ut
|
|
|
30
30
|
import { DtoIsPropertyShouldBeMarked } from '../is/property/should-be-marked.utility.js';
|
|
31
31
|
import { DtoIsShouldBeGenerated } from '../is/should-be-generated.utility.js';
|
|
32
32
|
import { ErrorException } from '../../error/exception.utility.js';
|
|
33
|
+
import { GenerateEntityInformation } from '../../generate-entity-information.utility.js';
|
|
33
34
|
import { HasPairedCustomSuffixesFieldsValidator } from '../../../validator/has/paired-custom-suffixes-fields.validator.js';
|
|
34
35
|
import { Validate } from 'class-validator';
|
|
35
36
|
import { DtoAutoContextPop } from '../auto/context/pop.utility.js';
|
|
@@ -80,13 +81,48 @@ function DtoGenerate(entity, entityMetadata, method, dtoType, dtoConfig, current
|
|
|
80
81
|
});
|
|
81
82
|
}
|
|
82
83
|
}
|
|
84
|
+
const queryFilterProperties = [];
|
|
85
|
+
if (method === EApiRouteType.GET_LIST && dtoType === EApiDtoType.QUERY) {
|
|
86
|
+
for (const property of markedProperties) {
|
|
87
|
+
if (property.metadata.type !== EApiPropertyDescribeType.RELATION) {
|
|
88
|
+
queryFilterProperties.push({
|
|
89
|
+
entityMetadata: entityMetadata,
|
|
90
|
+
metadata: property.metadata,
|
|
91
|
+
name: property.name,
|
|
92
|
+
});
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const relationColumn = entityMetadata.columns.find((column) => column.name == property.name);
|
|
96
|
+
if (!relationColumn?.relation?.target)
|
|
97
|
+
continue;
|
|
98
|
+
let relationEntityMetadata;
|
|
99
|
+
try {
|
|
100
|
+
relationEntityMetadata = GenerateEntityInformation(relationColumn.relation.target);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
for (const relationProperty of relationEntityMetadata.columns) {
|
|
106
|
+
const relationPropertyMetadata = relationProperty.metadata?.[PROPERTY_DESCRIBE_DECORATOR_API_CONSTANT.METADATA_KEY];
|
|
107
|
+
if (!relationPropertyMetadata || relationPropertyMetadata.type === EApiPropertyDescribeType.RELATION || relationPropertyMetadata.type === EApiPropertyDescribeType.OBJECT)
|
|
108
|
+
continue;
|
|
109
|
+
if (!relationProperty.isPrimary && !DtoIsPropertyShouldBeMarked(method, dtoType, relationProperty.name, relationPropertyMetadata, relationProperty.isPrimary, currentGuard))
|
|
110
|
+
continue;
|
|
111
|
+
queryFilterProperties.push({
|
|
112
|
+
entityMetadata: relationEntityMetadata,
|
|
113
|
+
metadata: relationPropertyMetadata,
|
|
114
|
+
name: `${property.name}.${relationProperty.name}`,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
83
119
|
const BaseClass = method === EApiRouteType.GET_LIST && dtoType === EApiDtoType.QUERY ? DtoGetGetListQueryBaseClass(entity, entityMetadata, method, dtoType) : class {
|
|
84
120
|
};
|
|
85
121
|
class GeneratedDTO extends BaseClass {
|
|
86
122
|
constructor() {
|
|
87
123
|
super();
|
|
88
|
-
|
|
89
|
-
|
|
124
|
+
if (method === EApiRouteType.GET_LIST && dtoType === EApiDtoType.QUERY) {
|
|
125
|
+
for (const property of queryFilterProperties) {
|
|
90
126
|
Object.defineProperty(this, `${property.name}[value]`, {
|
|
91
127
|
// eslint-disable-next-line @elsikora/typescript/naming-convention
|
|
92
128
|
configurable: true,
|
|
@@ -115,7 +151,9 @@ function DtoGenerate(entity, entityMetadata, method, dtoType, dtoConfig, current
|
|
|
115
151
|
writable: true,
|
|
116
152
|
});
|
|
117
153
|
}
|
|
118
|
-
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
for (const property of markedProperties) {
|
|
119
157
|
Object.defineProperty(this, property.name, {
|
|
120
158
|
// eslint-disable-next-line @elsikora/typescript/naming-convention
|
|
121
159
|
configurable: true,
|
|
@@ -134,37 +172,41 @@ function DtoGenerate(entity, entityMetadata, method, dtoType, dtoConfig, current
|
|
|
134
172
|
});
|
|
135
173
|
DtoAutoContextPush(GeneratedDTO.prototype, method, dtoType);
|
|
136
174
|
try {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (method === EApiRouteType.GET_LIST && dtoType === EApiDtoType.QUERY) {
|
|
175
|
+
if (method === EApiRouteType.GET_LIST && dtoType === EApiDtoType.QUERY) {
|
|
176
|
+
for (const property of queryFilterProperties) {
|
|
177
|
+
const decorators = DtoBuildDecorator(method, property.metadata, property.entityMetadata, dtoType, property.name, currentGuard);
|
|
178
|
+
if (decorators) {
|
|
179
|
+
for (const [, decorator] of decorators.entries()) {
|
|
143
180
|
decorator(GeneratedDTO.prototype, `${property.name}[value]`);
|
|
144
|
-
DtoGenerateFilterDecorator(property.metadata, entityMetadata)(GeneratedDTO.prototype, `${property.name}[operator]`);
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
decorator(GeneratedDTO.prototype, property.name);
|
|
181
|
+
DtoGenerateFilterDecorator(property.metadata, property.entityMetadata)(GeneratedDTO.prototype, `${property.name}[operator]`);
|
|
148
182
|
}
|
|
149
183
|
}
|
|
150
|
-
}
|
|
151
|
-
if (method === EApiRouteType.GET_LIST && dtoType === EApiDtoType.QUERY) {
|
|
152
|
-
// @ts-ignore
|
|
153
184
|
const metadataArray = { ...property.metadata, isArray: true, isUniqueItems: false, maxItems: DTO_GENERATE_CONSTANT.MAXIMUM_FILTER_PROPERTIES, minItems: DTO_GENERATE_CONSTANT.MINIMUM_FILTER_PROPERTIES };
|
|
154
|
-
const decoratorsArray = DtoBuildDecorator(method, metadataArray, entityMetadata, dtoType, property.name, currentGuard);
|
|
185
|
+
const decoratorsArray = DtoBuildDecorator(method, metadataArray, property.entityMetadata, dtoType, property.name, currentGuard);
|
|
155
186
|
if (decoratorsArray) {
|
|
156
187
|
for (const [, decorator] of decoratorsArray.entries()) {
|
|
157
188
|
decorator(GeneratedDTO.prototype, `${property.name}[values]`);
|
|
158
189
|
}
|
|
159
190
|
}
|
|
160
191
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
for (const property of markedProperties) {
|
|
195
|
+
const generatedDTOs = DtoGenerateDynamic(method, property.metadata, entityMetadata, dtoType, property.name, currentGuard);
|
|
196
|
+
const decorators = DtoBuildDecorator(method, property.metadata, entityMetadata, dtoType, property.name, currentGuard, generatedDTOs);
|
|
197
|
+
if (decorators) {
|
|
198
|
+
for (const [, decorator] of decorators.entries()) {
|
|
199
|
+
decorator(GeneratedDTO.prototype, property.name);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (property.metadata.type === EApiPropertyDescribeType.OBJECT && Array.isArray(property.metadata.dataType)) {
|
|
203
|
+
// @ts-ignore
|
|
204
|
+
extraModels.push(...property.metadata.dataType);
|
|
205
|
+
}
|
|
206
|
+
if (generatedDTOs) {
|
|
207
|
+
for (const [, value] of Object.entries(generatedDTOs)) {
|
|
208
|
+
extraModels.push(value);
|
|
209
|
+
}
|
|
168
210
|
}
|
|
169
211
|
}
|
|
170
212
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.utility.js","sources":["../../../../../../src/utility/dto/generate/core.utility.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.utility.js","sources":["../../../../../../src/utility/dto/generate/core.utility.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|