@smartsoft001/crud-shell-app-services 2.147.0 → 2.149.0

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/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@smartsoft001/crud-shell-app-services",
3
- "version": "2.147.0",
3
+ "version": "2.149.0",
4
+ "type": "commonjs",
5
+ "main": "./src/index.js",
6
+ "typings": "./src/index.d.ts",
4
7
  "publishConfig": {
5
8
  "access": "public"
6
9
  },
@@ -19,5 +22,15 @@
19
22
  "bugs": {
20
23
  "url": "https://github.com/emiljuchnikowski/smartsoft/issues"
21
24
  },
22
- "homepage": "https://github.com/emiljuchnikowski/smartsoft#readme"
25
+ "homepage": "https://github.com/emiljuchnikowski/smartsoft#readme",
26
+ "peerDependencies": {
27
+ "@smartsoft001/crud-domain": "2.149.0",
28
+ "@smartsoft001/crud-shell-dtos": "2.149.0",
29
+ "@smartsoft001/domain-core": "2.149.0",
30
+ "@smartsoft001/models": "2.149.0",
31
+ "@smartsoft001/nestjs": "2.149.0",
32
+ "@smartsoft001/users": "2.149.0",
33
+ "@smartsoft001/utils": "2.149.0"
34
+ },
35
+ "types": "./src/index.d.ts"
23
36
  }
package/src/index.js ADDED
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./lib/services"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/crud/shell/app-services/src/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B"}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ var CrudService_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CrudService = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const CombinedStream = tslib_1.__importStar(require("combined-stream"));
8
+ const guid_typescript_1 = require("guid-typescript");
9
+ const lodash_decorators_1 = require("lodash-decorators");
10
+ const domain_core_1 = require("@smartsoft001/domain-core");
11
+ const models_1 = require("@smartsoft001/models");
12
+ const nestjs_1 = require("@smartsoft001/nestjs");
13
+ const utils_1 = require("@smartsoft001/utils");
14
+ let CrudService = CrudService_1 = class CrudService {
15
+ permissionService;
16
+ repository;
17
+ attachmentRepository;
18
+ _logger = new common_1.Logger(CrudService_1.name, { timestamp: true });
19
+ constructor(permissionService, repository, attachmentRepository) {
20
+ this.permissionService = permissionService;
21
+ this.repository = repository;
22
+ this.attachmentRepository = attachmentRepository;
23
+ }
24
+ async create(data, user) {
25
+ data.id = guid_typescript_1.Guid.raw();
26
+ try {
27
+ this.permissionService.valid('create', user);
28
+ (0, models_1.castModel)(data, 'create', user.permissions);
29
+ this.checkValidCreate(data, user.permissions);
30
+ if (data['password']) {
31
+ data['password'] = await utils_1.PasswordService.hash(data['password']);
32
+ }
33
+ if (data['passwordConfirm']) {
34
+ delete data['passwordConfirm'];
35
+ }
36
+ await this.repository.create(data, user);
37
+ return data.id;
38
+ }
39
+ catch (e) {
40
+ this._logger.error(e);
41
+ throw e;
42
+ }
43
+ }
44
+ async createMany(data, user, options) {
45
+ data.forEach((item) => {
46
+ item.id = guid_typescript_1.Guid.raw();
47
+ });
48
+ try {
49
+ this.permissionService.valid('create', user);
50
+ data.forEach((item) => {
51
+ (0, models_1.castModel)(item, 'create', user.permissions);
52
+ this.checkValidCreate(item, user.permissions);
53
+ });
54
+ if (options && options.mode === 'replace') {
55
+ await this.repository.clear(user);
56
+ }
57
+ for (let index = 0; index < data.length; index++) {
58
+ const item = data[index];
59
+ if (item['password']) {
60
+ item['password'] = await utils_1.PasswordService.hash(item['password']);
61
+ }
62
+ if (item['passwordConfirm']) {
63
+ delete item['passwordConfirm'];
64
+ }
65
+ }
66
+ await this.repository.createMany(data, user);
67
+ }
68
+ catch (e) {
69
+ this._logger.error(e);
70
+ throw e;
71
+ }
72
+ return data;
73
+ }
74
+ async readById(id, user) {
75
+ try {
76
+ this.permissionService.valid('read', user);
77
+ const result = await this.repository.getById(id);
78
+ delete result['password'];
79
+ return result;
80
+ }
81
+ catch (e) {
82
+ this._logger.error(e);
83
+ throw e;
84
+ }
85
+ }
86
+ async read(criteria, options, user) {
87
+ try {
88
+ this.permissionService.valid('read', user);
89
+ const result = await this.repository.getByCriteria(criteria, options);
90
+ result.data.forEach((item) => delete item['password']);
91
+ return result;
92
+ }
93
+ catch (e) {
94
+ this._logger.error(e);
95
+ throw e;
96
+ }
97
+ }
98
+ readBySpec(spec, options, user) {
99
+ return this.read(spec.criteria, options, user);
100
+ }
101
+ async update(id, data, user) {
102
+ try {
103
+ data.id = id;
104
+ this.permissionService.valid('update', user);
105
+ (0, models_1.castModel)(data, 'update', user.permissions);
106
+ this.checkValidUpdate(data, user.permissions);
107
+ if (data['password']) {
108
+ data['password'] = await utils_1.PasswordService.hash(data['password']);
109
+ }
110
+ if (data['passwordConfirm']) {
111
+ delete data['passwordConfirm'];
112
+ }
113
+ await this.repository.update(data, user);
114
+ }
115
+ catch (e) {
116
+ this._logger.error(e);
117
+ throw e;
118
+ }
119
+ }
120
+ async updatePartial(id, data, user) {
121
+ try {
122
+ data.id = id;
123
+ this.permissionService.valid('update', user);
124
+ (0, models_1.castModel)(data, 'update', user.permissions);
125
+ this.checkValidUpdatePartial(data, user.permissions);
126
+ if (data['password']) {
127
+ data['password'] = await utils_1.PasswordService.hash(data['password']);
128
+ }
129
+ if (data['passwordConfirm']) {
130
+ delete data['passwordConfirm'];
131
+ }
132
+ await this.repository.updatePartial(data, user);
133
+ }
134
+ catch (e) {
135
+ this._logger.error(e);
136
+ throw e;
137
+ }
138
+ }
139
+ async delete(id, user) {
140
+ try {
141
+ this.permissionService.valid('delete', user);
142
+ await this.repository.delete(id, user);
143
+ }
144
+ catch (e) {
145
+ this._logger.error(e);
146
+ throw e;
147
+ }
148
+ }
149
+ async uploadAttachment(data, options) {
150
+ if (!data.id) {
151
+ data.id = utils_1.GuidService.create();
152
+ }
153
+ let oldId = null;
154
+ if (options?.start) {
155
+ oldId = data.id;
156
+ const stream = await this.attachmentRepository.getStream(data.id, {
157
+ start: 0,
158
+ end: options.start - 1,
159
+ });
160
+ const combinedStream = CombinedStream.create();
161
+ combinedStream.append(stream);
162
+ combinedStream.append(data.stream);
163
+ data.stream = combinedStream;
164
+ data.id = utils_1.GuidService.create();
165
+ }
166
+ this.attachmentRepository.upload(data, options);
167
+ if (oldId)
168
+ await this.attachmentRepository.delete(data.id);
169
+ return data.id;
170
+ }
171
+ getAttachmentInfo(id) {
172
+ return this.attachmentRepository.getInfo(id);
173
+ }
174
+ getAttachmentStream(id, options) {
175
+ return this.attachmentRepository.getStream(id, options);
176
+ }
177
+ async deleteAttachment(id) {
178
+ return this.attachmentRepository.delete(id);
179
+ }
180
+ changes(criteria) {
181
+ return this.repository.changesByCriteria(criteria);
182
+ }
183
+ checkValidCreate(item, permissions) {
184
+ const array = (0, models_1.getInvalidFields)(item, 'create', permissions);
185
+ if (array.length) {
186
+ throw new domain_core_1.DomainValidationError('Required fields: ' + array.join(', '));
187
+ }
188
+ }
189
+ checkValidUpdate(item, permissions) {
190
+ const array = (0, models_1.getInvalidFields)(item, 'update', permissions);
191
+ if (array.length) {
192
+ throw new domain_core_1.DomainValidationError('Required fields: ' + array.join(', '));
193
+ }
194
+ }
195
+ checkValidUpdatePartial(item, permissions) {
196
+ if (!(0, models_1.isModel)(item))
197
+ return;
198
+ const keys = Object.keys(item);
199
+ const array = (0, models_1.getInvalidFields)(item, 'update', permissions)?.filter((invalidField) => keys.some((key) => key === invalidField));
200
+ if (array.length) {
201
+ throw new domain_core_1.DomainValidationError('Required fields: ' + array.join(', '));
202
+ }
203
+ }
204
+ };
205
+ exports.CrudService = CrudService;
206
+ tslib_1.__decorate([
207
+ (0, lodash_decorators_1.Memoize)(),
208
+ tslib_1.__metadata("design:type", Function),
209
+ tslib_1.__metadata("design:paramtypes", [String]),
210
+ tslib_1.__metadata("design:returntype", Promise)
211
+ ], CrudService.prototype, "getAttachmentInfo", null);
212
+ exports.CrudService = CrudService = CrudService_1 = tslib_1.__decorate([
213
+ (0, common_1.Injectable)(),
214
+ tslib_1.__metadata("design:paramtypes", [nestjs_1.PermissionService,
215
+ domain_core_1.IItemRepository,
216
+ domain_core_1.IAttachmentRepository])
217
+ ], CrudService);
218
+ //# sourceMappingURL=crud.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud.service.js","sourceRoot":"","sources":["../../../../../../../../../packages/crud/shell/app-services/src/lib/services/crud/crud.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SERVICES = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const crud_service_1 = require("./crud/crud.service");
6
+ tslib_1.__exportStar(require("./crud/crud.service"), exports);
7
+ exports.SERVICES = [crud_service_1.CrudService];
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/crud/shell/app-services/src/lib/services/index.ts"],"names":[],"mappings":";;;;AAAA,sDAAkD;AAElD,8DAAoC;AAEvB,QAAA,QAAQ,GAAG,CAAC,0BAAW,CAAC,CAAC"}
package/test-setup.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=test-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../../../../../packages/crud/shell/app-services/test-setup.ts"],"names":[],"mappings":""}
package/index.js DELETED
@@ -1,329 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __decorateClass = (decorators, target, key, kind) => {
4
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
- if (decorator = decorators[i])
7
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
- if (kind && result) __defProp(target, key, result);
9
- return result;
10
- };
11
-
12
- // packages/crud/shell/app-services/src/lib/services/crud/crud.service.ts
13
- import { Injectable, Logger } from "@nestjs/common";
14
- import * as CombinedStream from "combined-stream";
15
- import { Guid as Guid2 } from "guid-typescript";
16
- import { Memoize } from "lodash-decorators";
17
-
18
- // packages/shared/models/src/lib/symbols.ts
19
- var SYMBOL_MODEL = /* @__PURE__ */ Symbol.for("smartsoft:model");
20
- var SYMBOL_FIELD = /* @__PURE__ */ Symbol.for("smartsoft:field");
21
-
22
- // packages/shared/models/src/lib/decorators/model/model.decorator.ts
23
- import "reflect-metadata";
24
-
25
- // packages/shared/models/src/lib/decorators/field/field.decorator.ts
26
- import "reflect-metadata";
27
-
28
- // packages/shared/utils/src/lib/services/array/array.service.ts
29
- import * as _ from "lodash";
30
-
31
- // packages/shared/utils/src/lib/services/guid/guid.service.ts
32
- import { Guid } from "guid-typescript";
33
- var GuidService = class {
34
- /***
35
- * Create guid as string
36
- */
37
- static create() {
38
- return Guid.raw();
39
- }
40
- };
41
-
42
- // packages/shared/utils/src/lib/services/object/object.service.ts
43
- import { stringify } from "flatted";
44
-
45
- // packages/shared/utils/src/lib/services/password/password.service.ts
46
- import md5 from "md5";
47
- var PasswordService = class _PasswordService {
48
- /**
49
- * Hash password text
50
- * @param p {string} - text
51
- * @return - hashed text
52
- */
53
- static hash(p) {
54
- return Promise.resolve(md5(p));
55
- }
56
- /**
57
- * Compare password text with hashed text
58
- * @param p {string} - password text
59
- * @param h {string} - hashed text
60
- */
61
- static async compare(p, h) {
62
- const hp = await _PasswordService.hash(p);
63
- return hp === h;
64
- }
65
- };
66
-
67
- // packages/shared/models/src/lib/utils.ts
68
- function getModelFieldKeys(type) {
69
- if (!type["__fields"]) return [];
70
- return Object.keys(type["__fields"]);
71
- }
72
- function getModelFieldOptions(instance, fieldKey) {
73
- return Reflect.getMetadata(SYMBOL_FIELD, instance, fieldKey);
74
- }
75
- function getModelFieldsWithOptions(instance) {
76
- const keys = getModelFieldKeys(instance.constructor);
77
- return keys.map((item) => {
78
- return {
79
- key: item,
80
- options: getModelFieldOptions(instance, item)
81
- };
82
- });
83
- }
84
- function isModel(instance) {
85
- if (!instance || !instance.constructor) return false;
86
- return Reflect.hasMetadata(SYMBOL_MODEL, instance.constructor);
87
- }
88
- function getInvalidFields(instance, mode, permissions) {
89
- const result = [];
90
- getModelFieldsWithOptions(instance).forEach(({ key, options }) => {
91
- let required = options.required;
92
- if ((mode === "create" || mode === "update") && options[mode] && options[mode]?.constructor) {
93
- required = options[mode].required;
94
- if (required && permissions && options[mode].permissions) {
95
- required = options[mode]?.permissions?.some(
96
- (op) => permissions.some((p) => p === op)
97
- );
98
- }
99
- }
100
- if (required && (instance[key] === null || instance[key] === void 0 || instance[key] === ""))
101
- result.push(key);
102
- });
103
- return result;
104
- }
105
- function castModel(instance, mode, permissions) {
106
- if (!isModel(instance)) return;
107
- const fieldsWithOptions = getModelFieldsWithOptions(instance);
108
- Object.keys(instance).filter((key) => key !== "id").forEach((key) => {
109
- const fieldWidthOptions = fieldsWithOptions.find((f) => f.key === key);
110
- if (!fieldWidthOptions) {
111
- delete instance[key];
112
- return;
113
- }
114
- if ((mode === "create" || mode === "update") && (!fieldWidthOptions.options[mode] || permissions && fieldWidthOptions.options[mode].permissions && !fieldWidthOptions.options[mode]?.permissions?.some((op) => permissions.some((p) => op === p)))) {
115
- delete instance[key];
116
- return;
117
- } else if (mode !== "create" && mode !== "update" && (!fieldWidthOptions.options.customs || !fieldWidthOptions.options.customs.some((c) => c.mode === mode))) {
118
- delete instance[key];
119
- return;
120
- }
121
- });
122
- }
123
-
124
- // packages/shared/domain-core/src/lib/errors.ts
125
- var DomainValidationError = class _DomainValidationError extends Error {
126
- type = _DomainValidationError;
127
- constructor(msg) {
128
- super(msg);
129
- }
130
- };
131
-
132
- // packages/crud/shell/app-services/src/lib/services/crud/crud.service.ts
133
- var CrudService = class {
134
- constructor(permissionService, repository, attachmentRepository) {
135
- this.permissionService = permissionService;
136
- this.repository = repository;
137
- this.attachmentRepository = attachmentRepository;
138
- }
139
- permissionService;
140
- repository;
141
- attachmentRepository;
142
- _logger = new Logger(CrudService.name, { timestamp: true });
143
- async create(data, user) {
144
- data.id = Guid2.raw();
145
- try {
146
- this.permissionService.valid("create", user);
147
- castModel(data, "create", user.permissions);
148
- this.checkValidCreate(data, user.permissions);
149
- if (data["password"]) {
150
- data["password"] = await PasswordService.hash(data["password"]);
151
- }
152
- if (data["passwordConfirm"]) {
153
- delete data["passwordConfirm"];
154
- }
155
- await this.repository.create(data, user);
156
- return data.id;
157
- } catch (e) {
158
- this._logger.error(e);
159
- throw e;
160
- }
161
- }
162
- async createMany(data, user, options) {
163
- data.forEach((item) => {
164
- item.id = Guid2.raw();
165
- });
166
- try {
167
- this.permissionService.valid("create", user);
168
- data.forEach((item) => {
169
- castModel(item, "create", user.permissions);
170
- this.checkValidCreate(item, user.permissions);
171
- });
172
- if (options && options.mode === "replace") {
173
- await this.repository.clear(user);
174
- }
175
- for (let index = 0; index < data.length; index++) {
176
- const item = data[index];
177
- if (item["password"]) {
178
- item["password"] = await PasswordService.hash(item["password"]);
179
- }
180
- if (item["passwordConfirm"]) {
181
- delete item["passwordConfirm"];
182
- }
183
- }
184
- await this.repository.createMany(data, user);
185
- } catch (e) {
186
- this._logger.error(e);
187
- throw e;
188
- }
189
- return data;
190
- }
191
- async readById(id, user) {
192
- try {
193
- this.permissionService.valid("read", user);
194
- const result = await this.repository.getById(id);
195
- delete result["password"];
196
- return result;
197
- } catch (e) {
198
- this._logger.error(e);
199
- throw e;
200
- }
201
- }
202
- async read(criteria, options, user) {
203
- try {
204
- this.permissionService.valid("read", user);
205
- const result = await this.repository.getByCriteria(criteria, options);
206
- result.data.forEach((item) => delete item["password"]);
207
- return result;
208
- } catch (e) {
209
- this._logger.error(e);
210
- throw e;
211
- }
212
- }
213
- readBySpec(spec, options, user) {
214
- return this.read(spec.criteria, options, user);
215
- }
216
- async update(id, data, user) {
217
- try {
218
- data.id = id;
219
- this.permissionService.valid("update", user);
220
- castModel(data, "update", user.permissions);
221
- this.checkValidUpdate(data, user.permissions);
222
- if (data["password"]) {
223
- data["password"] = await PasswordService.hash(data["password"]);
224
- }
225
- if (data["passwordConfirm"]) {
226
- delete data["passwordConfirm"];
227
- }
228
- await this.repository.update(data, user);
229
- } catch (e) {
230
- this._logger.error(e);
231
- throw e;
232
- }
233
- }
234
- async updatePartial(id, data, user) {
235
- try {
236
- data.id = id;
237
- this.permissionService.valid("update", user);
238
- castModel(data, "update", user.permissions);
239
- this.checkValidUpdatePartial(data, user.permissions);
240
- if (data["password"]) {
241
- data["password"] = await PasswordService.hash(data["password"]);
242
- }
243
- if (data["passwordConfirm"]) {
244
- delete data["passwordConfirm"];
245
- }
246
- await this.repository.updatePartial(data, user);
247
- } catch (e) {
248
- this._logger.error(e);
249
- throw e;
250
- }
251
- }
252
- async delete(id, user) {
253
- try {
254
- this.permissionService.valid("delete", user);
255
- await this.repository.delete(id, user);
256
- } catch (e) {
257
- this._logger.error(e);
258
- throw e;
259
- }
260
- }
261
- async uploadAttachment(data, options) {
262
- if (!data.id) {
263
- data.id = GuidService.create();
264
- }
265
- let oldId = null;
266
- if (options?.start) {
267
- oldId = data.id;
268
- const stream = await this.attachmentRepository.getStream(data.id, {
269
- start: 0,
270
- end: options.start - 1
271
- });
272
- const combinedStream = CombinedStream.create();
273
- combinedStream.append(stream);
274
- combinedStream.append(data.stream);
275
- data.stream = combinedStream;
276
- data.id = GuidService.create();
277
- }
278
- this.attachmentRepository.upload(data, options);
279
- if (oldId) await this.attachmentRepository.delete(data.id);
280
- return data.id;
281
- }
282
- getAttachmentInfo(id) {
283
- return this.attachmentRepository.getInfo(id);
284
- }
285
- getAttachmentStream(id, options) {
286
- return this.attachmentRepository.getStream(id, options);
287
- }
288
- async deleteAttachment(id) {
289
- return this.attachmentRepository.delete(id);
290
- }
291
- changes(criteria) {
292
- return this.repository.changesByCriteria(criteria);
293
- }
294
- checkValidCreate(item, permissions) {
295
- const array = getInvalidFields(item, "create", permissions);
296
- if (array.length) {
297
- throw new DomainValidationError("Required fields: " + array.join(", "));
298
- }
299
- }
300
- checkValidUpdate(item, permissions) {
301
- const array = getInvalidFields(item, "update", permissions);
302
- if (array.length) {
303
- throw new DomainValidationError("Required fields: " + array.join(", "));
304
- }
305
- }
306
- checkValidUpdatePartial(item, permissions) {
307
- if (!isModel(item)) return;
308
- const keys = Object.keys(item);
309
- const array = getInvalidFields(item, "update", permissions)?.filter(
310
- (invalidField) => keys.some((key) => key === invalidField)
311
- );
312
- if (array.length) {
313
- throw new DomainValidationError("Required fields: " + array.join(", "));
314
- }
315
- }
316
- };
317
- __decorateClass([
318
- Memoize()
319
- ], CrudService.prototype, "getAttachmentInfo", 1);
320
- CrudService = __decorateClass([
321
- Injectable()
322
- ], CrudService);
323
-
324
- // packages/crud/shell/app-services/src/lib/services/index.ts
325
- var SERVICES = [CrudService];
326
- export {
327
- CrudService,
328
- SERVICES
329
- };