@klerick/json-api-nestjs-microorm 0.1.0-beta.1 → 0.1.0-beta.11

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.
Files changed (105) hide show
  1. package/CHANGELOG.md +99 -1
  2. package/README.md +47 -5
  3. package/package.json +23 -40
  4. package/src/index.d.ts +1 -0
  5. package/src/index.js +5 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/constants/index.d.ts +5 -0
  8. package/src/lib/constants/index.js +9 -0
  9. package/src/lib/constants/index.js.map +1 -0
  10. package/src/lib/factory/index.d.ts +21 -0
  11. package/src/lib/factory/index.js +116 -0
  12. package/src/lib/factory/index.js.map +1 -0
  13. package/src/lib/index.d.ts +2 -0
  14. package/src/lib/index.js +6 -0
  15. package/src/lib/index.js.map +1 -0
  16. package/src/lib/micro-orm-json-api.module.d.ts +7 -0
  17. package/src/lib/micro-orm-json-api.module.js +50 -0
  18. package/src/lib/micro-orm-json-api.module.js.map +1 -0
  19. package/src/lib/mock-utils/entities/addresses.d.ts +12 -0
  20. package/src/lib/mock-utils/entities/addresses.js +87 -0
  21. package/src/lib/mock-utils/entities/addresses.js.map +1 -0
  22. package/src/lib/mock-utils/entities/comments.d.ts +15 -0
  23. package/src/lib/mock-utils/entities/comments.js +72 -0
  24. package/src/lib/mock-utils/entities/comments.js.map +1 -0
  25. package/src/lib/mock-utils/entities/index.d.ts +13 -0
  26. package/src/lib/mock-utils/entities/index.js +18 -0
  27. package/src/lib/mock-utils/entities/index.js.map +1 -0
  28. package/src/lib/mock-utils/entities/notes.d.ts +10 -0
  29. package/src/lib/mock-utils/entities/notes.js +64 -0
  30. package/src/lib/mock-utils/entities/notes.js.map +1 -0
  31. package/src/lib/mock-utils/entities/roles.d.ts +12 -0
  32. package/src/lib/mock-utils/entities/roles.js +80 -0
  33. package/src/lib/mock-utils/entities/roles.js.map +1 -0
  34. package/src/lib/mock-utils/entities/user-groups.d.ts +7 -0
  35. package/src/lib/mock-utils/entities/user-groups.js +37 -0
  36. package/src/lib/mock-utils/entities/user-groups.js.map +1 -0
  37. package/src/lib/mock-utils/entities/users.d.ts +23 -0
  38. package/src/lib/mock-utils/entities/users.js +166 -0
  39. package/src/lib/mock-utils/entities/users.js.map +1 -0
  40. package/src/lib/mock-utils/index.d.ts +23 -0
  41. package/src/lib/mock-utils/index.js +97 -0
  42. package/src/lib/mock-utils/index.js.map +1 -0
  43. package/src/lib/mock-utils/utils/index.d.ts +3 -0
  44. package/src/lib/mock-utils/utils/index.js +7 -0
  45. package/src/lib/mock-utils/utils/index.js.map +1 -0
  46. package/src/lib/mock-utils/utils/init-db.d.ts +3 -0
  47. package/src/lib/mock-utils/utils/init-db.js +38 -0
  48. package/src/lib/mock-utils/utils/init-db.js.map +1 -0
  49. package/src/lib/mock-utils/utils/provider-entities.d.ts +10 -0
  50. package/src/lib/mock-utils/utils/provider-entities.js +22 -0
  51. package/src/lib/mock-utils/utils/provider-entities.js.map +1 -0
  52. package/src/lib/mock-utils/utils/pull-data.d.ts +9 -0
  53. package/src/lib/mock-utils/utils/pull-data.js +115 -0
  54. package/src/lib/mock-utils/utils/pull-data.js.map +1 -0
  55. package/src/lib/orm-helper/index.d.ts +12 -0
  56. package/src/lib/orm-helper/index.js +183 -0
  57. package/src/lib/orm-helper/index.js.map +1 -0
  58. package/src/lib/orm-methods/delete-one/delete-one.d.ts +2 -0
  59. package/src/lib/orm-methods/delete-one/delete-one.js +16 -0
  60. package/src/lib/orm-methods/delete-one/delete-one.js.map +1 -0
  61. package/src/lib/orm-methods/delete-relationship/delete-relationship.d.ts +4 -0
  62. package/src/lib/orm-methods/delete-relationship/delete-relationship.js +40 -0
  63. package/src/lib/orm-methods/delete-relationship/delete-relationship.js.map +1 -0
  64. package/src/lib/orm-methods/get-all/get-all.d.ts +6 -0
  65. package/src/lib/orm-methods/get-all/get-all.js +65 -0
  66. package/src/lib/orm-methods/get-all/get-all.js.map +1 -0
  67. package/src/lib/orm-methods/get-all/get-query-for-count.d.ts +5 -0
  68. package/src/lib/orm-methods/get-all/get-query-for-count.js +43 -0
  69. package/src/lib/orm-methods/get-all/get-query-for-count.js.map +1 -0
  70. package/src/lib/orm-methods/get-one/get-one.d.ts +3 -0
  71. package/src/lib/orm-methods/get-one/get-one.js +26 -0
  72. package/src/lib/orm-methods/get-one/get-one.js.map +1 -0
  73. package/src/lib/orm-methods/get-relationship/get-relationship.d.ts +3 -0
  74. package/src/lib/orm-methods/get-relationship/get-relationship.js +24 -0
  75. package/src/lib/orm-methods/get-relationship/get-relationship.js.map +1 -0
  76. package/src/lib/orm-methods/index.d.ts +9 -0
  77. package/src/lib/orm-methods/index.js +13 -0
  78. package/src/lib/orm-methods/index.js.map +1 -0
  79. package/src/lib/orm-methods/patch-one/patch-one.d.ts +3 -0
  80. package/src/lib/orm-methods/patch-one/patch-one.js +40 -0
  81. package/src/lib/orm-methods/patch-one/patch-one.js.map +1 -0
  82. package/src/lib/orm-methods/patch-relationship/patch-relationship.d.ts +4 -0
  83. package/src/lib/orm-methods/patch-relationship/patch-relationship.js +23 -0
  84. package/src/lib/orm-methods/patch-relationship/patch-relationship.js.map +1 -0
  85. package/src/lib/orm-methods/post-one/post-one.d.ts +3 -0
  86. package/src/lib/orm-methods/post-one/post-one.js +16 -0
  87. package/src/lib/orm-methods/post-one/post-one.js.map +1 -0
  88. package/src/lib/orm-methods/post-relationship/post-relationship.d.ts +4 -0
  89. package/src/lib/orm-methods/post-relationship/post-relationship.js +21 -0
  90. package/src/lib/orm-methods/post-relationship/post-relationship.js.map +1 -0
  91. package/src/lib/service/index.d.ts +3 -0
  92. package/src/lib/service/index.js +7 -0
  93. package/src/lib/service/index.js.map +1 -0
  94. package/src/lib/service/micro-orm-util.service.d.ts +51 -0
  95. package/src/lib/service/micro-orm-util.service.js +554 -0
  96. package/src/lib/service/micro-orm-util.service.js.map +1 -0
  97. package/src/lib/service/microorm-service.d.ts +21 -0
  98. package/src/lib/service/microorm-service.js +121 -0
  99. package/src/lib/service/microorm-service.js.map +1 -0
  100. package/src/lib/service/mikro-orm-format.error.service.d.ts +11 -0
  101. package/src/lib/service/mikro-orm-format.error.service.js +95 -0
  102. package/src/lib/service/mikro-orm-format.error.service.js.map +1 -0
  103. package/src/lib/type.d.ts +3 -0
  104. package/src/lib/type.js +3 -0
  105. package/src/lib/type.js.map +1 -0
@@ -0,0 +1,554 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MicroOrmUtilService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const common_1 = require("@nestjs/common");
6
+ const core_1 = require("@mikro-orm/core");
7
+ const knex_1 = require("@mikro-orm/knex");
8
+ const json_api_nestjs_1 = require("@klerick/json-api-nestjs");
9
+ const json_api_nestjs_shared_1 = require("@klerick/json-api-nestjs-shared");
10
+ const change_case_commonjs_1 = require("change-case-commonjs");
11
+ const constants_1 = require("../constants");
12
+ function isRelationField(relationField, field) {
13
+ if (relationField.includes(field))
14
+ return;
15
+ const error = {
16
+ code: 'unrecognized_keys',
17
+ path: ['data', 'relationships'],
18
+ message: `Resource for relation '${field.toString()}' does not exist`,
19
+ keys: [field],
20
+ };
21
+ throw new common_1.BadRequestException([error]);
22
+ }
23
+ function isCollectionField(targetInstance) {
24
+ return targetInstance instanceof core_1.Collection;
25
+ }
26
+ const getErrorObject = (props, message) => ({
27
+ code: 'invalid_arguments',
28
+ path: ['data', 'relationships'],
29
+ message,
30
+ });
31
+ (0, common_1.Injectable)();
32
+ class MicroOrmUtilService {
33
+ entityManager;
34
+ entityRepository;
35
+ entity;
36
+ _relationsName;
37
+ _relationMap = new Map();
38
+ _relationPropsMap = new Map();
39
+ get relationsName() {
40
+ if (!this._relationsName) {
41
+ this._relationsName = this.metadata.relations.map((r) => r.name);
42
+ }
43
+ return this._relationsName;
44
+ }
45
+ getRelationProps(entity) {
46
+ const props = this._relationPropsMap.get(entity);
47
+ if (props) {
48
+ return props;
49
+ }
50
+ const relMetaData = this.entityManager.getMetadata(entity);
51
+ const relation = relMetaData.relations.map((i) => i.name);
52
+ const newProps = relMetaData.props
53
+ .filter((r) => !relation.includes(r.name))
54
+ .map((r) => r.name);
55
+ this._relationPropsMap.set(entity, newProps);
56
+ return newProps;
57
+ }
58
+ getRelation(name) {
59
+ let relation = this._relationMap.get(name);
60
+ if (!relation) {
61
+ relation = this.metadata.relations.find((r) => r.name === name);
62
+ if (!relation) {
63
+ throw new Error(`Relation ${name} not found in ${this.metadata.name}`);
64
+ }
65
+ this._relationMap.set(name, relation);
66
+ }
67
+ return relation;
68
+ }
69
+ get currentAlias() {
70
+ return this.entityRepository.getEntityName();
71
+ }
72
+ get metadata() {
73
+ return this.entityManager.getMetadata().get(this.entity);
74
+ }
75
+ get currentPrimaryColumn() {
76
+ return this.metadata.getPrimaryProp().name;
77
+ }
78
+ get defaultOrder() {
79
+ return {
80
+ [this.currentPrimaryColumn]: json_api_nestjs_1.ASC,
81
+ };
82
+ }
83
+ getAliasForEntity(entity) {
84
+ return this.entityManager.getRepository(entity).getEntityName();
85
+ }
86
+ getAliasForPivotTable(entity, relName) {
87
+ if (!relName) {
88
+ relName = entity;
89
+ entity = this.entity;
90
+ }
91
+ else {
92
+ entity = entity;
93
+ }
94
+ const propsRelation = this.entityManager
95
+ .getMetadata()
96
+ .get(entity)
97
+ .relations.find((r) => r.name.toString() === relName.toString());
98
+ if (!propsRelation)
99
+ throw new Error(`${relName.toString()} relation not found`);
100
+ if (propsRelation.kind !== core_1.ReferenceKind.MANY_TO_MANY)
101
+ throw new Error('Many to many relation expected');
102
+ return this.entityManager
103
+ .getRepository(propsRelation.pivotEntity)
104
+ .getEntityName();
105
+ }
106
+ queryBuilder(...arg) {
107
+ let [entity, alias] = arg;
108
+ if (entity && !alias) {
109
+ if (typeof entity === 'string') {
110
+ alias = entity;
111
+ entity = this.entity;
112
+ }
113
+ else {
114
+ alias = this.getAliasForEntity(entity);
115
+ }
116
+ }
117
+ if (!entity) {
118
+ alias = this.currentAlias;
119
+ entity = this.entity;
120
+ }
121
+ if (!entity || !alias) {
122
+ throw new Error('entity or alias not found');
123
+ }
124
+ return this.entityManager.createQueryBuilder(entity, alias);
125
+ }
126
+ getFilterExpressionForTarget(query) {
127
+ const result = [];
128
+ const filterTarget = this.getFilterObject(query, 'target');
129
+ const { sort, include } = query;
130
+ if (!filterTarget)
131
+ return result;
132
+ for (const [fieldName, filter] of json_api_nestjs_shared_1.ObjectTyped.entries(filterTarget)) {
133
+ const tmpField = fieldName;
134
+ if (filter === undefined)
135
+ continue;
136
+ const filterObject = {
137
+ [tmpField]: {},
138
+ };
139
+ let subQueryExpression;
140
+ for (const entries of json_api_nestjs_shared_1.ObjectTyped.entries(filter)) {
141
+ const [operand, valueInput] = entries;
142
+ const value = operand === json_api_nestjs_shared_1.FilterOperand.like ? `%${valueInput}%` : valueInput;
143
+ if (!this.relationsName.includes(tmpField)) {
144
+ const operandForMiroOrmResult = this.extractedResultOperand(operand);
145
+ filterObject[tmpField.toString()][operandForMiroOrmResult] = value;
146
+ continue;
147
+ }
148
+ const relation = this.getRelation(tmpField);
149
+ switch (relation.kind) {
150
+ case core_1.ReferenceKind.MANY_TO_MANY:
151
+ case core_1.ReferenceKind.ONE_TO_MANY: {
152
+ if (sort && tmpField in sort) {
153
+ filterObject[tmpField.toString()]['$exists'] =
154
+ operand === json_api_nestjs_shared_1.FilterOperand.ne;
155
+ break;
156
+ }
157
+ if (include && include.includes(tmpField)) {
158
+ filterObject[tmpField.toString()]['$exists'] =
159
+ operand === json_api_nestjs_shared_1.FilterOperand.ne;
160
+ break;
161
+ }
162
+ const subQuery = this.getSubQueryForRelation(tmpField).getFormattedQuery();
163
+ const type = operand === json_api_nestjs_shared_1.FilterOperand.ne ? 'exists' : 'not exists';
164
+ const resultQuery = `${type} (${subQuery})`;
165
+ subQueryExpression = (0, core_1.raw)(resultQuery);
166
+ break;
167
+ }
168
+ default:
169
+ filterObject[tmpField.toString()]['$exists'] =
170
+ operand === json_api_nestjs_shared_1.FilterOperand.ne;
171
+ }
172
+ }
173
+ result.push(subQueryExpression ? subQueryExpression : filterObject);
174
+ }
175
+ return result;
176
+ }
177
+ getConditionalForJoin(query, key) {
178
+ const filterRelation = this.getFilterObject(query, 'relation');
179
+ if (!filterRelation)
180
+ return {};
181
+ if (!(key in filterRelation))
182
+ return {};
183
+ for (const [key, reletionConditional] of json_api_nestjs_shared_1.ObjectTyped.entries(filterRelation)) {
184
+ if (key !== key)
185
+ continue;
186
+ if (!reletionConditional)
187
+ continue;
188
+ for (const [field, conditional] of json_api_nestjs_shared_1.ObjectTyped.entries(reletionConditional)) {
189
+ if (!conditional)
190
+ continue;
191
+ return Object.entries(conditional).reduce((acum, [operand, value]) => {
192
+ acum[field.toString()] = {
193
+ ...(acum[field.toString()] || {}),
194
+ [this.extractedResultOperand(operand)]: value,
195
+ };
196
+ return acum;
197
+ }, {});
198
+ }
199
+ }
200
+ return {};
201
+ }
202
+ extractedResultOperand(operand) {
203
+ if (operand === json_api_nestjs_shared_1.FilterOperand.like &&
204
+ (this.entityManager.getDriver().constructor.name === 'PostgreSqlDriver' ||
205
+ this.entityManager.getDriver().constructor.name === 'PGliteDriver')) {
206
+ return '$ilike';
207
+ }
208
+ return operand === 'regexp'
209
+ ? '$re'
210
+ : operand === 'some'
211
+ ? '$overlap'
212
+ : ('$' + operand);
213
+ }
214
+ getFilterExpressionForRelation(query) {
215
+ const result = [];
216
+ const filterRelation = this.getFilterObject(query, 'relation');
217
+ const sort = query.sort;
218
+ if (!filterRelation)
219
+ return result;
220
+ for (const [relationField, propsFilter] of json_api_nestjs_shared_1.ObjectTyped.entries(filterRelation)) {
221
+ const fieldName = relationField;
222
+ const relationProps = this.getRelation(fieldName);
223
+ if (!propsFilter)
224
+ continue;
225
+ if (!this.relationsName.includes(fieldName))
226
+ continue;
227
+ const filterObject = {
228
+ [relationField]: {},
229
+ };
230
+ let subQueryExpression;
231
+ for (const [relationFieldProps, filter] of json_api_nestjs_shared_1.ObjectTyped.entries(propsFilter)) {
232
+ const fieldProps = relationFieldProps;
233
+ if (!filter)
234
+ continue;
235
+ for (const entries of json_api_nestjs_shared_1.ObjectTyped.entries(filter)) {
236
+ const [operand, value] = entries;
237
+ switch (relationProps.kind) {
238
+ case core_1.ReferenceKind.MANY_TO_MANY:
239
+ case core_1.ReferenceKind.ONE_TO_MANY:
240
+ case core_1.ReferenceKind.MANY_TO_ONE:
241
+ {
242
+ if (sort && relationField in sort) {
243
+ filterObject[fieldName][fieldProps] = filterObject[fieldName][fieldProps] = filterObject[fieldName][fieldProps] || {};
244
+ filterObject[fieldName][fieldProps][this.extractedResultOperand(operand)] = value;
245
+ }
246
+ else {
247
+ if (!subQueryExpression) {
248
+ subQueryExpression = this.getSubQueryForRelation(fieldName);
249
+ }
250
+ const expression = relationProps.kind === core_1.ReferenceKind.MANY_TO_MANY
251
+ ? {
252
+ [this.getInverseFieldForManyToMany(fieldName)]: {
253
+ [fieldProps]: {
254
+ [this.extractedResultOperand(operand)]: value,
255
+ },
256
+ },
257
+ }
258
+ : {
259
+ [fieldProps]: {
260
+ [this.extractedResultOperand(operand)]: value,
261
+ },
262
+ };
263
+ subQueryExpression.where(expression, '$and');
264
+ }
265
+ }
266
+ break;
267
+ default:
268
+ filterObject[fieldName][fieldProps] =
269
+ filterObject[fieldName][fieldProps] || {};
270
+ filterObject[fieldName][fieldProps][this.extractedResultOperand(operand)] = value;
271
+ }
272
+ }
273
+ }
274
+ if (subQueryExpression) {
275
+ const resultQuery = `exists (${subQueryExpression.getFormattedQuery()})`;
276
+ result.push((0, core_1.raw)(resultQuery));
277
+ subQueryExpression = undefined;
278
+ }
279
+ else {
280
+ result.push(filterObject);
281
+ }
282
+ }
283
+ return result;
284
+ }
285
+ getKnex() {
286
+ return this.entityManager.getKnex();
287
+ }
288
+ prePareQueryBuilder(queryBuilder, query) {
289
+ const { fields, include } = query;
290
+ const relationFields = {};
291
+ if (fields) {
292
+ const { target, ...relations } = fields;
293
+ Object.assign(relationFields, relations);
294
+ if (target) {
295
+ if (!target.includes(this.currentPrimaryColumn)) {
296
+ target.unshift(this.currentPrimaryColumn);
297
+ }
298
+ queryBuilder.select(target);
299
+ }
300
+ }
301
+ const resultInclude = new Set([
302
+ ...[...(include || []), ...json_api_nestjs_shared_1.ObjectTyped.keys(relationFields)],
303
+ ]);
304
+ for (const itemFromloop of resultInclude) {
305
+ const item = itemFromloop;
306
+ const relationProps = this.getRelation(item);
307
+ const relationEntity = relationProps.entity();
308
+ const relationAlias = this.getAliasForEntity(relationEntity);
309
+ const mainAlias = this.currentAlias;
310
+ const condition = this.getConditionalForJoin(query, item);
311
+ let selectJoin = this.getRelationProps(relationEntity);
312
+ if (item in relationFields) {
313
+ const tmpSet = new Set([
314
+ ...relationFields[item],
315
+ this.getPrimaryNameFor(item),
316
+ ]);
317
+ selectJoin = [...tmpSet];
318
+ }
319
+ queryBuilder.leftJoinAndSelect(`${mainAlias}.${item}`, `${relationAlias}__${item}`, condition, selectJoin);
320
+ }
321
+ return queryBuilder;
322
+ }
323
+ getPrimaryNameFor(rel) {
324
+ const relationEntity = this.getRelation(rel).entity();
325
+ return this.entityManager.getMetadata().get(relationEntity).getPrimaryProp()
326
+ .name;
327
+ }
328
+ getFilterObject(query, filterType) {
329
+ const { filter } = query;
330
+ if (!filter)
331
+ return null;
332
+ return Reflect.get(filter, filterType);
333
+ }
334
+ getSubQueryForRelation(propsName) {
335
+ const relation = this.getRelation(propsName);
336
+ let pivotTableName;
337
+ let filedCheck;
338
+ let expressionColumnName = this.currentPrimaryColumn;
339
+ if (relation.kind === core_1.ReferenceKind.MANY_TO_MANY) {
340
+ pivotTableName = this.getAliasForPivotTable(propsName);
341
+ filedCheck = relation.joinColumns.at(0);
342
+ }
343
+ else if (relation.kind === core_1.ReferenceKind.ONE_TO_MANY) {
344
+ pivotTableName = this.getAliasForEntity(relation.entity());
345
+ filedCheck = relation.mappedBy;
346
+ }
347
+ else {
348
+ expressionColumnName = relation.joinColumns.at(0);
349
+ pivotTableName = this.getAliasForEntity(relation.entity());
350
+ filedCheck = relation.referencedColumnNames.at(0);
351
+ }
352
+ if (!filedCheck)
353
+ throw new Error('filedCheck not found');
354
+ if (!expressionColumnName)
355
+ throw new Error('expressionColumnName not found');
356
+ return this.entityManager
357
+ .createQueryBuilder(pivotTableName, pivotTableName)
358
+ .select((0, core_1.raw)('1'))
359
+ .from(pivotTableName)
360
+ .where({
361
+ [filedCheck]: this.entityManager
362
+ .getKnex()
363
+ .ref(`${this.currentAlias}.${expressionColumnName}`),
364
+ });
365
+ }
366
+ getInverseFieldForManyToMany(propsName) {
367
+ const relation = this.getRelation(propsName);
368
+ const pivotTableName = this.getAliasForPivotTable(propsName);
369
+ const pivotMetaData = this.entityManager.getMetadata().get(pivotTableName);
370
+ const props = pivotMetaData.props.find((prop) => prop.targetMeta &&
371
+ prop.targetMeta.properties[propsName] &&
372
+ prop.targetMeta.properties[propsName].entity() === relation.entity());
373
+ if (!props)
374
+ throw new Error(`ManyToMany relation ${propsName} not found in ${pivotTableName}`);
375
+ return props.inversedBy || props.mappedBy;
376
+ }
377
+ createEntity(params) {
378
+ return this.entityManager.create(this.entity, params, {
379
+ partial: true,
380
+ persist: false,
381
+ });
382
+ }
383
+ async *asyncIterateFindRelationships(relationships) {
384
+ for (const entries of json_api_nestjs_shared_1.ObjectTyped.entries(relationships)) {
385
+ const [props, dataItem] = entries;
386
+ isRelationField(this.relationsName, props);
387
+ const propsKey = props;
388
+ if (dataItem === undefined)
389
+ continue;
390
+ const data = Reflect.get(dataItem, 'data');
391
+ if (data === undefined)
392
+ continue;
393
+ if (data === null) {
394
+ yield { [props]: null };
395
+ continue;
396
+ }
397
+ const isArray = Array.isArray(data);
398
+ if (isArray && data.length === 0) {
399
+ yield { [props]: [] };
400
+ continue;
401
+ }
402
+ const condition = isArray
403
+ ? {
404
+ $in: data.map((i) => (i || {}).id),
405
+ }
406
+ : {
407
+ $eq: data['id'],
408
+ };
409
+ const relationProps = this.metadata.properties[propsKey];
410
+ const relationEntity = relationProps.entity();
411
+ const metadata = this.entityManager.getMetadata().get(relationEntity);
412
+ const primaryName = metadata.getPrimaryProp().name;
413
+ const queryBuilder = this.queryBuilder(relationEntity, this.getAliasForEntity(relationEntity))
414
+ .select([primaryName])
415
+ .where({
416
+ [primaryName]: condition,
417
+ });
418
+ let result;
419
+ let error = undefined;
420
+ if (isArray) {
421
+ const tmpResult = await queryBuilder.getResult();
422
+ if (tmpResult.length === 0 || data.length !== tmpResult.length) {
423
+ const msg = `Resource '${metadata.className}' with ids '${data
424
+ .map((i) => (i || {})['id'])
425
+ .filter((i) => !tmpResult.find((r) => r[primaryName] == i))
426
+ .join(',')}' does not exist`;
427
+ error = new common_1.BadRequestException([getErrorObject(props, msg)]);
428
+ }
429
+ result = tmpResult;
430
+ }
431
+ else {
432
+ const tmpResult = await queryBuilder.getSingleResult();
433
+ if (!tmpResult)
434
+ error = new common_1.BadRequestException([
435
+ getErrorObject(props, `Resource '${metadata.className}' with id '${data.id}' does not exist`),
436
+ ]);
437
+ result = tmpResult;
438
+ }
439
+ if (error)
440
+ throw error;
441
+ yield { [props]: result };
442
+ }
443
+ }
444
+ async saveEntity(targetInstance, relationships) {
445
+ if (relationships) {
446
+ for await (const item of this.asyncIterateFindRelationships(relationships)) {
447
+ const itemProps = json_api_nestjs_shared_1.ObjectTyped.entries(item).at(0);
448
+ if (!itemProps)
449
+ continue;
450
+ const [nameProps, data] = itemProps;
451
+ if (isCollectionField(targetInstance[nameProps])) {
452
+ targetInstance[nameProps].removeAll();
453
+ targetInstance[nameProps].add(data);
454
+ }
455
+ else {
456
+ Object.assign(targetInstance, item);
457
+ }
458
+ }
459
+ }
460
+ await this.entityManager.persistAndFlush(targetInstance);
461
+ return targetInstance;
462
+ }
463
+ async validateRelationInputData(rel, inputData) {
464
+ const property = Reflect.get(this.metadata.properties, rel);
465
+ const isArray = Array.isArray(inputData);
466
+ if ([core_1.ReferenceKind.ONE_TO_MANY, core_1.ReferenceKind.MANY_TO_MANY].includes(property.kind) &&
467
+ !isArray) {
468
+ const error = {
469
+ code: 'invalid_arguments',
470
+ path: ['data'],
471
+ message: 'Body data should be array',
472
+ };
473
+ throw new common_1.UnprocessableEntityException([error]);
474
+ }
475
+ if ([core_1.ReferenceKind.ONE_TO_ONE, core_1.ReferenceKind.MANY_TO_ONE].includes(property.kind) &&
476
+ isArray) {
477
+ const error = {
478
+ code: 'invalid_arguments',
479
+ path: ['data'],
480
+ message: 'Body data should be object',
481
+ };
482
+ throw new common_1.UnprocessableEntityException([error]);
483
+ }
484
+ if (inputData === null) {
485
+ const result = null;
486
+ return result;
487
+ }
488
+ if (isArray && inputData.length === 0) {
489
+ const result = [];
490
+ return result;
491
+ }
492
+ const prepareData = (isArray ? inputData : [inputData]);
493
+ const errors = [];
494
+ let i = 0;
495
+ const relationEntity = this.getRelation(rel).entity();
496
+ const typeName = (0, change_case_commonjs_1.kebabCase)(this.entityManager.getMetadata().get(relationEntity).className);
497
+ for (const prepareItem of prepareData) {
498
+ if (prepareItem.type !== typeName) {
499
+ const path = isArray ? ['data', i.toString()] : ['data'];
500
+ errors.push({
501
+ code: 'invalid_arguments',
502
+ path: path,
503
+ message: `Type should be equal to type of relName: "${rel.toString()}". Type of ${rel.toString()} is "${typeName}" but receive - "${prepareItem.type}"`,
504
+ });
505
+ }
506
+ i++;
507
+ }
508
+ if (errors.length) {
509
+ throw new common_1.UnprocessableEntityException(errors);
510
+ }
511
+ const checkResult = await this.queryBuilder(relationEntity)
512
+ .where({
513
+ [this.getPrimaryNameFor(rel)]: {
514
+ $in: prepareData.map((i) => i.id),
515
+ },
516
+ })
517
+ .getResult();
518
+ if (checkResult.length === prepareData.length) {
519
+ return (isArray ? inputData.map((i) => i.id) : inputData.id);
520
+ }
521
+ const resulDataMap = checkResult.reduce((acum, item) => {
522
+ const idValue = (item[this.getPrimaryNameFor(rel)] || 'empty').toString();
523
+ acum[idValue] = true;
524
+ return acum;
525
+ }, {});
526
+ i = 0;
527
+ for (const item of prepareData) {
528
+ if (!resulDataMap[item.id]) {
529
+ const path = isArray ? ['data', i.toString(), 'id'] : ['data', 'id'];
530
+ errors.push({
531
+ code: 'invalid_arguments',
532
+ path: path,
533
+ message: `Not exist item "${item.id}" in relation "${rel.toString()}"`,
534
+ });
535
+ }
536
+ i++;
537
+ }
538
+ throw new common_1.NotFoundException(errors);
539
+ }
540
+ }
541
+ exports.MicroOrmUtilService = MicroOrmUtilService;
542
+ tslib_1.__decorate([
543
+ (0, common_1.Inject)(constants_1.CURRENT_ENTITY_MANAGER_TOKEN),
544
+ tslib_1.__metadata("design:type", knex_1.SqlEntityManager)
545
+ ], MicroOrmUtilService.prototype, "entityManager", void 0);
546
+ tslib_1.__decorate([
547
+ (0, common_1.Inject)(constants_1.CURRENT_ENTITY_REPOSITORY),
548
+ tslib_1.__metadata("design:type", core_1.EntityRepository)
549
+ ], MicroOrmUtilService.prototype, "entityRepository", void 0);
550
+ tslib_1.__decorate([
551
+ (0, common_1.Inject)(json_api_nestjs_1.CURRENT_ENTITY),
552
+ tslib_1.__metadata("design:type", Object)
553
+ ], MicroOrmUtilService.prototype, "entity", void 0);
554
+ //# sourceMappingURL=micro-orm-util.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro-orm-util.service.js","sourceRoot":"","sources":["../../../../../../../libs/json-api/json-api-nestjs-microorm/src/lib/service/micro-orm-util.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { ResourceObject, ResourceObjectRelationships, RelationKeys } from '@klerick/json-api-nestjs-shared';
2
+ import { JsonApiTransformerService, OrmService, PatchData, PatchRelationshipData, PostData, PostRelationshipData, Query, QueryOne } from '@klerick/json-api-nestjs';
3
+ import { MicroOrmUtilService } from './micro-orm-util.service';
4
+ export declare class MicroOrmService<E extends object, IdKey extends string = 'id'> implements OrmService<E, IdKey> {
5
+ microOrmUtilService: MicroOrmUtilService<E, IdKey>;
6
+ jsonApiTransformerService: JsonApiTransformerService<E, IdKey>;
7
+ getAll(query: Query<E, IdKey>): Promise<ResourceObject<E, 'array', null, IdKey>>;
8
+ getAll(query: Query<E, IdKey>, transformData?: boolean, additionalQueryParams?: Record<string, unknown>): Promise<ResourceObject<E, 'array', null, IdKey>>;
9
+ getOne(id: number | string, query: QueryOne<E, IdKey>): Promise<ResourceObject<E, 'object', null, IdKey>>;
10
+ getOne(id: number | string, query: QueryOne<E, IdKey>, transformData?: boolean, additionalQueryParams?: Record<string, unknown>): Promise<ResourceObject<E, 'object', null, IdKey> | E>;
11
+ deleteOne(id: number | string): Promise<void>;
12
+ postOne(inputData: PostData<E, IdKey>): Promise<ResourceObject<E, 'object', null, IdKey>>;
13
+ patchOne(id: number | string, inputData: PatchData<E, IdKey>): Promise<ResourceObject<E, 'object', null, IdKey>>;
14
+ getRelationship<Rel extends RelationKeys<E, IdKey>>(id: number | string, rel: Rel): Promise<ResourceObjectRelationships<E, IdKey, Rel>>;
15
+ deleteRelationship<Rel extends RelationKeys<E, IdKey>>(id: number | string, rel: Rel, input: PostRelationshipData): Promise<void>;
16
+ postRelationship<Rel extends RelationKeys<E, IdKey>>(id: number | string, rel: Rel, input: PostRelationshipData): Promise<ResourceObjectRelationships<E, IdKey, Rel>>;
17
+ patchRelationship<Rel extends RelationKeys<E, IdKey>>(id: number | string, rel: Rel, input: PatchRelationshipData): Promise<ResourceObjectRelationships<E, IdKey, Rel>>;
18
+ loadRelations(relationships: PatchData<E, IdKey>['relationships'] | PostData<E, IdKey>['relationships']): Promise<{
19
+ [K in RelationKeys<E>]: E[K];
20
+ }>;
21
+ }