@steroidsjs/nest 3.0.0 → 3.0.2
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/infrastructure/adapters/QueryAdapterTypeORM.js +26 -2
- package/infrastructure/adapters/QueryAdapterTypeORM.js.map +1 -1
- package/infrastructure/applications/base/config.js +1 -1
- package/infrastructure/applications/base/config.js.map +1 -1
- package/infrastructure/applications/console/ConsoleApplication.js +2 -2
- package/infrastructure/applications/console/ConsoleApplication.js.map +1 -1
- package/infrastructure/applications/console/config.js +3 -0
- package/infrastructure/applications/console/config.js.map +1 -1
- package/infrastructure/applications/rest/RestApplication.js +7 -0
- package/infrastructure/applications/rest/RestApplication.js.map +1 -1
- package/infrastructure/applications/rest/exceptions/RequestExecutionException.d.ts +6 -0
- package/infrastructure/applications/rest/exceptions/RequestExecutionException.js +6 -0
- package/infrastructure/applications/rest/exceptions/RequestExecutionException.js.map +1 -1
- package/infrastructure/commands/MigrateCommand.js +1 -0
- package/infrastructure/commands/MigrateCommand.js.map +1 -1
- package/infrastructure/commands/dbml/dbml2code.js +8 -0
- package/infrastructure/commands/dbml/dbml2code.js.map +1 -1
- package/infrastructure/commands/entity-generator/EntityCodeGenerateCommand.d.ts +4 -0
- package/infrastructure/commands/entity-generator/EntityCodeGenerateCommand.js +4 -0
- package/infrastructure/commands/entity-generator/EntityCodeGenerateCommand.js.map +1 -1
- package/infrastructure/commands/entity-generator/EntityCodeGenerator.js +1 -0
- package/infrastructure/commands/entity-generator/EntityCodeGenerator.js.map +1 -1
- package/infrastructure/commands/generate/CustomPostgresQueryRunner.d.ts +77 -0
- package/infrastructure/commands/generate/CustomPostgresQueryRunner.js +149 -0
- package/infrastructure/commands/generate/CustomPostgresQueryRunner.js.map +1 -1
- package/infrastructure/commands/generate/CustomRdbmsSchemaBuilder.js +7 -1
- package/infrastructure/commands/generate/CustomRdbmsSchemaBuilder.js.map +1 -1
- package/infrastructure/commands/generate/index.js +14 -0
- package/infrastructure/commands/generate/index.js.map +1 -1
- package/infrastructure/commands/importClassesFromDirectories.d.ts +3 -0
- package/infrastructure/commands/importClassesFromDirectories.js +3 -0
- package/infrastructure/commands/importClassesFromDirectories.js.map +1 -1
- package/infrastructure/decorators/Module.js +6 -0
- package/infrastructure/decorators/Module.js.map +1 -1
- package/infrastructure/decorators/TableFromModel.js +3 -0
- package/infrastructure/decorators/TableFromModel.js.map +1 -1
- package/infrastructure/decorators/fields/BaseField.js +5 -0
- package/infrastructure/decorators/fields/BaseField.js.map +1 -1
- package/infrastructure/decorators/fields/CreateTimeField.js +1 -0
- package/infrastructure/decorators/fields/CreateTimeField.js.map +1 -1
- package/infrastructure/decorators/fields/DateTimeField.js +5 -0
- package/infrastructure/decorators/fields/DateTimeField.js.map +1 -1
- package/infrastructure/decorators/fields/ExtendField.js +2 -0
- package/infrastructure/decorators/fields/ExtendField.js.map +1 -1
- package/infrastructure/decorators/fields/RelationField.js +3 -0
- package/infrastructure/decorators/fields/RelationField.js.map +1 -1
- package/infrastructure/decorators/fields/RelationIdField.js +2 -0
- package/infrastructure/decorators/fields/RelationIdField.js.map +1 -1
- package/infrastructure/decorators/fields/UidField.js +1 -0
- package/infrastructure/decorators/fields/UidField.js.map +1 -1
- package/infrastructure/decorators/fields/UpdateTimeField.js +1 -0
- package/infrastructure/decorators/fields/UpdateTimeField.js.map +1 -1
- package/infrastructure/filters/ValidationExceptionFilter.js +1 -0
- package/infrastructure/filters/ValidationExceptionFilter.js.map +1 -1
- package/infrastructure/helpers/ModuleHelper.d.ts +1 -0
- package/infrastructure/helpers/ModuleHelper.js +1 -0
- package/infrastructure/helpers/ModuleHelper.js.map +1 -1
- package/infrastructure/helpers/typeORM/ConditionHelperTypeORM.js +21 -18
- package/infrastructure/helpers/typeORM/ConditionHelperTypeORM.js.map +1 -1
- package/infrastructure/helpers/typeORM/SearchHelperTypeORM.js +6 -0
- package/infrastructure/helpers/typeORM/SearchHelperTypeORM.js.map +1 -1
- package/infrastructure/pipes/CreateDtoPipe.js +1 -0
- package/infrastructure/pipes/CreateDtoPipe.js.map +1 -1
- package/infrastructure/repositories/CrudRepository.d.ts +88 -0
- package/infrastructure/repositories/CrudRepository.js +85 -0
- package/infrastructure/repositories/CrudRepository.js.map +1 -1
- package/infrastructure/tests/ModelTest.test.js +23 -0
- package/infrastructure/tests/ModelTest.test.js.map +1 -1
- package/infrastructure/tests/app/services/ArticleService.d.ts +4 -1
- package/infrastructure/tests/app/services/ArticleService.js +3 -1
- package/infrastructure/tests/app/services/ArticleService.js.map +1 -1
- package/infrastructure/tests/app/services/CommentService.d.ts +4 -1
- package/infrastructure/tests/app/services/CommentService.js +3 -1
- package/infrastructure/tests/app/services/CommentService.js.map +1 -1
- package/infrastructure/tests/app/services/FileService.d.ts +4 -1
- package/infrastructure/tests/app/services/FileService.js +3 -1
- package/infrastructure/tests/app/services/FileService.js.map +1 -1
- package/infrastructure/tests/app/services/ImageService.d.ts +4 -1
- package/infrastructure/tests/app/services/ImageService.js +3 -1
- package/infrastructure/tests/app/services/ImageService.js.map +1 -1
- package/infrastructure/tests/app/services/TagService.d.ts +4 -1
- package/infrastructure/tests/app/services/TagService.js +3 -1
- package/infrastructure/tests/app/services/TagService.js.map +1 -1
- package/infrastructure/tests/app/services/UserService.d.ts +4 -1
- package/infrastructure/tests/app/services/UserService.js +3 -1
- package/infrastructure/tests/app/services/UserService.js.map +1 -1
- package/infrastructure/tests/bootstrap.js +1 -1
- package/infrastructure/tests/bootstrap.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/usecases/base/SearchQuery.d.ts +12 -0
- package/usecases/base/SearchQuery.js +18 -0
- package/usecases/base/SearchQuery.js.map +1 -1
- package/usecases/helpers/DataMapper.js +6 -0
- package/usecases/helpers/DataMapper.js.map +1 -1
- package/usecases/helpers/ValidationHelper.d.ts +27 -0
- package/usecases/helpers/ValidationHelper.js +33 -0
- package/usecases/helpers/ValidationHelper.js.map +1 -1
- package/usecases/interfaces/IManualSchema.d.ts +4 -0
- package/usecases/services/CrudService.d.ts +47 -8
- package/usecases/services/CrudService.js +88 -0
- package/usecases/services/CrudService.js.map +1 -1
- package/usecases/services/ReadService.d.ts +31 -0
- package/usecases/services/ReadService.js +32 -0
- package/usecases/services/ReadService.js.map +1 -1
- package/usecases/validators/Validator.js +1 -0
- package/usecases/validators/Validator.js.map +1 -1
|
@@ -30,6 +30,14 @@ export default class SearchQuery<TModel> {
|
|
|
30
30
|
protected _onGetMany: ISearchQueryConfig<TModel>['onGetMany'];
|
|
31
31
|
constructor(config?: ISearchQueryConfig<TModel>);
|
|
32
32
|
static createFromSchema<TModel>(SchemaClass: any, config?: ISearchQueryConfig<TModel>): SearchQuery<TModel>;
|
|
33
|
+
/**
|
|
34
|
+
* Short aliases primary usage is to avoid DB's alias length restriction. It's disabled by default.
|
|
35
|
+
*
|
|
36
|
+
* @param {string} relationPath
|
|
37
|
+
* @example model.firstRelation.secondRelation
|
|
38
|
+
*
|
|
39
|
+
* @param {boolean} isShort
|
|
40
|
+
*/
|
|
33
41
|
static getRelationAlias(relationPath: string, isShort?: boolean): string;
|
|
34
42
|
select(value: string | string[]): this;
|
|
35
43
|
addSelect(value: string | string[]): this;
|
|
@@ -38,6 +46,10 @@ export default class SearchQuery<TModel> {
|
|
|
38
46
|
getExcludeSelect(): string[];
|
|
39
47
|
alias(value: string): this;
|
|
40
48
|
getAlias(): string;
|
|
49
|
+
/**
|
|
50
|
+
* Short name for getRelationAlias
|
|
51
|
+
* @param {string} relationPath
|
|
52
|
+
*/
|
|
41
53
|
a(relationPath: any): string;
|
|
42
54
|
getRelationAlias(relationPath: any): string;
|
|
43
55
|
getShortAliasesAreUsed(): boolean;
|
|
@@ -23,13 +23,24 @@ class SearchQuery {
|
|
|
23
23
|
} })), {});
|
|
24
24
|
return searchQuery;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Short aliases primary usage is to avoid DB's alias length restriction. It's disabled by default.
|
|
28
|
+
*
|
|
29
|
+
* @param {string} relationPath
|
|
30
|
+
* @example model.firstRelation.secondRelation
|
|
31
|
+
*
|
|
32
|
+
* @param {boolean} isShort
|
|
33
|
+
*/
|
|
26
34
|
static getRelationAlias(relationPath, isShort = false) {
|
|
27
35
|
const relationsArray = relationPath.split('.');
|
|
28
36
|
if (!isShort) {
|
|
29
37
|
return relationsArray.join('_');
|
|
30
38
|
}
|
|
31
39
|
else {
|
|
40
|
+
// first letter + the uppercase letters + relation index in path + relation length
|
|
41
|
+
// model.firstRelation.secondRelation -> m0_fr113_sr214
|
|
32
42
|
return relationsArray.map((relation, index) => {
|
|
43
|
+
// root alias shouldn't change
|
|
33
44
|
if (index === 0) {
|
|
34
45
|
return relation;
|
|
35
46
|
}
|
|
@@ -71,6 +82,10 @@ class SearchQuery {
|
|
|
71
82
|
getAlias() {
|
|
72
83
|
return this._alias;
|
|
73
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Short name for getRelationAlias
|
|
87
|
+
* @param {string} relationPath
|
|
88
|
+
*/
|
|
74
89
|
a(relationPath) {
|
|
75
90
|
return this.getRelationAlias(relationPath);
|
|
76
91
|
}
|
|
@@ -92,6 +107,7 @@ class SearchQuery {
|
|
|
92
107
|
}
|
|
93
108
|
}
|
|
94
109
|
const relations = useJoin ? this._relationsJoin : this._relationsNoJoin;
|
|
110
|
+
// Normalize format (one relation, many relations, relations + select)
|
|
95
111
|
let relationObj = {};
|
|
96
112
|
if (typeof relation === 'string') {
|
|
97
113
|
relationObj = { [relation]: '*' };
|
|
@@ -109,6 +125,8 @@ class SearchQuery {
|
|
|
109
125
|
} })), {});
|
|
110
126
|
}
|
|
111
127
|
Object.keys(relationObj).forEach(path => {
|
|
128
|
+
// Store intermediate relations
|
|
129
|
+
// Normalize relations: a.b.c -> a, a.b, a.b.c
|
|
112
130
|
let currentPath;
|
|
113
131
|
path.split('.').forEach(name => {
|
|
114
132
|
currentPath = [currentPath, name].filter(Boolean).join('.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../../src/usecases/base/SearchQuery.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AACrC,sFAA2F;AAC3F,gFAAkF;AAKrE,QAAA,aAAa,GAAG,OAAO,CAAC;AAQrC,MAAqB,WAAW;IAqB5B,YAAY,MAAmC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,qBAAa,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAS,WAAW,EAAE,MAAmC;QAC5E,MAAM,WAAW,GAAG,IAAI,WAAW,CAAS,MAAM,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,IAAA,qCAAsB,EAAC,WAAW,CAAC,CAAC;QACpD,WAAW,CAAC,OAAO,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC;QACtC,WAAW,CAAC,cAAc,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;QACpD,WAAW,CAAC,cAAc,GAAG,IAAA,4BAAgB,EAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,iCAC3E,GAAG,KACN,CAAC,KAAK,CAAC,EAAE;gBACL,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,GAAG;aACd,IACH,EAAE,EAAE,CAAC,CAAC;QAER,OAAO,WAAW,CAAC;IACvB,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchQuery.js","sourceRoot":"","sources":["../../../src/usecases/base/SearchQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ const Transform_1 = require("../../infrastructure/decorators/Transform");
|
|
|
9
9
|
const TableFromModel_1 = require("../../infrastructure/decorators/TableFromModel");
|
|
10
10
|
class DataMapper {
|
|
11
11
|
static create(MetaClass, values, transformType = Transform_1.TRANSFORM_TYPE_DEFAULT, skipBuilder = false) {
|
|
12
|
+
// Check empty
|
|
12
13
|
if (values === null) {
|
|
13
14
|
return null;
|
|
14
15
|
}
|
|
@@ -20,6 +21,11 @@ class DataMapper {
|
|
|
20
21
|
return builder(values);
|
|
21
22
|
}
|
|
22
23
|
const result = new MetaClass();
|
|
24
|
+
/**
|
|
25
|
+
* Is schema implements [[IManualSchema]]?
|
|
26
|
+
* @see IManualSchema
|
|
27
|
+
*/
|
|
28
|
+
// TODO May be @BeforeCreate() decorator?
|
|
23
29
|
if (result['updateFromModel'] && typeof result['updateFromModel'] === 'function' && values) {
|
|
24
30
|
result['updateFromModel'](values);
|
|
25
31
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataMapper.js","sourceRoot":"","sources":["../../../src/usecases/helpers/DataMapper.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,mCAA6C;AAC7C,gFAA6G;AAE7G,8DAA0D;AAE1D,yEAKmD;AACnD,mFAA+E;AAG/E,MAAa,UAAU;IAenB,MAAM,CAAC,MAAM,CACT,SAAmB,EACnB,MAAyC,EACzC,gBAAgC,kCAAsB,EACtD,WAAW,GAAG,KAAK;
|
|
1
|
+
{"version":3,"file":"DataMapper.js","sourceRoot":"","sources":["../../../src/usecases/helpers/DataMapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,37 @@
|
|
|
1
1
|
import { ValidationError, ValidatorOptions } from 'class-validator';
|
|
2
2
|
import { IValidator, IValidatorParams } from '../interfaces/IValidator';
|
|
3
3
|
import { IErrorsCompositeObject } from '../interfaces/IErrorsCompositeObject';
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated Use ValidationHelper.validate()
|
|
6
|
+
* @throws {ValidationException}
|
|
7
|
+
*/
|
|
4
8
|
export declare function validateOrReject(dto: any, validatorOptions?: ValidatorOptions): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Класс для запуска валидации DTO и моделей.
|
|
11
|
+
* Чтобы сделать кастомную валидацию по классам, необходимо:
|
|
12
|
+
* 1. Создать класс валидатора с интерфейсом IValidator
|
|
13
|
+
* 2. Добавить его в providers модуля
|
|
14
|
+
* 3. В сервис, который будет валидировать DTO, объявить в конструкторе
|
|
15
|
+
* `public validators: IValidator[]`
|
|
16
|
+
* 4. В модуле пробросить экземпляр валидатора в сервис в массив validators.
|
|
17
|
+
*/
|
|
5
18
|
export declare class ValidationHelper {
|
|
19
|
+
/**
|
|
20
|
+
* validate object and throw error
|
|
21
|
+
* @throws {ValidationException}
|
|
22
|
+
*/
|
|
6
23
|
static validate(dto: any, params?: IValidatorParams, allValidators?: IValidator[]): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Validate by class-validator library (without custom class validators)
|
|
26
|
+
* @param dto
|
|
27
|
+
*/
|
|
7
28
|
static getClassValidatorErrors(dto: any): Promise<IErrorsCompositeObject | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Validate by custom class validators
|
|
31
|
+
* @param dto
|
|
32
|
+
* @param params
|
|
33
|
+
* @param validatorsInstances
|
|
34
|
+
*/
|
|
8
35
|
static getSteroidsErrors(dto: any, params?: IValidatorParams, validatorsInstances?: IValidator[]): Promise<IErrorsCompositeObject | null>;
|
|
9
36
|
protected static getSteroidsFieldValidatorsErrors(dto: any, key: string, params: IValidatorParams, validatorsInstances: IValidator[]): Promise<string[]>;
|
|
10
37
|
static parseClassValidatorErrors(errors: ValidationError[]): IErrorsCompositeObject;
|
|
@@ -11,6 +11,10 @@ const defaultValidatorOptions = {
|
|
|
11
11
|
whitelist: false,
|
|
12
12
|
forbidUnknownValues: false,
|
|
13
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated Use ValidationHelper.validate()
|
|
16
|
+
* @throws {ValidationException}
|
|
17
|
+
*/
|
|
14
18
|
async function validateOrReject(dto, validatorOptions) {
|
|
15
19
|
const classValidatorErrors = await (0, class_validator_1.validate)(dto, Object.assign(Object.assign({}, defaultValidatorOptions), validatorOptions));
|
|
16
20
|
if (classValidatorErrors.length) {
|
|
@@ -19,7 +23,20 @@ async function validateOrReject(dto, validatorOptions) {
|
|
|
19
23
|
}
|
|
20
24
|
}
|
|
21
25
|
exports.validateOrReject = validateOrReject;
|
|
26
|
+
/**
|
|
27
|
+
* Класс для запуска валидации DTO и моделей.
|
|
28
|
+
* Чтобы сделать кастомную валидацию по классам, необходимо:
|
|
29
|
+
* 1. Создать класс валидатора с интерфейсом IValidator
|
|
30
|
+
* 2. Добавить его в providers модуля
|
|
31
|
+
* 3. В сервис, который будет валидировать DTO, объявить в конструкторе
|
|
32
|
+
* `public validators: IValidator[]`
|
|
33
|
+
* 4. В модуле пробросить экземпляр валидатора в сервис в массив validators.
|
|
34
|
+
*/
|
|
22
35
|
class ValidationHelper {
|
|
36
|
+
/**
|
|
37
|
+
* validate object and throw error
|
|
38
|
+
* @throws {ValidationException}
|
|
39
|
+
*/
|
|
23
40
|
static async validate(dto, params = null, allValidators = null) {
|
|
24
41
|
var _a;
|
|
25
42
|
const classValidatorErrors = await this.getClassValidatorErrors(dto);
|
|
@@ -33,6 +50,10 @@ class ValidationHelper {
|
|
|
33
50
|
throw new exceptions_1.ValidationException(errors);
|
|
34
51
|
}
|
|
35
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Validate by class-validator library (without custom class validators)
|
|
55
|
+
* @param dto
|
|
56
|
+
*/
|
|
36
57
|
static async getClassValidatorErrors(dto) {
|
|
37
58
|
const errors = await (0, class_validator_1.validate)(dto, defaultValidatorOptions);
|
|
38
59
|
if (errors.length) {
|
|
@@ -40,6 +61,12 @@ class ValidationHelper {
|
|
|
40
61
|
}
|
|
41
62
|
return null;
|
|
42
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate by custom class validators
|
|
66
|
+
* @param dto
|
|
67
|
+
* @param params
|
|
68
|
+
* @param validatorsInstances
|
|
69
|
+
*/
|
|
43
70
|
static async getSteroidsErrors(dto, params = null, validatorsInstances = null) {
|
|
44
71
|
var _a, _b;
|
|
45
72
|
if (!dto) {
|
|
@@ -62,6 +89,7 @@ class ValidationHelper {
|
|
|
62
89
|
}
|
|
63
90
|
}
|
|
64
91
|
else if (value && (0, lodash_1.isObject)(value)) {
|
|
92
|
+
// Nested validation for object
|
|
65
93
|
keyErrors = await this.getSteroidsErrors(value, nextParams, validatorsInstances);
|
|
66
94
|
}
|
|
67
95
|
if (keyErrors) {
|
|
@@ -73,6 +101,7 @@ class ValidationHelper {
|
|
|
73
101
|
errors[key] = fieldValidatorsErrors;
|
|
74
102
|
}
|
|
75
103
|
}
|
|
104
|
+
// Has errors?
|
|
76
105
|
if (Object.keys(errors).length > 0) {
|
|
77
106
|
return errors;
|
|
78
107
|
}
|
|
@@ -80,9 +109,11 @@ class ValidationHelper {
|
|
|
80
109
|
}
|
|
81
110
|
static async getSteroidsFieldValidatorsErrors(dto, key, params, validatorsInstances) {
|
|
82
111
|
let fieldValidatorErrors = [];
|
|
112
|
+
// Get field validators
|
|
83
113
|
const fieldValidators = (0, Validator_1.getFieldValidators)(dto.constructor, key);
|
|
84
114
|
for (const fieldValidator of fieldValidators) {
|
|
85
115
|
try {
|
|
116
|
+
// Find validator instance
|
|
86
117
|
const validator = (validatorsInstances || []).find(item => {
|
|
87
118
|
try {
|
|
88
119
|
return item instanceof fieldValidator;
|
|
@@ -99,9 +130,11 @@ class ValidationHelper {
|
|
|
99
130
|
throw new Error(`Not found validator instance for "${dto.constructor.name}.${key}"`
|
|
100
131
|
+ ' Please add it to CrudService.validators array.');
|
|
101
132
|
}
|
|
133
|
+
// Run validator
|
|
102
134
|
await validator.validate(dto, Object.assign(Object.assign({}, params), { name: key }));
|
|
103
135
|
}
|
|
104
136
|
catch (e) {
|
|
137
|
+
// Check validator is throw specific exception
|
|
105
138
|
if (e instanceof FieldValidatorException_1.FieldValidatorException) {
|
|
106
139
|
fieldValidatorErrors.push(e.message);
|
|
107
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationHelper.js","sourceRoot":"","sources":["../../../src/usecases/helpers/ValidationHelper.ts"],"names":[],"mappings":";;;AAAA,mCAAsE;AACtE,qDAA4E;AAC5E,8CAAkD;AAElD,mFAA8E;AAC9E,gFAA4F;AAC5F,uDAA2D;AAG3D,MAAM,uBAAuB,GAAqB;IAC9C,SAAS,EAAE,KAAK;IAChB,mBAAmB,EAAE,KAAK;CAC7B,CAAC;
|
|
1
|
+
{"version":3,"file":"ValidationHelper.js","sourceRoot":"","sources":["../../../src/usecases/helpers/ValidationHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,58 @@
|
|
|
1
|
+
import { DeepPartial } from '@steroidsjs/typeorm';
|
|
1
2
|
import { ISearchInputDto } from '../dtos/SearchInputDto';
|
|
2
3
|
import { ContextDto } from '../dtos/ContextDto';
|
|
3
4
|
import { ReadService } from './ReadService';
|
|
4
5
|
import { IType } from '../interfaces/IType';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Generic CRUD service
|
|
8
|
+
*/
|
|
9
|
+
export declare class CrudService<TModel, TSearchDto = ISearchInputDto,
|
|
10
|
+
/** @deprecated */
|
|
11
|
+
TSaveDto = TModel> extends ReadService<TModel, TSearchDto> {
|
|
12
|
+
create(dto: DeepPartial<TModel>, context?: ContextDto | null): Promise<TModel>;
|
|
13
|
+
create<TSchema>(dto: DeepPartial<TModel>, context?: ContextDto | null, schemaClass?: IType<TSchema>): Promise<TSchema>;
|
|
14
|
+
update<TSchema>(id: number | string, dto: DeepPartial<TModel>, context?: ContextDto | null): Promise<TModel>;
|
|
15
|
+
update<TSchema>(id: number | string, dto: DeepPartial<TModel>, context?: ContextDto | null, schemaClass?: IType<TSchema>): Promise<TSchema>;
|
|
16
|
+
save<TSchema>(id: number | string, dto: DeepPartial<TModel>, context?: ContextDto | null): Promise<TModel>;
|
|
17
|
+
save<TSchema>(id: number | string, dto: DeepPartial<TModel>, context?: ContextDto | null, schemaClass?: IType<TSchema>): Promise<TSchema>;
|
|
18
|
+
/**
|
|
19
|
+
* Internal save method for overwrite in project
|
|
20
|
+
* @param prevModel
|
|
21
|
+
* @param nextModel
|
|
22
|
+
* @param diffModel
|
|
23
|
+
* @param context
|
|
24
|
+
*/
|
|
12
25
|
saveInternal(prevModel: TModel | null, nextModel: TModel, diffModel: TModel, context?: ContextDto): Promise<void>;
|
|
13
26
|
checkHasRelatedModels(id: string | number, service: CrudService<any>): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Remove model
|
|
29
|
+
* @param rawId
|
|
30
|
+
* @param context
|
|
31
|
+
*/
|
|
14
32
|
remove(rawId: number | string, context?: ContextDto): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Internal remove method for overwrite in project
|
|
35
|
+
* @param id
|
|
36
|
+
* @param context
|
|
37
|
+
*/
|
|
15
38
|
removeInternal(id: number, context?: ContextDto): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Soft remove model
|
|
41
|
+
* @param rawId
|
|
42
|
+
* @param context
|
|
43
|
+
*/
|
|
16
44
|
softRemove(rawId: number | string, context?: ContextDto): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Internal soft remove method for overwrite in project
|
|
47
|
+
* @param id
|
|
48
|
+
* @param context
|
|
49
|
+
*/
|
|
17
50
|
softRemoveInternal(id: number, context?: ContextDto): Promise<void>;
|
|
18
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Mapping dto to model class
|
|
53
|
+
* @param dto
|
|
54
|
+
* @protected
|
|
55
|
+
* @throws Error if modelClass is not set
|
|
56
|
+
*/
|
|
57
|
+
protected dtoToModel(dto: DeepPartial<TModel>): TModel;
|
|
19
58
|
}
|
|
@@ -8,18 +8,44 @@ const BaseField_1 = require("../../infrastructure/decorators/fields/BaseField");
|
|
|
8
8
|
const RelationTypeEnum_1 = require("../../domain/enums/RelationTypeEnum");
|
|
9
9
|
const exceptions_1 = require("../exceptions");
|
|
10
10
|
const ReadService_1 = require("./ReadService");
|
|
11
|
+
/**
|
|
12
|
+
* Generic CRUD service
|
|
13
|
+
*/
|
|
11
14
|
class CrudService extends ReadService_1.ReadService {
|
|
15
|
+
/**
|
|
16
|
+
* Create new model
|
|
17
|
+
* @param dto
|
|
18
|
+
* @param context
|
|
19
|
+
* @param schemaClass
|
|
20
|
+
*/
|
|
12
21
|
async create(dto, context = null, schemaClass = null) {
|
|
13
22
|
return this.save(null, dto, context, schemaClass);
|
|
14
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Update model
|
|
26
|
+
* @param rawId
|
|
27
|
+
* @param dto
|
|
28
|
+
* @param context
|
|
29
|
+
* @param schemaClass
|
|
30
|
+
*/
|
|
15
31
|
async update(rawId, dto, context = null, schemaClass = null) {
|
|
16
32
|
return this.save(rawId, dto, context, schemaClass);
|
|
17
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Update model
|
|
36
|
+
* @param rawId
|
|
37
|
+
* @param dto
|
|
38
|
+
* @param context
|
|
39
|
+
* @param schemaClass
|
|
40
|
+
* @throws Error if dto is instance of model class
|
|
41
|
+
* @throws Error if rawId passed and prevModel not found
|
|
42
|
+
*/
|
|
18
43
|
async save(rawId, dto, context = null, schemaClass = null) {
|
|
19
44
|
if (this.isModel(dto)) {
|
|
20
45
|
throw new Error('The model itself shouldn\'t be used as a DTO');
|
|
21
46
|
}
|
|
22
47
|
const id = rawId ? (0, lodash_1.toInteger)(rawId) : null;
|
|
48
|
+
// Fetch previous model state
|
|
23
49
|
let prevModel = null;
|
|
24
50
|
if (id) {
|
|
25
51
|
prevModel = await this.createQuery()
|
|
@@ -30,32 +56,56 @@ class CrudService extends ReadService_1.ReadService {
|
|
|
30
56
|
throw new Error('Not found model by id: ' + id);
|
|
31
57
|
}
|
|
32
58
|
}
|
|
59
|
+
// Create next model state
|
|
33
60
|
const ModelClass = this.modelClass;
|
|
34
61
|
const nextModel = new ModelClass();
|
|
62
|
+
// Сперва добавляем данные для новой модели из старой
|
|
35
63
|
if (prevModel) {
|
|
36
64
|
DataMapper_1.DataMapper.applyValues(nextModel, prevModel);
|
|
37
65
|
}
|
|
66
|
+
// Модель с измененными полями
|
|
38
67
|
const diffModel = this.dtoToModel(dto);
|
|
68
|
+
// Принудительно добавляем primary key, т.к. его зачастую нет в dto
|
|
39
69
|
if (id) {
|
|
40
70
|
diffModel[this.primaryKey] = id;
|
|
41
71
|
}
|
|
72
|
+
// Затем накатываем изменения
|
|
42
73
|
DataMapper_1.DataMapper.applyValues(nextModel, diffModel);
|
|
74
|
+
// Validate dto
|
|
43
75
|
await this.validate(dto, {
|
|
44
76
|
prevModel,
|
|
45
77
|
nextModel,
|
|
46
78
|
context,
|
|
47
79
|
});
|
|
80
|
+
// Validate by ModelClass
|
|
48
81
|
await this.validate(nextModel, {
|
|
49
82
|
prevModel,
|
|
50
83
|
nextModel,
|
|
51
84
|
context,
|
|
52
85
|
});
|
|
86
|
+
// Save
|
|
53
87
|
await this.saveInternal(prevModel, nextModel, diffModel, context);
|
|
88
|
+
// Convert to schema, if need
|
|
54
89
|
return schemaClass
|
|
55
90
|
? this.findById(nextModel[this.primaryKey], context, schemaClass)
|
|
56
91
|
: nextModel;
|
|
57
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Internal save method for overwrite in project
|
|
95
|
+
* @param prevModel
|
|
96
|
+
* @param nextModel
|
|
97
|
+
* @param diffModel
|
|
98
|
+
* @param context
|
|
99
|
+
*/
|
|
58
100
|
async saveInternal(prevModel, nextModel, diffModel, context) {
|
|
101
|
+
// you code outside transaction before save
|
|
102
|
+
// await this.repository.save(diffModel, async (save) => {
|
|
103
|
+
// you code inside transaction before save
|
|
104
|
+
// await save();
|
|
105
|
+
// you code inside transaction after save
|
|
106
|
+
// });
|
|
107
|
+
// you code outside transaction after save
|
|
108
|
+
// or save() call without transaction
|
|
59
109
|
await this.repository.save(diffModel);
|
|
60
110
|
}
|
|
61
111
|
async checkHasRelatedModels(id, service) {
|
|
@@ -76,25 +126,63 @@ class CrudService extends ReadService_1.ReadService {
|
|
|
76
126
|
}
|
|
77
127
|
});
|
|
78
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Remove model
|
|
131
|
+
* @param rawId
|
|
132
|
+
* @param context
|
|
133
|
+
*/
|
|
79
134
|
async remove(rawId, context = null) {
|
|
80
135
|
const id = (0, lodash_1.toInteger)(rawId);
|
|
81
136
|
await this.checkHasRelatedModels(id, this);
|
|
82
137
|
await this.removeInternal(id, context);
|
|
83
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Internal remove method for overwrite in project
|
|
141
|
+
* @param id
|
|
142
|
+
* @param context
|
|
143
|
+
*/
|
|
84
144
|
async removeInternal(id, context) {
|
|
145
|
+
// you code outside transaction before remove
|
|
85
146
|
await this.repository.remove(id, async (remove) => {
|
|
147
|
+
// you code inside transaction before remove
|
|
86
148
|
await remove();
|
|
149
|
+
// you code inside transaction after remove
|
|
87
150
|
});
|
|
151
|
+
// you code outside transaction after remove
|
|
152
|
+
// or remove() call without transaction
|
|
153
|
+
// await this.repository.remove(id);
|
|
88
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Soft remove model
|
|
157
|
+
* @param rawId
|
|
158
|
+
* @param context
|
|
159
|
+
*/
|
|
89
160
|
async softRemove(rawId, context = null) {
|
|
90
161
|
const id = (0, lodash_1.toInteger)(rawId);
|
|
91
162
|
await this.softRemoveInternal(id, context);
|
|
92
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Internal soft remove method for overwrite in project
|
|
166
|
+
* @param id
|
|
167
|
+
* @param context
|
|
168
|
+
*/
|
|
93
169
|
async softRemoveInternal(id, context) {
|
|
170
|
+
// you code outside transaction before soft remove
|
|
94
171
|
await this.repository.softRemove(id, async (softRemove) => {
|
|
172
|
+
// you code inside transaction before soft remove
|
|
95
173
|
await softRemove();
|
|
174
|
+
// you code inside transaction after soft remove
|
|
96
175
|
});
|
|
176
|
+
// you code outside transaction after soft remove
|
|
177
|
+
// or softRemove() call without transaction
|
|
178
|
+
// await this.repository.softRemove(id);
|
|
97
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Mapping dto to model class
|
|
182
|
+
* @param dto
|
|
183
|
+
* @protected
|
|
184
|
+
* @throws Error if modelClass is not set
|
|
185
|
+
*/
|
|
98
186
|
dtoToModel(dto) {
|
|
99
187
|
if (!this.modelClass) {
|
|
100
188
|
throw new Error('Property modelClass is not set in service: ' + this.constructor.name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrudService.js","sourceRoot":"","sources":["../../../src/usecases/services/CrudService.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;
|
|
1
|
+
{"version":3,"file":"CrudService.js","sourceRoot":"","sources":["../../../src/usecases/services/CrudService.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,19 +5,50 @@ import SearchQuery, { ISearchQueryConfig } from '../base/SearchQuery';
|
|
|
5
5
|
import { ContextDto } from '../dtos/ContextDto';
|
|
6
6
|
import { IValidator, IValidatorParams } from '../interfaces/IValidator';
|
|
7
7
|
import { IType } from '../interfaces/IType';
|
|
8
|
+
/**
|
|
9
|
+
* Generic Read service (search and find)
|
|
10
|
+
*/
|
|
8
11
|
export declare class ReadService<TModel, TSearchDto = ISearchInputDto> {
|
|
12
|
+
/**
|
|
13
|
+
* Model primary key
|
|
14
|
+
*/
|
|
9
15
|
protected primaryKey: string;
|
|
16
|
+
/**
|
|
17
|
+
* CRUD repository instance (not TypeORM!)
|
|
18
|
+
* @protected
|
|
19
|
+
*/
|
|
10
20
|
protected repository: ICrudRepository<TModel>;
|
|
21
|
+
/**
|
|
22
|
+
* Model class
|
|
23
|
+
* @protected
|
|
24
|
+
*/
|
|
11
25
|
protected modelClass: IType<TModel>;
|
|
26
|
+
/**
|
|
27
|
+
* Injected validator instances
|
|
28
|
+
*/
|
|
12
29
|
validators: IValidator[];
|
|
13
30
|
init(repository: ICrudRepository<TModel>, ModelClass: IType<TModel>): void;
|
|
14
31
|
search(dto: TSearchDto, context?: ContextDto | null): Promise<SearchResultDto<TModel>>;
|
|
15
32
|
search<TSchema>(dto: TSearchDto, context?: ContextDto | null, schemaClass?: IType<TSchema>): Promise<SearchResultDto<TSchema>>;
|
|
16
33
|
findById(id: number | string, context?: ContextDto | null): Promise<TModel>;
|
|
17
34
|
findById<TSchema>(id: number | string, context?: ContextDto | null, schemaClass?: IType<TSchema>): Promise<TSchema>;
|
|
35
|
+
/**
|
|
36
|
+
* Find one model by search query (selects and condition)
|
|
37
|
+
* @param searchQuery
|
|
38
|
+
*/
|
|
18
39
|
findOne(searchQuery: SearchQuery<TModel>): Promise<TModel>;
|
|
40
|
+
/**
|
|
41
|
+
* Find many models by search query (selects and condition)
|
|
42
|
+
* @param searchQuery
|
|
43
|
+
*/
|
|
19
44
|
findMany(searchQuery: SearchQuery<TModel>): Promise<TModel[]>;
|
|
20
45
|
createQuery(config?: ISearchQueryConfig<TModel>): SearchQuery<TModel>;
|
|
46
|
+
/**
|
|
47
|
+
* Mapping model to schema class
|
|
48
|
+
* @param model
|
|
49
|
+
* @param schemaClass
|
|
50
|
+
* @protected
|
|
51
|
+
*/
|
|
21
52
|
protected modelToSchema<TSchema>(model: TModel, schemaClass: IType<TSchema>): TSchema;
|
|
22
53
|
protected validate(dto: any, params?: IValidatorParams): Promise<void>;
|
|
23
54
|
protected isModel(obj: unknown): obj is TModel;
|