@mbc-cqrs-serverless/core 1.1.5 → 1.2.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/dist/commands/command.module.js +3 -0
- package/dist/commands/command.module.js.map +1 -1
- package/dist/commands/command.service.d.ts +9 -1
- package/dist/commands/command.service.js +33 -2
- package/dist/commands/command.service.js.map +1 -1
- package/dist/commands/data.service.js +3 -26
- package/dist/commands/data.service.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/repository.d.ts +102 -0
- package/dist/commands/repository.js +280 -0
- package/dist/commands/repository.js.map +1 -0
- package/dist/data-store/data-store.module.js +3 -2
- package/dist/data-store/data-store.module.js.map +1 -1
- package/dist/data-store/index.d.ts +2 -0
- package/dist/data-store/index.js +2 -0
- package/dist/data-store/index.js.map +1 -1
- package/dist/data-store/session.interface.d.ts +10 -0
- package/dist/data-store/session.interface.js +3 -0
- package/dist/data-store/session.interface.js.map +1 -0
- package/dist/data-store/session.service.d.ts +52 -0
- package/dist/data-store/session.service.js +128 -0
- package/dist/data-store/session.service.js.map +1 -0
- package/dist/env.validation.d.ts +1 -0
- package/dist/env.validation.js +5 -0
- package/dist/env.validation.js.map +1 -1
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/key.d.ts +13 -0
- package/dist/helpers/key.js +26 -0
- package/dist/helpers/key.js.map +1 -1
- package/dist/helpers/transform.d.ts +7 -0
- package/dist/helpers/transform.js +36 -0
- package/dist/helpers/transform.js.map +1 -0
- package/package.json +2 -2
|
@@ -15,6 +15,7 @@ const command_service_1 = require("./command.service");
|
|
|
15
15
|
const data_service_1 = require("./data.service");
|
|
16
16
|
const data_sync_dds_handler_1 = require("./handlers/data-sync-dds.handler");
|
|
17
17
|
const history_service_1 = require("./history.service");
|
|
18
|
+
const repository_1 = require("./repository");
|
|
18
19
|
const ttl_service_1 = require("./ttl.service");
|
|
19
20
|
let CommandModule = class CommandModule extends command_module_definition_1.ConfigurableModuleClass {
|
|
20
21
|
static register(options) {
|
|
@@ -42,6 +43,7 @@ exports.CommandModule = CommandModule = __decorate([
|
|
|
42
43
|
history_service_1.HistoryService,
|
|
43
44
|
command_event_handler_1.CommandEventHandler,
|
|
44
45
|
data_sync_dds_handler_1.DataSyncDdsHandler,
|
|
46
|
+
repository_1.Repository,
|
|
45
47
|
],
|
|
46
48
|
exports: [
|
|
47
49
|
command_service_1.CommandService,
|
|
@@ -49,6 +51,7 @@ exports.CommandModule = CommandModule = __decorate([
|
|
|
49
51
|
history_service_1.HistoryService,
|
|
50
52
|
command_event_handler_1.CommandEventHandler,
|
|
51
53
|
ttl_service_1.TtlService,
|
|
54
|
+
repository_1.Repository,
|
|
52
55
|
],
|
|
53
56
|
})
|
|
54
57
|
], CommandModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.module.js","sourceRoot":"","sources":["../../src/commands/command.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AAEtD,0CAA6C;AAC7C,mEAA6D;AAC7D,2EAGoC;AACpC,uDAAkD;AAClD,iDAA4C;AAC5C,4EAAqE;AACrE,uDAAkD;AAClD,+CAA0C;
|
|
1
|
+
{"version":3,"file":"command.module.js","sourceRoot":"","sources":["../../src/commands/command.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsD;AAEtD,0CAA6C;AAC7C,mEAA6D;AAC7D,2EAGoC;AACpC,uDAAkD;AAClD,iDAA4C;AAC5C,4EAAqE;AACrE,uDAAkD;AAClD,6CAAyC;AACzC,+CAA0C;AAuBnC,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,mDAAuB;IACxD,MAAM,CAAC,QAAQ,CAAC,OAA4B;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAEtC,MAAM,EAAE,SAAS,EAAE,gBAAgB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAA;QACpD,MAAM,CAAC,SAAS,CAAC,IAAI,CACnB;YACE,2GAA2G;YAC3G,OAAO,EAAE,SAAS,GAAG,sBAAsB;YAC3C,WAAW,EAAE,2CAAmB;SACjC,EACD,GAAG,gBAAgB,CACpB,CAAA;QAED,OAAO;YACL,GAAG,MAAM;SACV,CAAA;IACH,CAAC;CACF,CAAA;AAlBY,sCAAa;wBAAb,aAAa;IArBzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,EAAE;QACX,SAAS,EAAE;YACT,0BAAe;YACf,gCAAc;YACd,0BAAW;YACX,wBAAU;YACV,gCAAc;YACd,2CAAmB;YACnB,0CAAkB;YAClB,uBAAU;SACX;QACD,OAAO,EAAE;YACP,gCAAc;YACd,0BAAW;YACX,gCAAc;YACd,2CAAmB;YACnB,wBAAU;YACV,uBAAU;SACX;KACF,CAAC;GACW,aAAa,CAkBzB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { OnModuleInit, Type } from '@nestjs/common';
|
|
2
2
|
import { ModuleRef } from '@nestjs/core';
|
|
3
3
|
import { DynamoDbService } from '../data-store/dynamodb.service';
|
|
4
|
+
import { SessionService } from '../data-store/session.service';
|
|
4
5
|
import { CommandInputModel, CommandModel, CommandModuleOptions, CommandPartialInputModel, DetailKey, ICommandService } from '../interfaces';
|
|
5
6
|
import { ICommandOptions } from '../interfaces/command.options.interface';
|
|
6
7
|
import { IDataSyncHandler } from '../interfaces/data-sync-handler.interface';
|
|
@@ -23,10 +24,11 @@ export declare class CommandService implements OnModuleInit, ICommandService {
|
|
|
23
24
|
private readonly dataService;
|
|
24
25
|
private readonly ttlService;
|
|
25
26
|
private readonly historyService;
|
|
27
|
+
private readonly sessionService;
|
|
26
28
|
private logger;
|
|
27
29
|
private [TABLE_NAME];
|
|
28
30
|
private [DATA_SYNC_HANDLER];
|
|
29
|
-
constructor(options: CommandModuleOptions, dynamoDbService: DynamoDbService, explorerService: ExplorerService, moduleRef: ModuleRef, snsService: SnsService, dataSyncDdsHandler: DataSyncDdsHandler, dataService: DataService, ttlService: TtlService, historyService: HistoryService);
|
|
31
|
+
constructor(options: CommandModuleOptions, dynamoDbService: DynamoDbService, explorerService: ExplorerService, moduleRef: ModuleRef, snsService: SnsService, dataSyncDdsHandler: DataSyncDdsHandler, dataService: DataService, ttlService: TtlService, historyService: HistoryService, sessionService: SessionService);
|
|
30
32
|
publishItem(key: DetailKey): Promise<any | null>;
|
|
31
33
|
onModuleInit(): void;
|
|
32
34
|
set tableName(name: string);
|
|
@@ -37,6 +39,12 @@ export declare class CommandService implements OnModuleInit, ICommandService {
|
|
|
37
39
|
publishPartialUpdateAsync(input: CommandPartialInputModel, options: ICommandOptions): Promise<CommandModel | null>;
|
|
38
40
|
publishSync(input: CommandInputModel, options: ICommandOptions): Promise<CommandModel | null>;
|
|
39
41
|
publishAsync(input: CommandInputModel, options: ICommandOptions): Promise<CommandModel | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Records a short-lived session row so Repository can merge pending async
|
|
44
|
+
* commands before the data table catches up. Only used after publishAsync —
|
|
45
|
+
* publishSync writes data in the same request, so no session is needed.
|
|
46
|
+
*/
|
|
47
|
+
private writeRywSessionIfApplicable;
|
|
40
48
|
duplicate(key: DetailKey, options: ICommandOptions): Promise<CommandModel>;
|
|
41
49
|
reSyncData(): Promise<void>;
|
|
42
50
|
updateStatus(key: DetailKey, status: string, notifyId?: string): Promise<void>;
|
|
@@ -21,6 +21,7 @@ const util_1 = require("util");
|
|
|
21
21
|
const constants_1 = require("../constants");
|
|
22
22
|
const user_1 = require("../context/user");
|
|
23
23
|
const dynamodb_service_1 = require("../data-store/dynamodb.service");
|
|
24
|
+
const session_service_1 = require("../data-store/session.service");
|
|
24
25
|
const decorators_1 = require("../decorators");
|
|
25
26
|
const helpers_1 = require("../helpers");
|
|
26
27
|
const key_1 = require("../helpers/key");
|
|
@@ -37,7 +38,7 @@ const ttl_service_1 = require("./ttl.service");
|
|
|
37
38
|
const TABLE_NAME = Symbol('command');
|
|
38
39
|
const DATA_SYNC_HANDLER = Symbol(decorators_1.DATA_SYNC_HANDLER_METADATA);
|
|
39
40
|
let CommandService = CommandService_1 = class CommandService {
|
|
40
|
-
constructor(options, dynamoDbService, explorerService, moduleRef, snsService, dataSyncDdsHandler, dataService, ttlService, historyService) {
|
|
41
|
+
constructor(options, dynamoDbService, explorerService, moduleRef, snsService, dataSyncDdsHandler, dataService, ttlService, historyService, sessionService) {
|
|
41
42
|
this.options = options;
|
|
42
43
|
this.dynamoDbService = dynamoDbService;
|
|
43
44
|
this.explorerService = explorerService;
|
|
@@ -47,6 +48,7 @@ let CommandService = CommandService_1 = class CommandService {
|
|
|
47
48
|
this.dataService = dataService;
|
|
48
49
|
this.ttlService = ttlService;
|
|
49
50
|
this.historyService = historyService;
|
|
51
|
+
this.sessionService = sessionService;
|
|
50
52
|
this[_a] = [];
|
|
51
53
|
this.tableName = this.dynamoDbService.getTableName(this.options.tableName, enums_1.TableType.COMMAND);
|
|
52
54
|
this.logger = new common_1.Logger(`${CommandService_1.name}:${this.tableName}`);
|
|
@@ -234,8 +236,36 @@ let CommandService = CommandService_1 = class CommandService {
|
|
|
234
236
|
};
|
|
235
237
|
this.logger.debug('publish::', command);
|
|
236
238
|
await this.dynamoDbService.putItem(this.tableName, command, 'attribute_not_exists(pk) AND attribute_not_exists(sk)');
|
|
239
|
+
await this.writeRywSessionIfApplicable(command, options);
|
|
237
240
|
return command;
|
|
238
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Records a short-lived session row so Repository can merge pending async
|
|
244
|
+
* commands before the data table catches up. Only used after publishAsync —
|
|
245
|
+
* publishSync writes data in the same request, so no session is needed.
|
|
246
|
+
*/
|
|
247
|
+
async writeRywSessionIfApplicable(command, options) {
|
|
248
|
+
let userId;
|
|
249
|
+
try {
|
|
250
|
+
userId = (0, user_1.getUserContext)(options.invokeContext)?.userId;
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (!userId) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const tenantCode = (0, key_1.getTenantCode)(command.pk);
|
|
259
|
+
if (!tenantCode) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
await this.sessionService.put(userId, tenantCode, this.options.tableName, command.id, command.version);
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
this.logger.warn('RYW session write failed (non-fatal)', err);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
239
269
|
async duplicate(key, options) {
|
|
240
270
|
const item = await this.getItem(key);
|
|
241
271
|
if (!item) {
|
|
@@ -397,6 +427,7 @@ exports.CommandService = CommandService = CommandService_1 = __decorate([
|
|
|
397
427
|
data_sync_dds_handler_1.DataSyncDdsHandler,
|
|
398
428
|
data_service_1.DataService,
|
|
399
429
|
ttl_service_1.TtlService,
|
|
400
|
-
history_service_1.HistoryService
|
|
430
|
+
history_service_1.HistoryService,
|
|
431
|
+
session_service_1.SessionService])
|
|
401
432
|
], CommandService);
|
|
402
433
|
//# sourceMappingURL=command.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.service.js","sourceRoot":"","sources":["../../src/commands/command.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command.service.js","sourceRoot":"","sources":["../../src/commands/command.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ exports.DataService = void 0;
|
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const dynamodb_service_1 = require("../data-store/dynamodb.service");
|
|
19
19
|
const key_1 = require("../helpers/key");
|
|
20
|
+
const transform_1 = require("../helpers/transform");
|
|
20
21
|
const interfaces_1 = require("../interfaces");
|
|
21
22
|
const command_module_definition_1 = require("./command.module-definition");
|
|
22
23
|
const enums_1 = require("./enums");
|
|
@@ -60,33 +61,9 @@ let DataService = DataService_1 = class DataService {
|
|
|
60
61
|
* @returns The published data model
|
|
61
62
|
*/
|
|
62
63
|
async publish(cmd) {
|
|
63
|
-
const pk = cmd.pk;
|
|
64
64
|
const sk = (0, key_1.removeSortKeyVersion)(cmd.sk);
|
|
65
|
-
const
|
|
66
|
-
const dataModel =
|
|
67
|
-
...data,
|
|
68
|
-
pk,
|
|
69
|
-
sk,
|
|
70
|
-
id: cmd.id,
|
|
71
|
-
code: cmd.code,
|
|
72
|
-
name: cmd.name,
|
|
73
|
-
version: cmd.version,
|
|
74
|
-
tenantCode: cmd.tenantCode,
|
|
75
|
-
type: cmd.type,
|
|
76
|
-
seq: cmd.seq,
|
|
77
|
-
attributes: cmd.attributes,
|
|
78
|
-
cpk: cmd.pk,
|
|
79
|
-
csk: cmd.sk,
|
|
80
|
-
isDeleted: cmd.isDeleted,
|
|
81
|
-
ttl: cmd.ttl,
|
|
82
|
-
requestId: cmd.requestId,
|
|
83
|
-
createdAt: data?.createdAt || cmd.createdAt,
|
|
84
|
-
updatedAt: cmd.updatedAt,
|
|
85
|
-
createdBy: data?.createdBy || cmd.createdBy,
|
|
86
|
-
updatedBy: cmd.updatedBy,
|
|
87
|
-
createdIp: data?.createdIp || cmd.createdIp,
|
|
88
|
-
updatedIp: cmd.updatedIp,
|
|
89
|
-
};
|
|
65
|
+
const existing = await this.getItem({ pk: cmd.pk, sk });
|
|
66
|
+
const dataModel = (0, transform_1.transformCommandToData)(cmd, existing);
|
|
90
67
|
this.logger.debug('publish::', dataModel);
|
|
91
68
|
await this.dynamoDbService.putItem(this.tableName, dataModel);
|
|
92
69
|
return dataModel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.service.js","sourceRoot":"","sources":["../../src/commands/data.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA2D;AAE3D,qEAAgE;AAChE,wCAAqD;AACrD,8CAOsB;AACtB,2EAAkE;AAClE,mCAAmC;AAEnC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAEjC;;;;;;;;;;;;;;;;;GAiBG;AAEI,IAAM,WAAW,mBAAjB,MAAM,WAAW;IAItB,YAEmB,OAA6B,EAC7B,eAAgC;QADhC,YAAO,GAAP,OAAO,CAAsB;QAC7B,oBAAe,GAAf,eAAe,CAAiB;QAEjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAChD,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,iBAAS,CAAC,IAAI,CACf,CAAA;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,GAAG,aAAW,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,SAAS,CAAC,IAAY;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,CAAA;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,GAAiB;QAC7B,MAAM,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"data.service.js","sourceRoot":"","sources":["../../src/commands/data.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA2D;AAE3D,qEAAgE;AAChE,wCAAqD;AACrD,oDAA6D;AAC7D,8CAOsB;AACtB,2EAAkE;AAClE,mCAAmC;AAEnC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAEjC;;;;;;;;;;;;;;;;;GAiBG;AAEI,IAAM,WAAW,mBAAjB,MAAM,WAAW;IAItB,YAEmB,OAA6B,EAC7B,eAAgC;QADhC,YAAO,GAAP,OAAO,CAAsB;QAC7B,oBAAe,GAAf,eAAe,CAAiB;QAEjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAChD,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,iBAAS,CAAC,IAAI,CACf,CAAA;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,GAAG,aAAW,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,SAAS,CAAC,IAAY;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,CAAA;IACzB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,GAAiB;QAC7B,MAAM,EAAE,GAAG,IAAA,0BAAoB,EAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QACvD,MAAM,SAAS,GAAG,IAAA,kCAAsB,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAEvD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QACzC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAE7D,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,GAAc;QAC1B,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IAChE,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,aAAa,CACjB,EAAU,EACV,IASC;QAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAChE,IAAI,CAAC,SAAS,EACd,EAAE,EACF,IAAI,EAAE,EAAE,EACR,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,KAAK,EACX,IAAI,EAAE,KAAK,CACZ,CAAA;QAED,OAAO,IAAI,2BAAc,CAAC;YACxB,MAAM;YACN,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,uBAAU,CAAC,IAAI,CAAC,CAAC;SACjD,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AA1FY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,eAAM,EAAC,gDAAoB,CAAC,CAAA;6CAEK,kCAAe;GAPxC,WAAW,CA0FvB"}
|
package/dist/commands/index.d.ts
CHANGED
package/dist/commands/index.js
CHANGED
|
@@ -21,4 +21,5 @@ __exportStar(require("./data.service"), exports);
|
|
|
21
21
|
__exportStar(require("./enums"), exports);
|
|
22
22
|
__exportStar(require("./handlers"), exports);
|
|
23
23
|
__exportStar(require("./history.service"), exports);
|
|
24
|
+
__exportStar(require("./repository"), exports);
|
|
24
25
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAuC;AACvC,mDAAgC;AAChC,oDAAiC;AACjC,iDAA8B;AAC9B,0CAAuB;AACvB,6CAA0B;AAC1B,oDAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAuC;AACvC,mDAAgC;AAChC,oDAAiC;AACjC,iDAA8B;AAC9B,0CAAuB;AACvB,6CAA0B;AAC1B,oDAAiC;AACjC,+CAA4B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { SessionService } from '../data-store/session.service';
|
|
2
|
+
import { CommandModel, CommandModuleOptions, DataListEntity, DataModel, DetailKey, ICommandOptions } from '../interfaces';
|
|
3
|
+
import { CommandService } from './command.service';
|
|
4
|
+
import { DataService } from './data.service';
|
|
5
|
+
export interface IMergeOptions<TItem extends {
|
|
6
|
+
id: string;
|
|
7
|
+
}> {
|
|
8
|
+
/** * Set true to merge pending async commands into the result.
|
|
9
|
+
* If false/undefined -> acts as a simple passthrough.
|
|
10
|
+
*/
|
|
11
|
+
latestFlg?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Transform a CommandModel into the same shape as a TItem returned by the query.
|
|
14
|
+
* The `existing` parameter is provided for update cases to merge unchanged fields.
|
|
15
|
+
*/
|
|
16
|
+
transformCommand: (cmd: CommandModel, existing?: TItem) => TItem;
|
|
17
|
+
/**
|
|
18
|
+
* Optional filter applied AFTER transformCommand for "create-new" rows.
|
|
19
|
+
* Prevents newly created items from appearing in lists where they don't match the current search criteria.
|
|
20
|
+
*/
|
|
21
|
+
matchesFilter?: (item: TItem) => boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare class Repository {
|
|
24
|
+
private readonly options;
|
|
25
|
+
private readonly dataService;
|
|
26
|
+
private readonly commandService;
|
|
27
|
+
private readonly sessionService;
|
|
28
|
+
private readonly logger;
|
|
29
|
+
private readonly moduleTableName;
|
|
30
|
+
constructor(options: CommandModuleOptions, dataService: DataService, commandService: CommandService, sessionService: SessionService);
|
|
31
|
+
/**
|
|
32
|
+
* Get a single data item, merging a pending async command when a session exists.
|
|
33
|
+
*/
|
|
34
|
+
getItem(key: DetailKey, options: ICommandOptions): Promise<DataModel>;
|
|
35
|
+
/**
|
|
36
|
+
* List items from the DynamoDB data table with an optional merge of pending async commands.
|
|
37
|
+
*
|
|
38
|
+
* When `mergeOptions.latestFlg` is true, the result is augmented with any
|
|
39
|
+
* pending writes the current user has not yet seen reflected in the data table:
|
|
40
|
+
*
|
|
41
|
+
* - **update** — the existing item is replaced in-place, preserving its
|
|
42
|
+
* position in the list.
|
|
43
|
+
* - **delete** — the item is removed from the result.
|
|
44
|
+
* - **create-new** — the item is prepended to the top of the list, sorted by
|
|
45
|
+
* `updatedAt` descending when there are multiple pending creates.
|
|
46
|
+
*
|
|
47
|
+
* > **Sort-order note**: Prepended create-new items are not integrated into
|
|
48
|
+
* > the caller's sort order (e.g. by `name` or `code`). They will appear
|
|
49
|
+
* > at the top of the result until the async DynamoDB Stream sync completes and
|
|
50
|
+
* > the next read returns fully sorted data. This is intentional — the
|
|
51
|
+
* > guarantee is visibility, not sort position.
|
|
52
|
+
*/
|
|
53
|
+
listItemsByPk(pk: string, opts?: {
|
|
54
|
+
sk?: {
|
|
55
|
+
skExpression: string;
|
|
56
|
+
skAttributeValues: Record<string, string>;
|
|
57
|
+
skAttributeNames?: Record<string, string>;
|
|
58
|
+
};
|
|
59
|
+
startFromSk?: string;
|
|
60
|
+
limit?: number;
|
|
61
|
+
order?: 'asc' | 'desc';
|
|
62
|
+
}, mergeOptions?: {
|
|
63
|
+
latestFlg?: boolean;
|
|
64
|
+
}, options?: ICommandOptions): Promise<DataListEntity>;
|
|
65
|
+
/**
|
|
66
|
+
* List items from an external source (e.g., RDS/Elasticsearch) with an
|
|
67
|
+
* optional merge of pending async commands.
|
|
68
|
+
*
|
|
69
|
+
* When `mergeOptions.latestFlg` is true, the result is augmented with any
|
|
70
|
+
* pending writes the current user has not yet seen reflected in the query
|
|
71
|
+
* source:
|
|
72
|
+
*
|
|
73
|
+
* - **update** — the existing item is replaced in-place via `transformCommand`,
|
|
74
|
+
* preserving its position. `existing` is passed to the transformer so join
|
|
75
|
+
* data (e.g. related RDS rows) can be carried over.
|
|
76
|
+
* - **delete** — the item is removed and `total` is decremented.
|
|
77
|
+
* - **create-new** — the item is transformed, optionally filtered by
|
|
78
|
+
* `matchesFilter`, and prepended to the top of the result sorted by
|
|
79
|
+
* `updatedAt` descending. `total` is incremented.
|
|
80
|
+
*
|
|
81
|
+
* > **Sort-order note**: Prepended create-new items are not integrated into
|
|
82
|
+
* > the caller's sort order (e.g. by `name` or `code`). They will appear
|
|
83
|
+
* > at the top of the result until the async Stream → RDS sync completes and
|
|
84
|
+
* > the next read returns fully sorted data. This is intentional — the
|
|
85
|
+
* > guarantee is visibility, not sort position.
|
|
86
|
+
*
|
|
87
|
+
* > **Pagination note**: `total` reflects the adjusted count after merge.
|
|
88
|
+
* > However, prepended items sit outside the RDS `LIMIT`/`OFFSET` window, so
|
|
89
|
+
* > on page 2+ the caller may see a one-item overlap or gap until sync
|
|
90
|
+
* > completes. For most UX patterns (redirect-after-write, optimistic UI)
|
|
91
|
+
* > this is not noticeable.
|
|
92
|
+
*/
|
|
93
|
+
listItems<TItem extends {
|
|
94
|
+
id: string;
|
|
95
|
+
}>(query: () => Promise<{
|
|
96
|
+
total: number;
|
|
97
|
+
items: TItem[];
|
|
98
|
+
}>, mergeOptions?: IMergeOptions<TItem>, options?: ICommandOptions): Promise<{
|
|
99
|
+
total: number;
|
|
100
|
+
items: TItem[];
|
|
101
|
+
}>;
|
|
102
|
+
}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var Repository_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.Repository = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const constants_1 = require("../constants");
|
|
19
|
+
const user_1 = require("../context/user");
|
|
20
|
+
const session_service_1 = require("../data-store/session.service");
|
|
21
|
+
const key_1 = require("../helpers/key");
|
|
22
|
+
const transform_1 = require("../helpers/transform");
|
|
23
|
+
const interfaces_1 = require("../interfaces");
|
|
24
|
+
const command_module_definition_1 = require("./command.module-definition");
|
|
25
|
+
const command_service_1 = require("./command.service");
|
|
26
|
+
const data_service_1 = require("./data.service");
|
|
27
|
+
let Repository = Repository_1 = class Repository {
|
|
28
|
+
constructor(options, dataService, commandService, sessionService) {
|
|
29
|
+
this.options = options;
|
|
30
|
+
this.dataService = dataService;
|
|
31
|
+
this.commandService = commandService;
|
|
32
|
+
this.sessionService = sessionService;
|
|
33
|
+
this.logger = new common_1.Logger(Repository_1.name);
|
|
34
|
+
this.moduleTableName = this.options.tableName;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get a single data item, merging a pending async command when a session exists.
|
|
38
|
+
*/
|
|
39
|
+
async getItem(key, options) {
|
|
40
|
+
const userContext = (0, user_1.getUserContext)(options.invokeContext);
|
|
41
|
+
const userId = userContext?.userId;
|
|
42
|
+
const tenantCode = (0, key_1.getTenantCode)(key.pk);
|
|
43
|
+
if (userId && tenantCode) {
|
|
44
|
+
const itemId = (0, key_1.generateId)(key.pk, key.sk);
|
|
45
|
+
const session = await this.sessionService.get(userId, tenantCode, this.moduleTableName, itemId);
|
|
46
|
+
if (session) {
|
|
47
|
+
this.logger.debug(`getItem session merge — version ${session.version}`, key);
|
|
48
|
+
const cmd = await this.commandService.getItem({
|
|
49
|
+
pk: key.pk,
|
|
50
|
+
sk: (0, key_1.addSortKeyVersion)(key.sk, session.version),
|
|
51
|
+
});
|
|
52
|
+
if (cmd) {
|
|
53
|
+
const existing = await this.dataService.getItem(key);
|
|
54
|
+
return (0, transform_1.transformCommandToData)(cmd, existing);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return this.dataService.getItem(key);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* List items from the DynamoDB data table with an optional merge of pending async commands.
|
|
62
|
+
*
|
|
63
|
+
* When `mergeOptions.latestFlg` is true, the result is augmented with any
|
|
64
|
+
* pending writes the current user has not yet seen reflected in the data table:
|
|
65
|
+
*
|
|
66
|
+
* - **update** — the existing item is replaced in-place, preserving its
|
|
67
|
+
* position in the list.
|
|
68
|
+
* - **delete** — the item is removed from the result.
|
|
69
|
+
* - **create-new** — the item is prepended to the top of the list, sorted by
|
|
70
|
+
* `updatedAt` descending when there are multiple pending creates.
|
|
71
|
+
*
|
|
72
|
+
* > **Sort-order note**: Prepended create-new items are not integrated into
|
|
73
|
+
* > the caller's sort order (e.g. by `name` or `code`). They will appear
|
|
74
|
+
* > at the top of the result until the async DynamoDB Stream sync completes and
|
|
75
|
+
* > the next read returns fully sorted data. This is intentional — the
|
|
76
|
+
* > guarantee is visibility, not sort position.
|
|
77
|
+
*/
|
|
78
|
+
async listItemsByPk(pk, opts, mergeOptions, options) {
|
|
79
|
+
const baseResult = await this.dataService.listItemsByPk(pk, opts);
|
|
80
|
+
if (!mergeOptions?.latestFlg || !options) {
|
|
81
|
+
return baseResult;
|
|
82
|
+
}
|
|
83
|
+
const userContext = (0, user_1.getUserContext)(options.invokeContext);
|
|
84
|
+
const userId = userContext?.userId;
|
|
85
|
+
if (!userId)
|
|
86
|
+
return baseResult;
|
|
87
|
+
const tenantCode = (0, key_1.getTenantCode)(pk);
|
|
88
|
+
if (!tenantCode) {
|
|
89
|
+
return baseResult;
|
|
90
|
+
}
|
|
91
|
+
const sessions = await this.sessionService.listByUser(userId, tenantCode, this.moduleTableName);
|
|
92
|
+
if (!sessions.length)
|
|
93
|
+
return baseResult;
|
|
94
|
+
this.logger.debug(`listItemsByPk merge — ${sessions.length} sessions`, {
|
|
95
|
+
pk,
|
|
96
|
+
});
|
|
97
|
+
// Map preserves insertion order for existing items
|
|
98
|
+
const itemMap = new Map(baseResult.items.map((item) => [item.id, item]));
|
|
99
|
+
// Separate array to collect newly created items so they can be prepended
|
|
100
|
+
const newItems = [];
|
|
101
|
+
const skPrefix = `${this.moduleTableName}${constants_1.KEY_SEPARATOR}`;
|
|
102
|
+
for (const session of sessions) {
|
|
103
|
+
if (!session.sk.startsWith(skPrefix)) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const itemId = session.sk.slice(skPrefix.length);
|
|
107
|
+
const existing = itemMap.get(itemId);
|
|
108
|
+
const cmdPk = pk;
|
|
109
|
+
let skBase;
|
|
110
|
+
if (existing?.sk) {
|
|
111
|
+
skBase = (0, key_1.removeSortKeyVersion)(existing.sk);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// Since we already know the exact PK from the method parameter,
|
|
115
|
+
// we can safely extract the skBase without strict 2-segment assumptions.
|
|
116
|
+
skBase = (0, key_1.sortKeyBaseFromId)(pk, itemId);
|
|
117
|
+
if (!skBase) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const cmd = await this.commandService.getItem({
|
|
122
|
+
pk: cmdPk,
|
|
123
|
+
sk: (0, key_1.addSortKeyVersion)(skBase, session.version),
|
|
124
|
+
});
|
|
125
|
+
if (!cmd)
|
|
126
|
+
continue;
|
|
127
|
+
const transformed = (0, transform_1.transformCommandToData)(cmd, existing);
|
|
128
|
+
if (cmd.isDeleted) {
|
|
129
|
+
// Delete the item from the map
|
|
130
|
+
itemMap.delete(itemId);
|
|
131
|
+
}
|
|
132
|
+
else if (itemMap.has(itemId)) {
|
|
133
|
+
// Update: preserves the original sort order in the Map
|
|
134
|
+
itemMap.set(itemId, new interfaces_1.DataEntity(transformed));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Create-new: push to the newItems array
|
|
138
|
+
newItems.push(new interfaces_1.DataEntity(transformed));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Sort newly created items by createdAt descending
|
|
142
|
+
if (newItems.length > 1) {
|
|
143
|
+
newItems.sort((a, b) => {
|
|
144
|
+
const timeA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
145
|
+
const timeB = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
146
|
+
return timeB - timeA;
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
return new interfaces_1.DataListEntity({
|
|
150
|
+
lastSk: baseResult.lastSk,
|
|
151
|
+
// Prepend newly created items to the top of the list
|
|
152
|
+
items: [...newItems, ...itemMap.values()],
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* List items from an external source (e.g., RDS/Elasticsearch) with an
|
|
157
|
+
* optional merge of pending async commands.
|
|
158
|
+
*
|
|
159
|
+
* When `mergeOptions.latestFlg` is true, the result is augmented with any
|
|
160
|
+
* pending writes the current user has not yet seen reflected in the query
|
|
161
|
+
* source:
|
|
162
|
+
*
|
|
163
|
+
* - **update** — the existing item is replaced in-place via `transformCommand`,
|
|
164
|
+
* preserving its position. `existing` is passed to the transformer so join
|
|
165
|
+
* data (e.g. related RDS rows) can be carried over.
|
|
166
|
+
* - **delete** — the item is removed and `total` is decremented.
|
|
167
|
+
* - **create-new** — the item is transformed, optionally filtered by
|
|
168
|
+
* `matchesFilter`, and prepended to the top of the result sorted by
|
|
169
|
+
* `updatedAt` descending. `total` is incremented.
|
|
170
|
+
*
|
|
171
|
+
* > **Sort-order note**: Prepended create-new items are not integrated into
|
|
172
|
+
* > the caller's sort order (e.g. by `name` or `code`). They will appear
|
|
173
|
+
* > at the top of the result until the async Stream → RDS sync completes and
|
|
174
|
+
* > the next read returns fully sorted data. This is intentional — the
|
|
175
|
+
* > guarantee is visibility, not sort position.
|
|
176
|
+
*
|
|
177
|
+
* > **Pagination note**: `total` reflects the adjusted count after merge.
|
|
178
|
+
* > However, prepended items sit outside the RDS `LIMIT`/`OFFSET` window, so
|
|
179
|
+
* > on page 2+ the caller may see a one-item overlap or gap until sync
|
|
180
|
+
* > completes. For most UX patterns (redirect-after-write, optimistic UI)
|
|
181
|
+
* > this is not noticeable.
|
|
182
|
+
*/
|
|
183
|
+
async listItems(query, mergeOptions, options) {
|
|
184
|
+
const baseResult = await query();
|
|
185
|
+
if (!mergeOptions?.latestFlg || !options) {
|
|
186
|
+
return baseResult;
|
|
187
|
+
}
|
|
188
|
+
const userContext = (0, user_1.getUserContext)(options.invokeContext);
|
|
189
|
+
const userId = userContext?.userId;
|
|
190
|
+
if (!userId)
|
|
191
|
+
return baseResult;
|
|
192
|
+
const tenantCode = userContext.tenantCode;
|
|
193
|
+
if (!tenantCode)
|
|
194
|
+
return baseResult;
|
|
195
|
+
const sessions = await this.sessionService.listByUser(userId, tenantCode, this.moduleTableName);
|
|
196
|
+
if (!sessions.length)
|
|
197
|
+
return baseResult;
|
|
198
|
+
this.logger.debug(`listItems merge — ${sessions.length} sessions`, {
|
|
199
|
+
tenantCode,
|
|
200
|
+
});
|
|
201
|
+
const itemMap = new Map(baseResult.items.map((item) => [item.id, item]));
|
|
202
|
+
const newItems = [];
|
|
203
|
+
let adjustedTotal = baseResult.total;
|
|
204
|
+
const skPrefix = `${this.moduleTableName}${constants_1.KEY_SEPARATOR}`;
|
|
205
|
+
for (const session of sessions) {
|
|
206
|
+
if (!session.sk.startsWith(skPrefix)) {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
const itemId = session.sk.slice(skPrefix.length);
|
|
210
|
+
const existing = itemMap.get(itemId);
|
|
211
|
+
let cmdPk;
|
|
212
|
+
let skBase;
|
|
213
|
+
const existingSk = existing?.sk;
|
|
214
|
+
const existingPk = existing?.pk;
|
|
215
|
+
if (existing && existingSk && existingPk) {
|
|
216
|
+
cmdPk = existingPk;
|
|
217
|
+
skBase = (0, key_1.removeSortKeyVersion)(existingSk);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// Fallback: Strictly parse the ID assuming a 2-segment PK format ({type}#{tenantCode})
|
|
221
|
+
const parsed = (0, key_1.parseTwoSegmentPkSkFromId)(itemId);
|
|
222
|
+
if (!parsed) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
cmdPk = parsed.pk;
|
|
226
|
+
skBase = parsed.skBase;
|
|
227
|
+
}
|
|
228
|
+
if (!cmdPk || !skBase) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const cmd = await this.commandService.getItem({
|
|
232
|
+
pk: cmdPk,
|
|
233
|
+
sk: (0, key_1.addSortKeyVersion)(skBase, session.version),
|
|
234
|
+
});
|
|
235
|
+
if (!cmd)
|
|
236
|
+
continue;
|
|
237
|
+
const transformed = mergeOptions.transformCommand(cmd, existing);
|
|
238
|
+
if (cmd.isDeleted) {
|
|
239
|
+
// Delete the item from the map
|
|
240
|
+
if (itemMap.has(itemId)) {
|
|
241
|
+
itemMap.delete(itemId);
|
|
242
|
+
adjustedTotal--;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else if (itemMap.has(itemId)) {
|
|
246
|
+
// Update: preserves original position
|
|
247
|
+
itemMap.set(itemId, transformed);
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
// Create-new: check if it satisfies the current query filters
|
|
251
|
+
if (!mergeOptions.matchesFilter ||
|
|
252
|
+
mergeOptions.matchesFilter(transformed)) {
|
|
253
|
+
newItems.push(transformed);
|
|
254
|
+
adjustedTotal++;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Sort newly created items by createdAt descending (safely fallback to 0 if field is missing)
|
|
259
|
+
if (newItems.length > 1) {
|
|
260
|
+
newItems.sort((a, b) => {
|
|
261
|
+
const timeA = a.updatedAt ? new Date(a.updatedAt).getTime() : 0;
|
|
262
|
+
const timeB = b.updatedAt ? new Date(b.updatedAt).getTime() : 0;
|
|
263
|
+
return timeB - timeA;
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
total: adjustedTotal,
|
|
268
|
+
items: [...newItems, ...itemMap.values()],
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
exports.Repository = Repository;
|
|
273
|
+
exports.Repository = Repository = Repository_1 = __decorate([
|
|
274
|
+
(0, common_1.Injectable)(),
|
|
275
|
+
__param(0, (0, common_1.Inject)(command_module_definition_1.MODULE_OPTIONS_TOKEN)),
|
|
276
|
+
__metadata("design:paramtypes", [Object, data_service_1.DataService,
|
|
277
|
+
command_service_1.CommandService,
|
|
278
|
+
session_service_1.SessionService])
|
|
279
|
+
], Repository);
|
|
280
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/commands/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,14 +10,15 @@ exports.DataStoreModule = void 0;
|
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
11
|
const dynamodb_service_1 = require("./dynamodb.service");
|
|
12
12
|
const s3_service_1 = require("./s3.service");
|
|
13
|
+
const session_service_1 = require("./session.service");
|
|
13
14
|
let DataStoreModule = class DataStoreModule {
|
|
14
15
|
};
|
|
15
16
|
exports.DataStoreModule = DataStoreModule;
|
|
16
17
|
exports.DataStoreModule = DataStoreModule = __decorate([
|
|
17
18
|
(0, common_1.Global)(),
|
|
18
19
|
(0, common_1.Module)({
|
|
19
|
-
providers: [dynamodb_service_1.DynamoDbService, s3_service_1.S3Service],
|
|
20
|
-
exports: [dynamodb_service_1.DynamoDbService, s3_service_1.S3Service],
|
|
20
|
+
providers: [dynamodb_service_1.DynamoDbService, s3_service_1.S3Service, session_service_1.SessionService],
|
|
21
|
+
exports: [dynamodb_service_1.DynamoDbService, s3_service_1.S3Service, session_service_1.SessionService],
|
|
21
22
|
})
|
|
22
23
|
], DataStoreModule);
|
|
23
24
|
//# sourceMappingURL=data-store.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-store.module.js","sourceRoot":"","sources":["../../src/data-store/data-store.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA+C;AAE/C,yDAAoD;AACpD,6CAAwC;
|
|
1
|
+
{"version":3,"file":"data-store.module.js","sourceRoot":"","sources":["../../src/data-store/data-store.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA+C;AAE/C,yDAAoD;AACpD,6CAAwC;AACxC,uDAAkD;AAO3C,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAL3B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,kCAAe,EAAE,sBAAS,EAAE,gCAAc,CAAC;QACvD,OAAO,EAAE,CAAC,kCAAe,EAAE,sBAAS,EAAE,gCAAc,CAAC;KACtD,CAAC;GACW,eAAe,CAAG"}
|
package/dist/data-store/index.js
CHANGED
|
@@ -17,4 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./data-store.module"), exports);
|
|
18
18
|
__exportStar(require("./dynamodb.service"), exports);
|
|
19
19
|
__exportStar(require("./s3.service"), exports);
|
|
20
|
+
__exportStar(require("./session.interface"), exports);
|
|
21
|
+
__exportStar(require("./session.service"), exports);
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-store/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,qDAAkC;AAClC,+CAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/data-store/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,qDAAkC;AAClC,+CAA4B;AAC5B,sDAAmC;AACnC,oDAAiC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface SessionItem {
|
|
2
|
+
/** pk: {userId}#{tenantCode} */
|
|
3
|
+
pk: string;
|
|
4
|
+
/** sk: {moduleTableName}#{itemId} — module `tableName` from CommandModule */
|
|
5
|
+
sk: string;
|
|
6
|
+
/** Version of the command — used to fetch exact command record */
|
|
7
|
+
version: number;
|
|
8
|
+
/** Unix timestamp TTL — auto-expired by DynamoDB */
|
|
9
|
+
ttl: number;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.interface.js","sourceRoot":"","sources":["../../src/data-store/session.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
import { DynamoDbService } from './dynamodb.service';
|
|
3
|
+
import { SessionItem } from './session.interface';
|
|
4
|
+
export declare class SessionService {
|
|
5
|
+
private readonly dynamoDbService;
|
|
6
|
+
private readonly config;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
private readonly sessionTableName;
|
|
9
|
+
private readonly ttlSeconds;
|
|
10
|
+
/** When unset or invalid, session rows are not written (RYW read path still works on empty). */
|
|
11
|
+
private readonly sessionWritesEnabled;
|
|
12
|
+
constructor(dynamoDbService: DynamoDbService, config: ConfigService);
|
|
13
|
+
/**
|
|
14
|
+
* Build session pk: {userId}#{tenantCode}
|
|
15
|
+
*/
|
|
16
|
+
private buildPk;
|
|
17
|
+
/**
|
|
18
|
+
* Build session sk: {moduleTableName}#{itemId}
|
|
19
|
+
*/
|
|
20
|
+
private buildSk;
|
|
21
|
+
private calculateTtl;
|
|
22
|
+
/**
|
|
23
|
+
* Write a session entry after a successful async command publish.
|
|
24
|
+
* Called by CommandService after publishAsync only.
|
|
25
|
+
* No-ops when RYW session TTL is not configured (`sessionWritesEnabled` is false).
|
|
26
|
+
*/
|
|
27
|
+
put(userId: string, tenantCode: string, moduleTableName: string, itemId: string, version: number): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Get a single session entry for a specific item.
|
|
30
|
+
* Returns `null` without querying DynamoDB when session writes are disabled.
|
|
31
|
+
*/
|
|
32
|
+
get(userId: string, tenantCode: string, moduleTableName: string, itemId: string): Promise<SessionItem | null>;
|
|
33
|
+
/**
|
|
34
|
+
* List session entries for a user scoped to a command module.
|
|
35
|
+
*
|
|
36
|
+
* Queries the session table by `{userId}#{tenantCode}` and filters to entries
|
|
37
|
+
* whose sort key begins with `{moduleTableName}#`, returning only sessions
|
|
38
|
+
* that belong to the given module.
|
|
39
|
+
*
|
|
40
|
+
* @param userId - The ID of the requesting user (from JWT `sub` claim).
|
|
41
|
+
* @param tenantCode - The tenant the user is operating under.
|
|
42
|
+
* @param moduleTableName - The `tableName` from `CommandModuleOptions` — used
|
|
43
|
+
* as the sort key prefix to scope results to a single command module.
|
|
44
|
+
* @param limit - Maximum number of session entries to fetch. Defaults to
|
|
45
|
+
* `MAX_SESSION_ENTRIES` to prevent silent truncation from the underlying
|
|
46
|
+
* DynamoDB query's default limit of 10. Callers should rarely need to
|
|
47
|
+
* override this.
|
|
48
|
+
* @returns The matching session entries, or an empty array if none exist or
|
|
49
|
+
* session writes are disabled.
|
|
50
|
+
*/
|
|
51
|
+
listByUser(userId: string, tenantCode: string, moduleTableName: string, limit?: number): Promise<SessionItem[]>;
|
|
52
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var SessionService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.SessionService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const config_1 = require("@nestjs/config");
|
|
16
|
+
const constants_1 = require("../constants");
|
|
17
|
+
const dynamodb_service_1 = require("./dynamodb.service");
|
|
18
|
+
/**
|
|
19
|
+
* Upper-bound for session entries fetched per user/module in a single query.
|
|
20
|
+
* Sessions are short-lived (RYW_SESSION_TTL_MINUTES) so this stays cheap.
|
|
21
|
+
* Prevents silent truncation from DynamoDbService's default limit of 10.
|
|
22
|
+
*/
|
|
23
|
+
const MAX_SESSION_ENTRIES = 1000;
|
|
24
|
+
const SESSION_TABLE_SUFFIX = 'session';
|
|
25
|
+
let SessionService = SessionService_1 = class SessionService {
|
|
26
|
+
constructor(dynamoDbService, config) {
|
|
27
|
+
this.dynamoDbService = dynamoDbService;
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.logger = new common_1.Logger(SessionService_1.name);
|
|
30
|
+
const nodeEnv = this.config.get('NODE_ENV');
|
|
31
|
+
const appName = this.config.get('APP_NAME');
|
|
32
|
+
this.sessionTableName = `${nodeEnv}-${appName}-${SESSION_TABLE_SUFFIX}`;
|
|
33
|
+
const ttlMinutes = Number(this.config.get('RYW_SESSION_TTL_MINUTES'));
|
|
34
|
+
this.sessionWritesEnabled = !Number.isNaN(ttlMinutes) && ttlMinutes > 0;
|
|
35
|
+
this.ttlSeconds = this.sessionWritesEnabled ? ttlMinutes * 60 : 0;
|
|
36
|
+
if (this.sessionWritesEnabled) {
|
|
37
|
+
this.logger.log(`Session table: ${this.sessionTableName}, RYW TTL: ${ttlMinutes}m`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.logger.log(`Session table: ${this.sessionTableName}, RYW session writes disabled (set RYW_SESSION_TTL_MINUTES to a positive number to enable)`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build session pk: {userId}#{tenantCode}
|
|
45
|
+
*/
|
|
46
|
+
buildPk(userId, tenantCode) {
|
|
47
|
+
return `${userId}${constants_1.KEY_SEPARATOR}${tenantCode}`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build session sk: {moduleTableName}#{itemId}
|
|
51
|
+
*/
|
|
52
|
+
buildSk(moduleTableName, itemId) {
|
|
53
|
+
return `${moduleTableName}${constants_1.KEY_SEPARATOR}${itemId}`;
|
|
54
|
+
}
|
|
55
|
+
calculateTtl() {
|
|
56
|
+
return Math.floor(Date.now() / 1000) + this.ttlSeconds;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Write a session entry after a successful async command publish.
|
|
60
|
+
* Called by CommandService after publishAsync only.
|
|
61
|
+
* No-ops when RYW session TTL is not configured (`sessionWritesEnabled` is false).
|
|
62
|
+
*/
|
|
63
|
+
async put(userId, tenantCode, moduleTableName, itemId, version) {
|
|
64
|
+
if (!this.sessionWritesEnabled) {
|
|
65
|
+
this.logger.debug('session put skipped: RYW_SESSION_TTL_MINUTES not enabled');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const item = {
|
|
69
|
+
pk: this.buildPk(userId, tenantCode),
|
|
70
|
+
sk: this.buildSk(moduleTableName, itemId),
|
|
71
|
+
version,
|
|
72
|
+
ttl: this.calculateTtl(),
|
|
73
|
+
};
|
|
74
|
+
this.logger.debug('session put::', item);
|
|
75
|
+
await this.dynamoDbService.putItem(this.sessionTableName, item);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get a single session entry for a specific item.
|
|
79
|
+
* Returns `null` without querying DynamoDB when session writes are disabled.
|
|
80
|
+
*/
|
|
81
|
+
async get(userId, tenantCode, moduleTableName, itemId) {
|
|
82
|
+
if (!this.sessionWritesEnabled) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const result = await this.dynamoDbService.getItem(this.sessionTableName, {
|
|
86
|
+
pk: this.buildPk(userId, tenantCode),
|
|
87
|
+
sk: this.buildSk(moduleTableName, itemId),
|
|
88
|
+
});
|
|
89
|
+
return result ?? null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* List session entries for a user scoped to a command module.
|
|
93
|
+
*
|
|
94
|
+
* Queries the session table by `{userId}#{tenantCode}` and filters to entries
|
|
95
|
+
* whose sort key begins with `{moduleTableName}#`, returning only sessions
|
|
96
|
+
* that belong to the given module.
|
|
97
|
+
*
|
|
98
|
+
* @param userId - The ID of the requesting user (from JWT `sub` claim).
|
|
99
|
+
* @param tenantCode - The tenant the user is operating under.
|
|
100
|
+
* @param moduleTableName - The `tableName` from `CommandModuleOptions` — used
|
|
101
|
+
* as the sort key prefix to scope results to a single command module.
|
|
102
|
+
* @param limit - Maximum number of session entries to fetch. Defaults to
|
|
103
|
+
* `MAX_SESSION_ENTRIES` to prevent silent truncation from the underlying
|
|
104
|
+
* DynamoDB query's default limit of 10. Callers should rarely need to
|
|
105
|
+
* override this.
|
|
106
|
+
* @returns The matching session entries, or an empty array if none exist or
|
|
107
|
+
* session writes are disabled.
|
|
108
|
+
*/
|
|
109
|
+
async listByUser(userId, tenantCode, moduleTableName, limit = MAX_SESSION_ENTRIES) {
|
|
110
|
+
if (!this.sessionWritesEnabled) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
const pk = this.buildPk(userId, tenantCode);
|
|
114
|
+
const skPrefix = `${moduleTableName}${constants_1.KEY_SEPARATOR}`;
|
|
115
|
+
const result = await this.dynamoDbService.listItemsByPk(this.sessionTableName, pk, {
|
|
116
|
+
skExpression: 'begins_with(sk, :skPrefix)',
|
|
117
|
+
skAttributeValues: { ':skPrefix': skPrefix },
|
|
118
|
+
}, undefined, limit);
|
|
119
|
+
return result?.items ?? [];
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
exports.SessionService = SessionService;
|
|
123
|
+
exports.SessionService = SessionService = SessionService_1 = __decorate([
|
|
124
|
+
(0, common_1.Injectable)(),
|
|
125
|
+
__metadata("design:paramtypes", [dynamodb_service_1.DynamoDbService,
|
|
126
|
+
config_1.ConfigService])
|
|
127
|
+
], SessionService);
|
|
128
|
+
//# sourceMappingURL=session.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../src/data-store/session.service.ts"],"names":[],"mappings":"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"}
|
package/dist/env.validation.d.ts
CHANGED
|
@@ -27,5 +27,6 @@ export declare class EnvironmentVariables {
|
|
|
27
27
|
SES_REGION: string;
|
|
28
28
|
SES_FROM_EMAIL: string;
|
|
29
29
|
REQUEST_BODY_SIZE_LIMIT: string;
|
|
30
|
+
RYW_SESSION_TTL_MINUTES: number;
|
|
30
31
|
}
|
|
31
32
|
export declare function getValidateConfig<T extends EnvironmentVariables>(cls?: ClassConstructor<T>): (config: Record<string, unknown>) => EnvironmentVariables;
|
package/dist/env.validation.js
CHANGED
|
@@ -120,6 +120,11 @@ __decorate([
|
|
|
120
120
|
(0, class_validator_1.IsOptional)(),
|
|
121
121
|
__metadata("design:type", String)
|
|
122
122
|
], EnvironmentVariables.prototype, "REQUEST_BODY_SIZE_LIMIT", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
(0, class_validator_1.IsNumber)(),
|
|
125
|
+
(0, class_validator_1.IsOptional)(),
|
|
126
|
+
__metadata("design:type", Number)
|
|
127
|
+
], EnvironmentVariables.prototype, "RYW_SESSION_TTL_MINUTES", void 0);
|
|
123
128
|
function getValidateConfig(cls) {
|
|
124
129
|
return function validate(config) {
|
|
125
130
|
const validatedConfig = (0, class_transformer_1.plainToInstance)(cls || EnvironmentVariables, config, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.validation.js","sourceRoot":"","sources":["../src/env.validation.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"env.validation.js","sourceRoot":"","sources":["../src/env.validation.ts"],"names":[],"mappings":";;;;;;;;;;;;AAyFA,8CAoBC;AA7GD,yDAAqE;AACrE,qDAQwB;AAExB,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,kCAAmB,CAAA;IACnB,kCAAmB,CAAA;IACnB,8BAAe,CAAA;AACjB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAED,MAAa,oBAAoB;CAqEhC;AArED,oDAqEC;AAnEC;IADC,IAAA,wBAAM,EAAC,WAAW,CAAC;;sDACC;AAErB;IADC,IAAA,0BAAQ,GAAE;;sDACK;AAIhB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;sDACG;AAGhB;IADC,IAAA,2BAAS,GAAE;;mEACkB;AAG9B;IADC,IAAA,0BAAQ,GAAE;;uDACM;AAIjB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;+DACY;AAGzB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;6DACY;AAEvB;IADC,IAAA,4BAAU,GAAE;;kEACe;AAG5B;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;yDACM;AAGnB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;uDACI;AAEjB;IADC,IAAA,0BAAQ,GAAE;;4DACW;AAItB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAGpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;wDACK;AAElB;IADC,IAAA,0BAAQ,GAAE;;6DACY;AAIvB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAGpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;wDACK;AAIlB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;8DACW;AAIxB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;0DACO;AAGpB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;wDACK;AAElB;IADC,IAAA,0BAAQ,GAAE;;4DACW;AAItB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;qEACkB;AAI/B;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;qEACkB;AAGjC,SAAgB,iBAAiB,CAC/B,GAAyB;IAEzB,OAAO,SAAS,QAAQ,CAAC,MAA+B;QACtD,MAAM,eAAe,GAAG,IAAA,mCAAe,EACrC,GAAG,IAAI,oBAAoB,EAC3B,MAAM,EACN;YACE,wBAAwB,EAAE,IAAI;SAC/B,CACF,CAAA;QACD,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,eAAe,EAAE;YAC3C,qBAAqB,EAAE,KAAK;SAC7B,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACpC,CAAC;QACD,OAAO,eAAe,CAAA;IACxB,CAAC,CAAA;AACH,CAAC"}
|
package/dist/helpers/index.d.ts
CHANGED
package/dist/helpers/index.js
CHANGED
|
@@ -21,6 +21,7 @@ __exportStar(require("./key"), exports);
|
|
|
21
21
|
__exportStar(require("./object"), exports);
|
|
22
22
|
__exportStar(require("./serializer"), exports);
|
|
23
23
|
__exportStar(require("./source"), exports);
|
|
24
|
+
__exportStar(require("./transform"), exports);
|
|
24
25
|
// Re-export serialization helpers for convenience
|
|
25
26
|
var serializer_1 = require("./serializer");
|
|
26
27
|
Object.defineProperty(exports, "deserializeToInternal", { enumerable: true, get: function () { return serializer_1.deserializeToInternal; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA0B;AAC1B,+CAA4B;AAC5B,wCAAqB;AACrB,2CAAwB;AACxB,+CAA4B;AAC5B,2CAAwB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA0B;AAC1B,+CAA4B;AAC5B,wCAAqB;AACrB,2CAAwB;AACxB,+CAA4B;AAC5B,2CAAwB;AACxB,8CAA2B;AAE3B,kDAAkD;AAClD,2CAAyE;AAAhE,mHAAA,qBAAqB,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AAEtC,QAAA,iBAAiB,GAC5B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB;IACtC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;IACzC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAA"}
|
package/dist/helpers/key.d.ts
CHANGED
|
@@ -2,6 +2,19 @@ export declare function addSortKeyVersion(sk: string, version: number): string;
|
|
|
2
2
|
export declare function getSortKeyVersion(sk: string): number;
|
|
3
3
|
export declare function removeSortKeyVersion(sk: string): string;
|
|
4
4
|
export declare function generateId(pk: string, sk: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* Inverse of {@link generateId}: extracts the base sort key from a composite id (`pk#skBase`).
|
|
7
|
+
*/
|
|
8
|
+
export declare function sortKeyBaseFromId(pk: string, itemId: string): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Parses a composite {@link generateId} when partition key is always
|
|
11
|
+
* `{type}#{tenantCode}` (exactly two `#`-separated segments). The remainder of
|
|
12
|
+
* `itemId` after that prefix is `skBase` (may contain `#`).
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseTwoSegmentPkSkFromId(itemId: string): {
|
|
15
|
+
pk: string;
|
|
16
|
+
skBase: string;
|
|
17
|
+
} | undefined;
|
|
5
18
|
export declare function getTenantCode(pk: string): string;
|
|
6
19
|
export declare function isS3AttributeKey(attributes: any): boolean;
|
|
7
20
|
export declare function toS3AttributeKey(bucket: string, key: string): string;
|
package/dist/helpers/key.js
CHANGED
|
@@ -5,6 +5,8 @@ exports.addSortKeyVersion = addSortKeyVersion;
|
|
|
5
5
|
exports.getSortKeyVersion = getSortKeyVersion;
|
|
6
6
|
exports.removeSortKeyVersion = removeSortKeyVersion;
|
|
7
7
|
exports.generateId = generateId;
|
|
8
|
+
exports.sortKeyBaseFromId = sortKeyBaseFromId;
|
|
9
|
+
exports.parseTwoSegmentPkSkFromId = parseTwoSegmentPkSkFromId;
|
|
8
10
|
exports.getTenantCode = getTenantCode;
|
|
9
11
|
exports.isS3AttributeKey = isS3AttributeKey;
|
|
10
12
|
exports.toS3AttributeKey = toS3AttributeKey;
|
|
@@ -31,6 +33,30 @@ function removeSortKeyVersion(sk) {
|
|
|
31
33
|
function generateId(pk, sk) {
|
|
32
34
|
return `${pk}${key_1.KEY_SEPARATOR}${removeSortKeyVersion(sk)}`;
|
|
33
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Inverse of {@link generateId}: extracts the base sort key from a composite id (`pk#skBase`).
|
|
38
|
+
*/
|
|
39
|
+
function sortKeyBaseFromId(pk, itemId) {
|
|
40
|
+
const prefix = `${pk}${key_1.KEY_SEPARATOR}`;
|
|
41
|
+
if (!itemId.startsWith(prefix)) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return itemId.slice(prefix.length);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Parses a composite {@link generateId} when partition key is always
|
|
48
|
+
* `{type}#{tenantCode}` (exactly two `#`-separated segments). The remainder of
|
|
49
|
+
* `itemId` after that prefix is `skBase` (may contain `#`).
|
|
50
|
+
*/
|
|
51
|
+
function parseTwoSegmentPkSkFromId(itemId) {
|
|
52
|
+
const parts = itemId.split(key_1.KEY_SEPARATOR);
|
|
53
|
+
if (parts.length < 3) {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
const pk = `${parts[0]}${key_1.KEY_SEPARATOR}${parts[1]}`;
|
|
57
|
+
const skBase = parts.slice(2).join(key_1.KEY_SEPARATOR);
|
|
58
|
+
return { pk, skBase };
|
|
59
|
+
}
|
|
34
60
|
function getTenantCode(pk) {
|
|
35
61
|
const lastDivIdx = pk.lastIndexOf(key_1.KEY_SEPARATOR);
|
|
36
62
|
if (lastDivIdx === -1) {
|
package/dist/helpers/key.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/helpers/key.ts"],"names":[],"mappings":";;;AAGA,8CAEC;AAED,8CAMC;AAED,oDAMC;AAED,gCAEC;AAED,sCAMC;AAKD,4CAKC;AAED,4CAEC;AAED,kDASC;
|
|
1
|
+
{"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/helpers/key.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CommandModel, DataModel } from '../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Transform a CommandModel into a DataModel.
|
|
4
|
+
*
|
|
5
|
+
* Shared by DataService.publish and Repository.
|
|
6
|
+
*/
|
|
7
|
+
export declare function transformCommandToData(cmd: CommandModel, existing?: DataModel): DataModel;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transformCommandToData = transformCommandToData;
|
|
4
|
+
const key_1 = require("./key");
|
|
5
|
+
/**
|
|
6
|
+
* Transform a CommandModel into a DataModel.
|
|
7
|
+
*
|
|
8
|
+
* Shared by DataService.publish and Repository.
|
|
9
|
+
*/
|
|
10
|
+
function transformCommandToData(cmd, existing) {
|
|
11
|
+
return {
|
|
12
|
+
...existing,
|
|
13
|
+
pk: cmd.pk,
|
|
14
|
+
sk: (0, key_1.removeSortKeyVersion)(cmd.sk),
|
|
15
|
+
id: cmd.id,
|
|
16
|
+
code: cmd.code,
|
|
17
|
+
name: cmd.name,
|
|
18
|
+
version: cmd.version,
|
|
19
|
+
tenantCode: cmd.tenantCode,
|
|
20
|
+
type: cmd.type,
|
|
21
|
+
seq: cmd.seq,
|
|
22
|
+
attributes: cmd.attributes,
|
|
23
|
+
cpk: cmd.pk,
|
|
24
|
+
csk: cmd.sk,
|
|
25
|
+
isDeleted: cmd.isDeleted,
|
|
26
|
+
ttl: cmd.ttl,
|
|
27
|
+
requestId: cmd.requestId,
|
|
28
|
+
createdAt: existing?.createdAt ?? cmd.createdAt,
|
|
29
|
+
updatedAt: cmd.updatedAt,
|
|
30
|
+
createdBy: existing?.createdBy ?? cmd.createdBy,
|
|
31
|
+
updatedBy: cmd.updatedBy,
|
|
32
|
+
createdIp: existing?.createdIp ?? cmd.createdIp,
|
|
33
|
+
updatedIp: cmd.updatedIp,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/helpers/transform.ts"],"names":[],"mappings":";;AAQA,wDA4BC;AAnCD,+BAA4C;AAE5C;;;;GAIG;AACH,SAAgB,sBAAsB,CACpC,GAAiB,EACjB,QAAoB;IAEpB,OAAO;QACL,GAAG,QAAQ;QACX,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,EAAE,EAAE,IAAA,0BAAoB,EAAC,GAAG,CAAC,EAAE,CAAC;QAChC,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,GAAG,EAAE,GAAG,CAAC,EAAE;QACX,GAAG,EAAE,GAAG,CAAC,EAAE;QACX,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG,CAAC,SAAS;QAC/C,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG,CAAC,SAAS;QAC/C,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG,CAAC,SAAS;QAC/C,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mbc-cqrs-serverless/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "CQRS and event base core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mbc",
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"serverless-step-functions-local": "^0.5.1",
|
|
89
89
|
"supertest": "^7.0.0"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "db6d140ec2d07348a3febdcfa7d2a3c9ec16aa85"
|
|
92
92
|
}
|