@mbc-cqrs-serverless/core 1.1.6 → 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.
Files changed (37) hide show
  1. package/dist/commands/command.module.js +3 -0
  2. package/dist/commands/command.module.js.map +1 -1
  3. package/dist/commands/command.service.d.ts +9 -1
  4. package/dist/commands/command.service.js +33 -2
  5. package/dist/commands/command.service.js.map +1 -1
  6. package/dist/commands/data.service.js +3 -26
  7. package/dist/commands/data.service.js.map +1 -1
  8. package/dist/commands/index.d.ts +1 -0
  9. package/dist/commands/index.js +1 -0
  10. package/dist/commands/index.js.map +1 -1
  11. package/dist/commands/repository.d.ts +102 -0
  12. package/dist/commands/repository.js +280 -0
  13. package/dist/commands/repository.js.map +1 -0
  14. package/dist/data-store/data-store.module.js +3 -2
  15. package/dist/data-store/data-store.module.js.map +1 -1
  16. package/dist/data-store/index.d.ts +2 -0
  17. package/dist/data-store/index.js +2 -0
  18. package/dist/data-store/index.js.map +1 -1
  19. package/dist/data-store/session.interface.d.ts +10 -0
  20. package/dist/data-store/session.interface.js +3 -0
  21. package/dist/data-store/session.interface.js.map +1 -0
  22. package/dist/data-store/session.service.d.ts +52 -0
  23. package/dist/data-store/session.service.js +128 -0
  24. package/dist/data-store/session.service.js.map +1 -0
  25. package/dist/env.validation.d.ts +1 -0
  26. package/dist/env.validation.js +5 -0
  27. package/dist/env.validation.js.map +1 -1
  28. package/dist/helpers/index.d.ts +1 -0
  29. package/dist/helpers/index.js +1 -0
  30. package/dist/helpers/index.js.map +1 -1
  31. package/dist/helpers/key.d.ts +13 -0
  32. package/dist/helpers/key.js +26 -0
  33. package/dist/helpers/key.js.map +1 -1
  34. package/dist/helpers/transform.d.ts +7 -0
  35. package/dist/helpers/transform.js +36 -0
  36. package/dist/helpers/transform.js.map +1 -0
  37. 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;AAqBnC,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;IAnBzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,EAAE;QACX,SAAS,EAAE;YACT,0BAAe;YACf,gCAAc;YACd,0BAAW;YACX,wBAAU;YACV,gCAAc;YACd,2CAAmB;YACnB,0CAAkB;SACnB;QACD,OAAO,EAAE;YACP,gCAAc;YACd,0BAAW;YACX,gCAAc;YACd,2CAAmB;YACnB,wBAAU;SACX;KACF,CAAC;GACW,aAAa,CAkBzB"}
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 data = await this.getItem({ pk, sk });
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":"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"}
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"}
@@ -5,3 +5,4 @@ export * from './data.service';
5
5
  export * from './enums';
6
6
  export * from './handlers';
7
7
  export * from './history.service';
8
+ export * from './repository';
@@ -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;AAOjC,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,CAAC;QACvC,OAAO,EAAE,CAAC,kCAAe,EAAE,sBAAS,CAAC;KACtC,CAAC;GACW,eAAe,CAAG"}
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"}
@@ -1,3 +1,5 @@
1
1
  export * from './data-store.module';
2
2
  export * from './dynamodb.service';
3
3
  export * from './s3.service';
4
+ export * from './session.interface';
5
+ export * from './session.service';
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=session.interface.js.map
@@ -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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"}
@@ -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;
@@ -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":";;;;;;;;;;;;AAqFA,8CAoBC;AAzGD,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;CAiEhC;AAjED,oDAiEC;AA/DC;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;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"}
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"}
@@ -4,5 +4,6 @@ export * from './key';
4
4
  export * from './object';
5
5
  export * from './serializer';
6
6
  export * from './source';
7
+ export * from './transform';
7
8
  export { deserializeToInternal, serializeToExternal } from './serializer';
8
9
  export declare const IS_LAMBDA_RUNNING: boolean;
@@ -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;AAExB,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"}
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"}
@@ -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;
@@ -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) {
@@ -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;AA1DD,4CAAkD;AAClD,0CAA+E;AAE/E,SAAgB,iBAAiB,CAAC,EAAU,EAAE,OAAe;IAC3D,OAAO,GAAG,oBAAoB,CAAC,EAAE,CAAC,GAAG,mBAAa,GAAG,OAAO,EAAE,CAAA;AAChE,CAAC;AAED,SAAgB,iBAAiB,CAAC,EAAU;IAC1C,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,mBAAa,CAAC,CAAA;IAChD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,oBAAc,CAAA;IACvB,CAAC;IACD,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;AACtC,CAAC;AAED,SAAgB,oBAAoB,CAAC,EAAU;IAC7C,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,mBAAa,CAAC,CAAA;IAChD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AACpC,CAAC;AAED,SAAgB,UAAU,CAAC,EAAU,EAAE,EAAU;IAC/C,OAAO,GAAG,EAAE,GAAG,mBAAa,GAAG,oBAAoB,CAAC,EAAE,CAAC,EAAE,CAAA;AAC3D,CAAC;AAED,SAAgB,aAAa,CAAC,EAAU;IACtC,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,mBAAa,CAAC,CAAA;IAChD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAM;IACR,CAAC;IACD,OAAO,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,SAAS,GAAG,OAAO,CAAA;AACzB,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAA;AAEtC,SAAgB,gBAAgB,CAAC,UAAe;IAC9C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAgB,gBAAgB,CAAC,MAAc,EAAE,GAAW;IAC1D,OAAO,GAAG,SAAS,GAAG,MAAM,IAAI,GAAG,EAAE,CAAA;AACvC,CAAC;AAED,SAAgB,mBAAmB,CAAC,KAAa;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IACrD,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;IAEvC,OAAO;QACL,MAAM;QACN,GAAG;KACJ,CAAA;AACH,CAAC;AAEM,MAAM,QAAQ,GAAG,CAAC,UAAmB,EAAE,EAAE,CAC9C,SAAS,mBAAa,GAAG,UAAU,IAAI,+BAAmB,EAAE,CAAA;AADjD,QAAA,QAAQ,YACyC;AAEvD,MAAM,KAAK,GAAG,CAAC,UAAmB,EAAE,EAAE,CAC3C,MAAM,mBAAa,GAAG,UAAU,IAAI,+BAAmB,EAAE,CAAA;AAD9C,QAAA,KAAK,SACyC;AAEpD,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,MAAM,mBAAa,GAAG,SAAS,EAAE,CAAA;AAAhE,QAAA,KAAK,SAA2D"}
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.1.6",
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": "a2633ca2c02c4b0cbb86297d30110c39a7d2c502"
91
+ "gitHead": "db6d140ec2d07348a3febdcfa7d2a3c9ec16aa85"
92
92
  }