aws-service-stack 0.10.94 → 0.10.96
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.
|
@@ -4,8 +4,9 @@ import { SchemaValidation } from "../model/schema-validation";
|
|
|
4
4
|
export declare abstract class BaseServiceImpl<T extends BaseEntity, D extends BaseRepoDB<T>, S extends BaseRepoES<T>, R = any> extends BaseSocketServiceIml<R> implements BaseService<T, R> {
|
|
5
5
|
protected repoDB: D;
|
|
6
6
|
protected repoES: S;
|
|
7
|
-
private
|
|
8
|
-
|
|
7
|
+
private createSchemaMap;
|
|
8
|
+
private updateSchemaMap;
|
|
9
|
+
protected constructor(repoDB: D, repoES: S, createSchemaMap?: Map<string, SchemaValidation>, updateSchemaMap?: Map<string, SchemaValidation>);
|
|
9
10
|
findQuery(queryParams: string): Promise<List<Partial<T>>>;
|
|
10
11
|
searchQuery(queryParams: string): Promise<Partial<T>[]>;
|
|
11
12
|
incrementValueByField(entityId: string, fieldName: string, value?: number): Promise<T>;
|
|
@@ -23,7 +24,8 @@ export declare abstract class BaseServiceImpl<T extends BaseEntity, D extends Ba
|
|
|
23
24
|
changeOwner(userId: string, ownerId: string, entityId: string): Promise<T>;
|
|
24
25
|
setTable(tableName: string, dynamoIndexMap: DynamoIndexMap): boolean;
|
|
25
26
|
setOpensearch(indexName: string, opensearchEndpoint: string): boolean;
|
|
26
|
-
|
|
27
|
+
setCreateValidationSchemaMap(validationSchemaMap: Map<string, SchemaValidation>): boolean;
|
|
28
|
+
setUpdateValidationSchemaMap(validationSchemaMap: Map<string, SchemaValidation>): boolean;
|
|
27
29
|
getIndexES(): string;
|
|
28
30
|
getIndexMapDB(): DynamoIndexMap;
|
|
29
31
|
findAll(): Promise<List<T>>;
|
|
@@ -36,6 +38,7 @@ export declare abstract class BaseServiceImpl<T extends BaseEntity, D extends Ba
|
|
|
36
38
|
throwErrorDatabase(tableName: string, command: any, errorContent?: any): void;
|
|
37
39
|
throwErrorValidation(entityName: string, validation: Map<string, any>, errorContent?: any): void;
|
|
38
40
|
throwError(code: number, message: string, errorContent?: any): void;
|
|
39
|
-
|
|
41
|
+
validateCreate(entity: Partial<T>, fields?: string[]): boolean;
|
|
42
|
+
validateUpdate(entity: Partial<T>, fields?: string[]): boolean;
|
|
40
43
|
private validateMany;
|
|
41
44
|
}
|
|
@@ -76,7 +76,18 @@ export interface BaseService<T extends BaseEntity, R = any> extends BaseSocketSe
|
|
|
76
76
|
findAll(): Promise<List<T>>;
|
|
77
77
|
findByField(fieldName: string, fieldValue: any): Promise<List<T>>;
|
|
78
78
|
findFirst(fieldName: string, fieldValue: string | boolean | number | Date): Promise<T>;
|
|
79
|
-
|
|
79
|
+
/**
|
|
80
|
+
* Validates the creation of an entity.
|
|
81
|
+
* @param entity - The entity to validate.
|
|
82
|
+
* @param ignoreFields - Fields to ignore during validation.
|
|
83
|
+
*/
|
|
84
|
+
validateCreate(entity: any, ignoreFields?: string[]): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Validates the update of an entity.
|
|
87
|
+
* @param entity - The entity to validate.
|
|
88
|
+
* @param fields - Fields to validate during the update.
|
|
89
|
+
*/
|
|
90
|
+
validateUpdate(entity: any, fields?: string[]): boolean;
|
|
80
91
|
throwError(code: number, message: string, errorContent?: any): void;
|
|
81
92
|
throwErrorHttp(error: {
|
|
82
93
|
message: string;
|
|
@@ -14,9 +14,10 @@ const index_1 = require("../index");
|
|
|
14
14
|
const socket_service_1 = require("./socket.service");
|
|
15
15
|
const errors_1 = require("../exception/errors");
|
|
16
16
|
class BaseServiceImpl extends socket_service_1.BaseSocketServiceIml {
|
|
17
|
-
constructor(repoDB, repoES,
|
|
17
|
+
constructor(repoDB, repoES, createSchemaMap, updateSchemaMap) {
|
|
18
18
|
super();
|
|
19
|
-
this.
|
|
19
|
+
this.createSchemaMap = new Map();
|
|
20
|
+
this.updateSchemaMap = new Map();
|
|
20
21
|
if (repoDB != null && !(repoDB instanceof index_1.BaseRepoDBImpl))
|
|
21
22
|
console.error("repoDB is not an instance of BaseRepoDBImpl");
|
|
22
23
|
if (repoES != null && !(repoES instanceof index_1.BaseRepoESImpl))
|
|
@@ -25,7 +26,8 @@ class BaseServiceImpl extends socket_service_1.BaseSocketServiceIml {
|
|
|
25
26
|
console.error("repo initialization is required");
|
|
26
27
|
this.repoDB = repoDB;
|
|
27
28
|
this.repoES = repoES;
|
|
28
|
-
this.
|
|
29
|
+
this.createSchemaMap = createSchemaMap;
|
|
30
|
+
this.updateSchemaMap = updateSchemaMap;
|
|
29
31
|
}
|
|
30
32
|
findQuery(queryParams) {
|
|
31
33
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -55,9 +57,9 @@ class BaseServiceImpl extends socket_service_1.BaseSocketServiceIml {
|
|
|
55
57
|
});
|
|
56
58
|
}
|
|
57
59
|
save(userId, entity) {
|
|
58
|
-
this.validate(entity);
|
|
59
60
|
(0, index_1.addDatesAndId)(entity);
|
|
60
61
|
entity.createdBy = userId;
|
|
62
|
+
this.validateCreate(entity);
|
|
61
63
|
return this.repoDB.save(entity);
|
|
62
64
|
}
|
|
63
65
|
saveAll(userId, entities) {
|
|
@@ -71,7 +73,7 @@ class BaseServiceImpl extends socket_service_1.BaseSocketServiceIml {
|
|
|
71
73
|
return __awaiter(this, void 0, void 0, function* () {
|
|
72
74
|
entity.updatedBy = userId;
|
|
73
75
|
(0, index_1.addDates)(entity);
|
|
74
|
-
this.
|
|
76
|
+
this.validateUpdate(entity, fields);
|
|
75
77
|
// if (!hasPermission(entity, userId, Permission.UPDATE)) throw new Error("Unauthorized access");
|
|
76
78
|
return (yield this.repoDB.update(entity, fields)); //todo remove as T
|
|
77
79
|
});
|
|
@@ -118,8 +120,12 @@ class BaseServiceImpl extends socket_service_1.BaseSocketServiceIml {
|
|
|
118
120
|
this.repoES.setEndpoint(opensearchEndpoint);
|
|
119
121
|
return true;
|
|
120
122
|
}
|
|
121
|
-
|
|
122
|
-
this.
|
|
123
|
+
setCreateValidationSchemaMap(validationSchemaMap) {
|
|
124
|
+
this.createSchemaMap = validationSchemaMap;
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
setUpdateValidationSchemaMap(validationSchemaMap) {
|
|
128
|
+
this.updateSchemaMap = validationSchemaMap;
|
|
123
129
|
return true;
|
|
124
130
|
}
|
|
125
131
|
getIndexES() {
|
|
@@ -149,12 +155,27 @@ class BaseServiceImpl extends socket_service_1.BaseSocketServiceIml {
|
|
|
149
155
|
throwError(code, message, errorContent) {
|
|
150
156
|
throw new errors_1.ErrorBase(code, message, errorContent);
|
|
151
157
|
}
|
|
152
|
-
|
|
153
|
-
if (!this.
|
|
158
|
+
validateCreate(entity, fields) {
|
|
159
|
+
if (!this.createSchemaMap)
|
|
160
|
+
return true;
|
|
161
|
+
if (entity.__typename === undefined)
|
|
162
|
+
throw new errors_1.ErrorHttp({ code: 400, error: "Bad Request" }, "Entity type name is not defined");
|
|
163
|
+
const schema = this.createSchemaMap.get(entity.__typename);
|
|
164
|
+
if (!schema) {
|
|
165
|
+
console.warn(`Create validation schema not defined for entity:${entity.__typename}`);
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
schema.validate(entity, fields);
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
validateUpdate(entity, fields) {
|
|
172
|
+
if (!this.updateSchemaMap)
|
|
154
173
|
return true;
|
|
155
|
-
|
|
174
|
+
if (entity.__typename === undefined)
|
|
175
|
+
throw new errors_1.ErrorHttp({ code: 400, error: "Bad Request" }, "Entity type name is not defined");
|
|
176
|
+
const schema = this.updateSchemaMap.get(entity.__typename);
|
|
156
177
|
if (!schema) {
|
|
157
|
-
console.warn(`
|
|
178
|
+
console.warn(`Update validation schema not defined for entity:${entity.__typename}`);
|
|
158
179
|
return true;
|
|
159
180
|
}
|
|
160
181
|
schema.validate(entity, fields);
|
|
@@ -162,14 +183,16 @@ class BaseServiceImpl extends socket_service_1.BaseSocketServiceIml {
|
|
|
162
183
|
}
|
|
163
184
|
validateMany(entities, fields) {
|
|
164
185
|
var _a;
|
|
186
|
+
if (entities[0].__typename === undefined)
|
|
187
|
+
throw new errors_1.ErrorHttp({ code: 400, error: "Bad Request" }, "Entity type name is not defined");
|
|
165
188
|
const entityName = entities[0].__typename;
|
|
166
|
-
const schema = (_a = this.
|
|
189
|
+
const schema = (_a = this.createSchemaMap) === null || _a === void 0 ? void 0 : _a.get(entityName);
|
|
167
190
|
if (!schema) {
|
|
168
|
-
console.warn("no validation schema defined for entity: " + entityName);
|
|
191
|
+
console.warn("no create validation schema defined for entity: " + entityName);
|
|
169
192
|
return true;
|
|
170
193
|
}
|
|
171
194
|
entities.forEach((entity) => {
|
|
172
|
-
this.
|
|
195
|
+
this.validateCreate(entity, fields);
|
|
173
196
|
});
|
|
174
197
|
}
|
|
175
198
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../src/service/base.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAakB;AAClB,qDAAwD;AAExD,gDAA2F;AAE3F,MAAsB,eACpB,SAAQ,qCAAuB;
|
|
1
|
+
{"version":3,"file":"base.service.js","sourceRoot":"","sources":["../../src/service/base.service.ts"],"names":[],"mappings":"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"}
|