@twin.org/entity-storage-service 0.0.1-next.7 → 0.0.1-next.9
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/index.cjs +92 -83
- package/dist/esm/index.mjs +93 -84
- package/docs/changelog.md +1 -1
- package/docs/open-api/spec.json +1 -1
- package/package.json +2 -2
package/dist/cjs/index.cjs
CHANGED
@@ -256,6 +256,11 @@ class EntityStorageService {
|
|
256
256
|
* @internal
|
257
257
|
*/
|
258
258
|
_includeUserIdentity;
|
259
|
+
/**
|
260
|
+
* The primary key for the entity.
|
261
|
+
* @internal
|
262
|
+
*/
|
263
|
+
_primaryKey;
|
259
264
|
/**
|
260
265
|
* Create a new instance of EntityStorageService.
|
261
266
|
* @param options The dependencies for the entity storage service.
|
@@ -267,6 +272,7 @@ class EntityStorageService {
|
|
267
272
|
this._entityStorage = entityStorageModels.EntityStorageConnectorFactory.get(options.entityStorageType);
|
268
273
|
this._includeNodeIdentity = options.config?.includeNodeIdentity ?? true;
|
269
274
|
this._includeUserIdentity = options.config?.includeUserIdentity ?? true;
|
275
|
+
this._primaryKey = entity.EntitySchemaHelper.getPrimaryKey(this._entityStorage.getSchema());
|
270
276
|
}
|
271
277
|
/**
|
272
278
|
* Set an entity.
|
@@ -277,15 +283,24 @@ class EntityStorageService {
|
|
277
283
|
*/
|
278
284
|
async set(entity, userIdentity, nodeIdentity) {
|
279
285
|
core.Guards.object(this.CLASS_NAME, "entity", entity);
|
286
|
+
const conditions = [];
|
280
287
|
if (this._includeUserIdentity) {
|
281
288
|
core.Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
289
|
+
conditions.push({
|
290
|
+
property: "userIdentity",
|
291
|
+
value: userIdentity
|
292
|
+
});
|
282
293
|
core.ObjectHelper.propertySet(entity, "userIdentity", userIdentity);
|
283
294
|
}
|
284
295
|
if (this._includeNodeIdentity) {
|
285
296
|
core.Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
297
|
+
conditions.push({
|
298
|
+
property: "nodeIdentity",
|
299
|
+
value: nodeIdentity
|
300
|
+
});
|
286
301
|
core.ObjectHelper.propertySet(entity, "nodeIdentity", nodeIdentity);
|
287
302
|
}
|
288
|
-
return this._entityStorage.set(entity);
|
303
|
+
return this._entityStorage.set(entity, conditions);
|
289
304
|
}
|
290
305
|
/**
|
291
306
|
* Get an entity.
|
@@ -297,50 +312,7 @@ class EntityStorageService {
|
|
297
312
|
*/
|
298
313
|
async get(id, secondaryIndex, userIdentity, nodeIdentity) {
|
299
314
|
core.Guards.stringValue(this.CLASS_NAME, "id", id);
|
300
|
-
|
301
|
-
if (this._includeUserIdentity) {
|
302
|
-
core.Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
303
|
-
conditions.push({
|
304
|
-
property: "userIdentity",
|
305
|
-
comparison: entity.ComparisonOperator.Equals,
|
306
|
-
value: userIdentity
|
307
|
-
});
|
308
|
-
}
|
309
|
-
if (this._includeNodeIdentity) {
|
310
|
-
core.Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
311
|
-
conditions.push({
|
312
|
-
property: "nodeIdentity",
|
313
|
-
comparison: entity.ComparisonOperator.Equals,
|
314
|
-
value: nodeIdentity
|
315
|
-
});
|
316
|
-
}
|
317
|
-
if (core.Is.stringValue(secondaryIndex)) {
|
318
|
-
conditions.push({
|
319
|
-
property: secondaryIndex,
|
320
|
-
comparison: entity.ComparisonOperator.Equals,
|
321
|
-
value: id
|
322
|
-
});
|
323
|
-
}
|
324
|
-
if (conditions.length === 0) {
|
325
|
-
const entity = await this._entityStorage.get(id, secondaryIndex);
|
326
|
-
if (core.Is.empty(entity)) {
|
327
|
-
throw new core.NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
328
|
-
}
|
329
|
-
core.ObjectHelper.propertyDelete(entity, "nodeIdentity");
|
330
|
-
core.ObjectHelper.propertyDelete(entity, "userIdentity");
|
331
|
-
return entity;
|
332
|
-
}
|
333
|
-
const results = await this._entityStorage.query({
|
334
|
-
conditions,
|
335
|
-
logicalOperator: entity.LogicalOperator.And
|
336
|
-
}, undefined, undefined, undefined, 1);
|
337
|
-
const entity$1 = results.entities[0];
|
338
|
-
if (core.Is.empty(entity$1)) {
|
339
|
-
throw new core.NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
340
|
-
}
|
341
|
-
core.ObjectHelper.propertyDelete(entity$1, "nodeIdentity");
|
342
|
-
core.ObjectHelper.propertyDelete(entity$1, "userIdentity");
|
343
|
-
return entity$1;
|
315
|
+
return this.internalGet(id, secondaryIndex, userIdentity, nodeIdentity);
|
344
316
|
}
|
345
317
|
/**
|
346
318
|
* Remove the entity.
|
@@ -356,7 +328,6 @@ class EntityStorageService {
|
|
356
328
|
core.Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
357
329
|
conditions.push({
|
358
330
|
property: "userIdentity",
|
359
|
-
comparison: entity.ComparisonOperator.Equals,
|
360
331
|
value: userIdentity
|
361
332
|
});
|
362
333
|
}
|
@@ -364,32 +335,10 @@ class EntityStorageService {
|
|
364
335
|
core.Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
365
336
|
conditions.push({
|
366
337
|
property: "nodeIdentity",
|
367
|
-
comparison: entity.ComparisonOperator.Equals,
|
368
338
|
value: nodeIdentity
|
369
339
|
});
|
370
340
|
}
|
371
|
-
|
372
|
-
const entity = await this._entityStorage.get(id);
|
373
|
-
if (core.Is.empty(entity)) {
|
374
|
-
throw new core.NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
375
|
-
}
|
376
|
-
await this._entityStorage.remove(id);
|
377
|
-
}
|
378
|
-
else {
|
379
|
-
const results = await this._entityStorage.query({
|
380
|
-
conditions,
|
381
|
-
logicalOperator: entity.LogicalOperator.And
|
382
|
-
}, undefined, undefined, undefined, 1);
|
383
|
-
if (results.entities.length > 0) {
|
384
|
-
const firstEntity = results.entities[0];
|
385
|
-
const schema = this._entityStorage.getSchema();
|
386
|
-
const primaryKey = entity.EntitySchemaHelper.getPrimaryKey(schema);
|
387
|
-
await this._entityStorage.remove(firstEntity[primaryKey.property]);
|
388
|
-
}
|
389
|
-
else {
|
390
|
-
throw new core.NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
391
|
-
}
|
392
|
-
}
|
341
|
+
await this._entityStorage.remove(id, conditions);
|
393
342
|
}
|
394
343
|
/**
|
395
344
|
* Query all the entities which match the conditions.
|
@@ -404,27 +353,26 @@ class EntityStorageService {
|
|
404
353
|
* and a cursor which can be used to request more entities.
|
405
354
|
*/
|
406
355
|
async query(conditions, sortProperties, properties, cursor, pageSize, userIdentity, nodeIdentity) {
|
407
|
-
const
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
property: "userIdentity",
|
412
|
-
comparison: entity.ComparisonOperator.Equals,
|
413
|
-
value: userIdentity
|
414
|
-
});
|
415
|
-
}
|
356
|
+
const finalConditions = {
|
357
|
+
conditions: [],
|
358
|
+
logicalOperator: entity.LogicalOperator.And
|
359
|
+
};
|
416
360
|
if (this._includeNodeIdentity) {
|
417
361
|
core.Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
418
|
-
|
362
|
+
finalConditions.conditions.push({
|
419
363
|
property: "nodeIdentity",
|
420
364
|
comparison: entity.ComparisonOperator.Equals,
|
421
365
|
value: nodeIdentity
|
422
366
|
});
|
423
367
|
}
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
368
|
+
if (this._includeUserIdentity) {
|
369
|
+
core.Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
370
|
+
finalConditions.conditions.push({
|
371
|
+
property: "userIdentity",
|
372
|
+
comparison: entity.ComparisonOperator.Equals,
|
373
|
+
value: userIdentity
|
374
|
+
});
|
375
|
+
}
|
428
376
|
if (!core.Is.empty(conditions)) {
|
429
377
|
finalConditions.conditions.push(conditions);
|
430
378
|
}
|
@@ -435,6 +383,67 @@ class EntityStorageService {
|
|
435
383
|
}
|
436
384
|
return result;
|
437
385
|
}
|
386
|
+
/**
|
387
|
+
* Get an entity.
|
388
|
+
* @param id The id of the entity to get, or the index value if secondaryIndex is set.
|
389
|
+
* @param secondaryIndex Get the item using a secondary index.
|
390
|
+
* @param userIdentity The user identity to use with storage operations.
|
391
|
+
* @param nodeIdentity The node identity to use with storage operations.
|
392
|
+
* @returns The object if it can be found or throws.
|
393
|
+
* @internal
|
394
|
+
*/
|
395
|
+
async internalGet(id, secondaryIndex, userIdentity, nodeIdentity) {
|
396
|
+
const conditions = [];
|
397
|
+
if (this._includeUserIdentity) {
|
398
|
+
core.Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
399
|
+
conditions.push({
|
400
|
+
property: "userIdentity",
|
401
|
+
comparison: entity.ComparisonOperator.Equals,
|
402
|
+
value: userIdentity
|
403
|
+
});
|
404
|
+
}
|
405
|
+
if (this._includeNodeIdentity) {
|
406
|
+
core.Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
407
|
+
conditions.push({
|
408
|
+
property: "nodeIdentity",
|
409
|
+
comparison: entity.ComparisonOperator.Equals,
|
410
|
+
value: nodeIdentity
|
411
|
+
});
|
412
|
+
}
|
413
|
+
if (core.Is.stringValue(secondaryIndex)) {
|
414
|
+
conditions.push({
|
415
|
+
property: secondaryIndex,
|
416
|
+
comparison: entity.ComparisonOperator.Equals,
|
417
|
+
value: id
|
418
|
+
});
|
419
|
+
}
|
420
|
+
let entity$1;
|
421
|
+
if (conditions.length === 0) {
|
422
|
+
entity$1 = await this._entityStorage.get(id, secondaryIndex);
|
423
|
+
}
|
424
|
+
else {
|
425
|
+
if (!core.Is.stringValue(secondaryIndex)) {
|
426
|
+
const schema = this._entityStorage.getSchema();
|
427
|
+
const primaryKey = entity.EntitySchemaHelper.getPrimaryKey(schema);
|
428
|
+
conditions.unshift({
|
429
|
+
property: primaryKey.property,
|
430
|
+
comparison: entity.ComparisonOperator.Equals,
|
431
|
+
value: id
|
432
|
+
});
|
433
|
+
}
|
434
|
+
const results = await this._entityStorage.query({
|
435
|
+
conditions,
|
436
|
+
logicalOperator: entity.LogicalOperator.And
|
437
|
+
}, undefined, undefined, undefined, 1);
|
438
|
+
entity$1 = results.entities[0];
|
439
|
+
}
|
440
|
+
if (core.Is.empty(entity$1)) {
|
441
|
+
throw new core.NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
442
|
+
}
|
443
|
+
core.ObjectHelper.propertyDelete(entity$1, "nodeIdentity");
|
444
|
+
core.ObjectHelper.propertyDelete(entity$1, "userIdentity");
|
445
|
+
return entity$1;
|
446
|
+
}
|
438
447
|
}
|
439
448
|
|
440
449
|
/**
|
package/dist/esm/index.mjs
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { HttpParameterHelper } from '@twin.org/api-models';
|
2
2
|
import { StringHelper, Guards, ComponentFactory, Coerce, ObjectHelper, Is, NotFoundError } from '@twin.org/core';
|
3
3
|
import { HttpStatusCode } from '@twin.org/web';
|
4
|
-
import {
|
4
|
+
import { EntitySchemaHelper, LogicalOperator, ComparisonOperator } from '@twin.org/entity';
|
5
5
|
import { EntityStorageConnectorFactory } from '@twin.org/entity-storage-models';
|
6
6
|
|
7
7
|
// Copyright 2024 IOTA Stiftung.
|
@@ -254,6 +254,11 @@ class EntityStorageService {
|
|
254
254
|
* @internal
|
255
255
|
*/
|
256
256
|
_includeUserIdentity;
|
257
|
+
/**
|
258
|
+
* The primary key for the entity.
|
259
|
+
* @internal
|
260
|
+
*/
|
261
|
+
_primaryKey;
|
257
262
|
/**
|
258
263
|
* Create a new instance of EntityStorageService.
|
259
264
|
* @param options The dependencies for the entity storage service.
|
@@ -265,6 +270,7 @@ class EntityStorageService {
|
|
265
270
|
this._entityStorage = EntityStorageConnectorFactory.get(options.entityStorageType);
|
266
271
|
this._includeNodeIdentity = options.config?.includeNodeIdentity ?? true;
|
267
272
|
this._includeUserIdentity = options.config?.includeUserIdentity ?? true;
|
273
|
+
this._primaryKey = EntitySchemaHelper.getPrimaryKey(this._entityStorage.getSchema());
|
268
274
|
}
|
269
275
|
/**
|
270
276
|
* Set an entity.
|
@@ -275,15 +281,24 @@ class EntityStorageService {
|
|
275
281
|
*/
|
276
282
|
async set(entity, userIdentity, nodeIdentity) {
|
277
283
|
Guards.object(this.CLASS_NAME, "entity", entity);
|
284
|
+
const conditions = [];
|
278
285
|
if (this._includeUserIdentity) {
|
279
286
|
Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
287
|
+
conditions.push({
|
288
|
+
property: "userIdentity",
|
289
|
+
value: userIdentity
|
290
|
+
});
|
280
291
|
ObjectHelper.propertySet(entity, "userIdentity", userIdentity);
|
281
292
|
}
|
282
293
|
if (this._includeNodeIdentity) {
|
283
294
|
Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
295
|
+
conditions.push({
|
296
|
+
property: "nodeIdentity",
|
297
|
+
value: nodeIdentity
|
298
|
+
});
|
284
299
|
ObjectHelper.propertySet(entity, "nodeIdentity", nodeIdentity);
|
285
300
|
}
|
286
|
-
return this._entityStorage.set(entity);
|
301
|
+
return this._entityStorage.set(entity, conditions);
|
287
302
|
}
|
288
303
|
/**
|
289
304
|
* Get an entity.
|
@@ -295,50 +310,7 @@ class EntityStorageService {
|
|
295
310
|
*/
|
296
311
|
async get(id, secondaryIndex, userIdentity, nodeIdentity) {
|
297
312
|
Guards.stringValue(this.CLASS_NAME, "id", id);
|
298
|
-
|
299
|
-
if (this._includeUserIdentity) {
|
300
|
-
Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
301
|
-
conditions.push({
|
302
|
-
property: "userIdentity",
|
303
|
-
comparison: ComparisonOperator.Equals,
|
304
|
-
value: userIdentity
|
305
|
-
});
|
306
|
-
}
|
307
|
-
if (this._includeNodeIdentity) {
|
308
|
-
Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
309
|
-
conditions.push({
|
310
|
-
property: "nodeIdentity",
|
311
|
-
comparison: ComparisonOperator.Equals,
|
312
|
-
value: nodeIdentity
|
313
|
-
});
|
314
|
-
}
|
315
|
-
if (Is.stringValue(secondaryIndex)) {
|
316
|
-
conditions.push({
|
317
|
-
property: secondaryIndex,
|
318
|
-
comparison: ComparisonOperator.Equals,
|
319
|
-
value: id
|
320
|
-
});
|
321
|
-
}
|
322
|
-
if (conditions.length === 0) {
|
323
|
-
const entity = await this._entityStorage.get(id, secondaryIndex);
|
324
|
-
if (Is.empty(entity)) {
|
325
|
-
throw new NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
326
|
-
}
|
327
|
-
ObjectHelper.propertyDelete(entity, "nodeIdentity");
|
328
|
-
ObjectHelper.propertyDelete(entity, "userIdentity");
|
329
|
-
return entity;
|
330
|
-
}
|
331
|
-
const results = await this._entityStorage.query({
|
332
|
-
conditions,
|
333
|
-
logicalOperator: LogicalOperator.And
|
334
|
-
}, undefined, undefined, undefined, 1);
|
335
|
-
const entity = results.entities[0];
|
336
|
-
if (Is.empty(entity)) {
|
337
|
-
throw new NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
338
|
-
}
|
339
|
-
ObjectHelper.propertyDelete(entity, "nodeIdentity");
|
340
|
-
ObjectHelper.propertyDelete(entity, "userIdentity");
|
341
|
-
return entity;
|
313
|
+
return this.internalGet(id, secondaryIndex, userIdentity, nodeIdentity);
|
342
314
|
}
|
343
315
|
/**
|
344
316
|
* Remove the entity.
|
@@ -354,7 +326,6 @@ class EntityStorageService {
|
|
354
326
|
Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
355
327
|
conditions.push({
|
356
328
|
property: "userIdentity",
|
357
|
-
comparison: ComparisonOperator.Equals,
|
358
329
|
value: userIdentity
|
359
330
|
});
|
360
331
|
}
|
@@ -362,32 +333,10 @@ class EntityStorageService {
|
|
362
333
|
Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
363
334
|
conditions.push({
|
364
335
|
property: "nodeIdentity",
|
365
|
-
comparison: ComparisonOperator.Equals,
|
366
336
|
value: nodeIdentity
|
367
337
|
});
|
368
338
|
}
|
369
|
-
|
370
|
-
const entity = await this._entityStorage.get(id);
|
371
|
-
if (Is.empty(entity)) {
|
372
|
-
throw new NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
373
|
-
}
|
374
|
-
await this._entityStorage.remove(id);
|
375
|
-
}
|
376
|
-
else {
|
377
|
-
const results = await this._entityStorage.query({
|
378
|
-
conditions,
|
379
|
-
logicalOperator: LogicalOperator.And
|
380
|
-
}, undefined, undefined, undefined, 1);
|
381
|
-
if (results.entities.length > 0) {
|
382
|
-
const firstEntity = results.entities[0];
|
383
|
-
const schema = this._entityStorage.getSchema();
|
384
|
-
const primaryKey = EntitySchemaHelper.getPrimaryKey(schema);
|
385
|
-
await this._entityStorage.remove(firstEntity[primaryKey.property]);
|
386
|
-
}
|
387
|
-
else {
|
388
|
-
throw new NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
389
|
-
}
|
390
|
-
}
|
339
|
+
await this._entityStorage.remove(id, conditions);
|
391
340
|
}
|
392
341
|
/**
|
393
342
|
* Query all the entities which match the conditions.
|
@@ -402,27 +351,26 @@ class EntityStorageService {
|
|
402
351
|
* and a cursor which can be used to request more entities.
|
403
352
|
*/
|
404
353
|
async query(conditions, sortProperties, properties, cursor, pageSize, userIdentity, nodeIdentity) {
|
405
|
-
const
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
property: "userIdentity",
|
410
|
-
comparison: ComparisonOperator.Equals,
|
411
|
-
value: userIdentity
|
412
|
-
});
|
413
|
-
}
|
354
|
+
const finalConditions = {
|
355
|
+
conditions: [],
|
356
|
+
logicalOperator: LogicalOperator.And
|
357
|
+
};
|
414
358
|
if (this._includeNodeIdentity) {
|
415
359
|
Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
416
|
-
|
360
|
+
finalConditions.conditions.push({
|
417
361
|
property: "nodeIdentity",
|
418
362
|
comparison: ComparisonOperator.Equals,
|
419
363
|
value: nodeIdentity
|
420
364
|
});
|
421
365
|
}
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
366
|
+
if (this._includeUserIdentity) {
|
367
|
+
Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
368
|
+
finalConditions.conditions.push({
|
369
|
+
property: "userIdentity",
|
370
|
+
comparison: ComparisonOperator.Equals,
|
371
|
+
value: userIdentity
|
372
|
+
});
|
373
|
+
}
|
426
374
|
if (!Is.empty(conditions)) {
|
427
375
|
finalConditions.conditions.push(conditions);
|
428
376
|
}
|
@@ -433,6 +381,67 @@ class EntityStorageService {
|
|
433
381
|
}
|
434
382
|
return result;
|
435
383
|
}
|
384
|
+
/**
|
385
|
+
* Get an entity.
|
386
|
+
* @param id The id of the entity to get, or the index value if secondaryIndex is set.
|
387
|
+
* @param secondaryIndex Get the item using a secondary index.
|
388
|
+
* @param userIdentity The user identity to use with storage operations.
|
389
|
+
* @param nodeIdentity The node identity to use with storage operations.
|
390
|
+
* @returns The object if it can be found or throws.
|
391
|
+
* @internal
|
392
|
+
*/
|
393
|
+
async internalGet(id, secondaryIndex, userIdentity, nodeIdentity) {
|
394
|
+
const conditions = [];
|
395
|
+
if (this._includeUserIdentity) {
|
396
|
+
Guards.stringValue(this.CLASS_NAME, "userIdentity", userIdentity);
|
397
|
+
conditions.push({
|
398
|
+
property: "userIdentity",
|
399
|
+
comparison: ComparisonOperator.Equals,
|
400
|
+
value: userIdentity
|
401
|
+
});
|
402
|
+
}
|
403
|
+
if (this._includeNodeIdentity) {
|
404
|
+
Guards.stringValue(this.CLASS_NAME, "nodeIdentity", nodeIdentity);
|
405
|
+
conditions.push({
|
406
|
+
property: "nodeIdentity",
|
407
|
+
comparison: ComparisonOperator.Equals,
|
408
|
+
value: nodeIdentity
|
409
|
+
});
|
410
|
+
}
|
411
|
+
if (Is.stringValue(secondaryIndex)) {
|
412
|
+
conditions.push({
|
413
|
+
property: secondaryIndex,
|
414
|
+
comparison: ComparisonOperator.Equals,
|
415
|
+
value: id
|
416
|
+
});
|
417
|
+
}
|
418
|
+
let entity;
|
419
|
+
if (conditions.length === 0) {
|
420
|
+
entity = await this._entityStorage.get(id, secondaryIndex);
|
421
|
+
}
|
422
|
+
else {
|
423
|
+
if (!Is.stringValue(secondaryIndex)) {
|
424
|
+
const schema = this._entityStorage.getSchema();
|
425
|
+
const primaryKey = EntitySchemaHelper.getPrimaryKey(schema);
|
426
|
+
conditions.unshift({
|
427
|
+
property: primaryKey.property,
|
428
|
+
comparison: ComparisonOperator.Equals,
|
429
|
+
value: id
|
430
|
+
});
|
431
|
+
}
|
432
|
+
const results = await this._entityStorage.query({
|
433
|
+
conditions,
|
434
|
+
logicalOperator: LogicalOperator.And
|
435
|
+
}, undefined, undefined, undefined, 1);
|
436
|
+
entity = results.entities[0];
|
437
|
+
}
|
438
|
+
if (Is.empty(entity)) {
|
439
|
+
throw new NotFoundError(this.CLASS_NAME, "entityNotFound", id);
|
440
|
+
}
|
441
|
+
ObjectHelper.propertyDelete(entity, "nodeIdentity");
|
442
|
+
ObjectHelper.propertyDelete(entity, "userIdentity");
|
443
|
+
return entity;
|
444
|
+
}
|
436
445
|
}
|
437
446
|
|
438
447
|
/**
|
package/docs/changelog.md
CHANGED
package/docs/open-api/spec.json
CHANGED
@@ -133,7 +133,7 @@
|
|
133
133
|
},
|
134
134
|
{
|
135
135
|
"name": "sortProperties",
|
136
|
-
"description": "The sort property array as JSON serialization of
|
136
|
+
"description": "The sort property array as JSON serialization of property,direction.",
|
137
137
|
"in": "query",
|
138
138
|
"required": false,
|
139
139
|
"schema": {
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@twin.org/entity-storage-service",
|
3
|
-
"version": "0.0.1-next.
|
3
|
+
"version": "0.0.1-next.9",
|
4
4
|
"description": "Entity Storage contract implementation and REST endpoint definitions",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -17,7 +17,7 @@
|
|
17
17
|
"@twin.org/api-models": "next",
|
18
18
|
"@twin.org/core": "next",
|
19
19
|
"@twin.org/entity": "next",
|
20
|
-
"@twin.org/entity-storage-models": "0.0.1-next.
|
20
|
+
"@twin.org/entity-storage-models": "0.0.1-next.9",
|
21
21
|
"@twin.org/nameof": "next",
|
22
22
|
"@twin.org/web": "next"
|
23
23
|
},
|