@mbc-cqrs-serverless/task 0.1.11-beta.0 → 0.1.12-beta.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 (55) hide show
  1. package/dist/dto/create-task.dto.d.ts +6 -0
  2. package/dist/dto/create-task.dto.js +34 -0
  3. package/dist/dto/create-task.dto.js.map +1 -0
  4. package/dist/dto/index.d.ts +1 -0
  5. package/dist/dto/index.js +18 -0
  6. package/dist/dto/index.js.map +1 -0
  7. package/dist/entity/index.d.ts +2 -0
  8. package/dist/entity/index.js +19 -0
  9. package/dist/entity/index.js.map +1 -0
  10. package/dist/entity/task-list.entity.d.ts +6 -0
  11. package/dist/entity/task-list.entity.js +12 -0
  12. package/dist/entity/task-list.entity.js.map +1 -0
  13. package/dist/entity/task.entity.d.ts +11 -0
  14. package/dist/entity/task.entity.js +12 -0
  15. package/dist/entity/task.entity.js.map +1 -0
  16. package/dist/enums/index.d.ts +1 -0
  17. package/dist/enums/index.js +18 -0
  18. package/dist/enums/index.js.map +1 -0
  19. package/dist/enums/status.enum.d.ts +10 -0
  20. package/dist/enums/status.enum.js +15 -0
  21. package/dist/enums/status.enum.js.map +1 -0
  22. package/dist/event/index.d.ts +5 -0
  23. package/dist/event/index.js +22 -0
  24. package/dist/event/index.js.map +1 -0
  25. package/dist/event/task.event.d.ts +22 -0
  26. package/dist/event/task.event.handler.d.ts +10 -0
  27. package/dist/event/task.event.handler.js +37 -0
  28. package/dist/event/task.event.handler.js.map +1 -0
  29. package/dist/event/task.event.js +34 -0
  30. package/dist/event/task.event.js.map +1 -0
  31. package/dist/event/task.queue.event-factory.interface.d.ts +10 -0
  32. package/dist/event/task.queue.event-factory.interface.js +20 -0
  33. package/dist/event/task.queue.event-factory.interface.js.map +1 -0
  34. package/dist/event/task.queue.event.d.ts +18 -0
  35. package/dist/event/task.queue.event.handler.d.ts +18 -0
  36. package/dist/event/task.queue.event.handler.js +66 -0
  37. package/dist/event/task.queue.event.handler.js.map +1 -0
  38. package/dist/event/task.queue.event.js +20 -0
  39. package/dist/event/task.queue.event.js.map +1 -0
  40. package/dist/index.d.ts +7 -0
  41. package/dist/index.js +24 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/task.controller.d.ts +11 -0
  44. package/dist/task.controller.js +70 -0
  45. package/dist/task.controller.js.map +1 -0
  46. package/dist/task.module-definition.d.ts +8 -0
  47. package/dist/task.module-definition.js +8 -0
  48. package/dist/task.module-definition.js.map +1 -0
  49. package/dist/task.module.d.ts +5 -0
  50. package/dist/task.module.js +46 -0
  51. package/dist/task.module.js.map +1 -0
  52. package/dist/task.service.d.ts +29 -0
  53. package/dist/task.service.js +87 -0
  54. package/dist/task.service.js.map +1 -0
  55. package/package.json +3 -3
@@ -0,0 +1,6 @@
1
+ export declare class CreateTaskDto {
2
+ tenantCode: string;
3
+ taskType: string;
4
+ name?: string;
5
+ input: Record<string, any>;
6
+ }
@@ -0,0 +1,34 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CreateTaskDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class CreateTaskDto {
15
+ }
16
+ exports.CreateTaskDto = CreateTaskDto;
17
+ __decorate([
18
+ (0, class_validator_1.IsString)(),
19
+ __metadata("design:type", String)
20
+ ], CreateTaskDto.prototype, "tenantCode", void 0);
21
+ __decorate([
22
+ (0, class_validator_1.IsString)(),
23
+ __metadata("design:type", String)
24
+ ], CreateTaskDto.prototype, "taskType", void 0);
25
+ __decorate([
26
+ (0, class_validator_1.IsString)(),
27
+ (0, class_validator_1.IsOptional)(),
28
+ __metadata("design:type", String)
29
+ ], CreateTaskDto.prototype, "name", void 0);
30
+ __decorate([
31
+ (0, class_validator_1.IsObject)(),
32
+ __metadata("design:type", Object)
33
+ ], CreateTaskDto.prototype, "input", void 0);
34
+ //# sourceMappingURL=create-task.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-task.dto.js","sourceRoot":"","sources":["../../src/dto/create-task.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAgE;AAEhE,MAAa,aAAa;CAazB;AAbD,sCAaC;AAXC;IADC,IAAA,0BAAQ,GAAE;;iDACO;AAGlB;IADC,IAAA,0BAAQ,GAAE;;+CACK;AAIhB;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;2CACA;AAGb;IADC,IAAA,0BAAQ,GAAE;;4CACe"}
@@ -0,0 +1 @@
1
+ export * from './create-task.dto';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./create-task.dto"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dto/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC"}
@@ -0,0 +1,2 @@
1
+ export * from './task.entity';
2
+ export * from './task-list.entity';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./task.entity"), exports);
18
+ __exportStar(require("./task-list.entity"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entity/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,qDAAkC"}
@@ -0,0 +1,6 @@
1
+ import { DataListEntity } from '@mbc-cqrs-serverless/core';
2
+ import { TaskEntity } from './task.entity';
3
+ export declare class TaskListEntity extends DataListEntity {
4
+ items: TaskEntity[];
5
+ constructor(partial: Partial<TaskListEntity>);
6
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskListEntity = void 0;
4
+ const core_1 = require("@mbc-cqrs-serverless/core");
5
+ class TaskListEntity extends core_1.DataListEntity {
6
+ constructor(partial) {
7
+ super(partial);
8
+ Object.assign(this, partial);
9
+ }
10
+ }
11
+ exports.TaskListEntity = TaskListEntity;
12
+ //# sourceMappingURL=task-list.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-list.entity.js","sourceRoot":"","sources":["../../src/entity/task-list.entity.ts"],"names":[],"mappings":";;;AAAA,oDAA0D;AAI1D,MAAa,cAAe,SAAQ,qBAAc;IAGhD,YAAY,OAAgC;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AARD,wCAQC"}
@@ -0,0 +1,11 @@
1
+ import { CommandEntity } from '@mbc-cqrs-serverless/core';
2
+ import { TaskStatusEnum } from '../enums/status.enum';
3
+ export declare class TaskEntity extends CommandEntity {
4
+ status?: TaskStatusEnum;
5
+ input: Record<string, any>;
6
+ attributes?: {
7
+ result?: any;
8
+ error?: any;
9
+ };
10
+ constructor(partial: Partial<TaskEntity>);
11
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskEntity = void 0;
4
+ const core_1 = require("@mbc-cqrs-serverless/core");
5
+ class TaskEntity extends core_1.CommandEntity {
6
+ constructor(partial) {
7
+ super();
8
+ Object.assign(this, partial);
9
+ }
10
+ }
11
+ exports.TaskEntity = TaskEntity;
12
+ //# sourceMappingURL=task.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.entity.js","sourceRoot":"","sources":["../../src/entity/task.entity.ts"],"names":[],"mappings":";;;AAAA,oDAAyD;AAkBzD,MAAa,UAAW,SAAQ,oBAAa;IAQ3C,YAAY,OAA4B;QACtC,KAAK,EAAE,CAAA;QACP,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AAZD,gCAYC"}
@@ -0,0 +1 @@
1
+ export * from './status.enum';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./status.enum"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enums/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B"}
@@ -0,0 +1,10 @@
1
+ export declare enum TaskStatusEnum {
2
+ CREATED = "CREATED",
3
+ QUEUED = "QUEUED",
4
+ PROCESSING = "PROCESSING",
5
+ STARTED = "STARTED",
6
+ FINISHED = "FINISHED",
7
+ COMPLETED = "COMPLETED",
8
+ ERRORED = "ERRORED",
9
+ FAILED = "FAILED"
10
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskStatusEnum = void 0;
4
+ var TaskStatusEnum;
5
+ (function (TaskStatusEnum) {
6
+ TaskStatusEnum["CREATED"] = "CREATED";
7
+ TaskStatusEnum["QUEUED"] = "QUEUED";
8
+ TaskStatusEnum["PROCESSING"] = "PROCESSING";
9
+ TaskStatusEnum["STARTED"] = "STARTED";
10
+ TaskStatusEnum["FINISHED"] = "FINISHED";
11
+ TaskStatusEnum["COMPLETED"] = "COMPLETED";
12
+ TaskStatusEnum["ERRORED"] = "ERRORED";
13
+ TaskStatusEnum["FAILED"] = "FAILED";
14
+ })(TaskStatusEnum || (exports.TaskStatusEnum = TaskStatusEnum = {}));
15
+ //# sourceMappingURL=status.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.enum.js","sourceRoot":"","sources":["../../src/enums/status.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,cASX;AATD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,mCAAiB,CAAA;IACjB,2CAAyB,CAAA;IACzB,qCAAmB,CAAA;IACnB,uCAAqB,CAAA;IACrB,yCAAuB,CAAA;IACvB,qCAAmB,CAAA;IACnB,mCAAiB,CAAA;AACnB,CAAC,EATW,cAAc,8BAAd,cAAc,QASzB"}
@@ -0,0 +1,5 @@
1
+ export * from './task.event';
2
+ export * from './task.event.handler';
3
+ export * from './task.queue.event';
4
+ export * from './task.queue.event.handler';
5
+ export * from './task.queue.event-factory.interface';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./task.event"), exports);
18
+ __exportStar(require("./task.event.handler"), exports);
19
+ __exportStar(require("./task.queue.event"), exports);
20
+ __exportStar(require("./task.queue.event.handler"), exports);
21
+ __exportStar(require("./task.queue.event-factory.interface"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/event/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,uDAAoC;AACpC,qDAAkC;AAClC,6DAA0C;AAC1C,uEAAoD"}
@@ -0,0 +1,22 @@
1
+ import { DetailKey, IEvent } from '@mbc-cqrs-serverless/core';
2
+ import { DynamoDBRecord, StreamRecord } from 'aws-lambda';
3
+ import { TaskEntity } from '../entity/task.entity';
4
+ export declare const TASK_EVENT_ACTION = "task-execute";
5
+ export declare class TaskEvent implements IEvent, DynamoDBRecord {
6
+ source: string;
7
+ awsRegion?: string | undefined;
8
+ dynamodb?: StreamRecord | undefined;
9
+ eventID?: string | undefined;
10
+ eventName?: 'INSERT' | 'MODIFY' | 'REMOVE' | undefined;
11
+ eventSource?: string | undefined;
12
+ eventSourceARN?: string | undefined;
13
+ eventVersion?: string | undefined;
14
+ userIdentity?: any;
15
+ private _taskKey;
16
+ private _taskEntity?;
17
+ constructor(event?: Partial<TaskEvent>);
18
+ get tableName(): string;
19
+ fromDynamoDBRecord(record: DynamoDBRecord): TaskEvent;
20
+ get taskEntity(): TaskEntity;
21
+ get taskKey(): DetailKey;
22
+ }
@@ -0,0 +1,10 @@
1
+ import { IEventHandler, SnsService } from '@mbc-cqrs-serverless/core';
2
+ import { TaskService } from '../task.service';
3
+ import { TaskEvent } from './task.event';
4
+ export declare class TaskEventHandler implements IEventHandler<TaskEvent> {
5
+ private readonly snsService;
6
+ private readonly taskService;
7
+ private readonly logger;
8
+ constructor(snsService: SnsService, taskService: TaskService);
9
+ execute(event: TaskEvent): Promise<any>;
10
+ }
@@ -0,0 +1,37 @@
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 TaskEventHandler_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.TaskEventHandler = void 0;
14
+ const core_1 = require("@mbc-cqrs-serverless/core");
15
+ const common_1 = require("@nestjs/common");
16
+ const status_enum_1 = require("../enums/status.enum");
17
+ const task_service_1 = require("../task.service");
18
+ const task_event_1 = require("./task.event");
19
+ let TaskEventHandler = TaskEventHandler_1 = class TaskEventHandler {
20
+ constructor(snsService, taskService) {
21
+ this.snsService = snsService;
22
+ this.taskService = taskService;
23
+ this.logger = new common_1.Logger(TaskEventHandler_1.name);
24
+ }
25
+ async execute(event) {
26
+ this.logger.debug('task event executing::', event);
27
+ await this.snsService.publish({ action: task_event_1.TASK_EVENT_ACTION, ...event });
28
+ return await this.taskService.updateStatus(event.taskKey, status_enum_1.TaskStatusEnum.QUEUED);
29
+ }
30
+ };
31
+ exports.TaskEventHandler = TaskEventHandler;
32
+ exports.TaskEventHandler = TaskEventHandler = TaskEventHandler_1 = __decorate([
33
+ (0, core_1.EventHandler)(task_event_1.TaskEvent),
34
+ __metadata("design:paramtypes", [core_1.SnsService,
35
+ task_service_1.TaskService])
36
+ ], TaskEventHandler);
37
+ //# sourceMappingURL=task.event.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.event.handler.js","sourceRoot":"","sources":["../../src/event/task.event.handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,oDAIkC;AAClC,2CAAuC;AAEvC,sDAAqD;AACrD,kDAA6C;AAC7C,6CAA2D;AAGpD,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAG3B,YACmB,UAAsB,EACtB,WAAwB;QADxB,eAAU,GAAV,UAAU,CAAY;QACtB,gBAAW,GAAX,WAAW,CAAa;QAJ1B,WAAM,GAAG,IAAI,eAAM,CAAC,kBAAgB,CAAC,IAAI,CAAC,CAAA;IAKxD,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAgB;QAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAA;QAElD,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,8BAAiB,EAAE,GAAG,KAAK,EAAE,CAAC,CAAA;QAEtE,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CACxC,KAAK,CAAC,OAAO,EACb,4BAAc,CAAC,MAAM,CACtB,CAAA;IACH,CAAC;CACF,CAAA;AAlBY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,mBAAY,EAAC,sBAAS,CAAC;qCAKS,iBAAU;QACT,0BAAW;GALhC,gBAAgB,CAkB5B"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskEvent = exports.TASK_EVENT_ACTION = void 0;
4
+ const util_dynamodb_1 = require("@aws-sdk/util-dynamodb");
5
+ const core_1 = require("@mbc-cqrs-serverless/core");
6
+ exports.TASK_EVENT_ACTION = 'task-execute';
7
+ class TaskEvent {
8
+ constructor(event) {
9
+ Object.assign(this, event);
10
+ }
11
+ get tableName() {
12
+ return (0, core_1.getResourceNameFromArn)(this.source);
13
+ }
14
+ fromDynamoDBRecord(record) {
15
+ Object.assign(this, record, {
16
+ source: record.eventSourceARN,
17
+ });
18
+ return this;
19
+ }
20
+ get taskEntity() {
21
+ if (!this._taskEntity) {
22
+ this._taskEntity = (0, util_dynamodb_1.unmarshall)(this.dynamodb?.NewImage);
23
+ }
24
+ return this._taskEntity;
25
+ }
26
+ get taskKey() {
27
+ if (!this._taskKey) {
28
+ this._taskKey = (0, util_dynamodb_1.unmarshall)(this.dynamodb?.Keys);
29
+ }
30
+ return this._taskKey;
31
+ }
32
+ }
33
+ exports.TaskEvent = TaskEvent;
34
+ //# sourceMappingURL=task.event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.event.js","sourceRoot":"","sources":["../../src/event/task.event.ts"],"names":[],"mappings":";;;AACA,0DAAmD;AACnD,oDAIkC;AAKrB,QAAA,iBAAiB,GAAG,cAAc,CAAA;AAE/C,MAAa,SAAS;IAcpB,YAAY,KAA0B;QACpC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAA,6BAAsB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC5C,CAAC;IAED,kBAAkB,CAAC,MAAsB;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;YAC1B,MAAM,EAAE,MAAM,CAAC,cAAc;SAC9B,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,IAAA,0BAAU,EAC3B,IAAI,CAAC,QAAQ,EAAE,QAA6C,CAC/C,CAAA;QACjB,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED,IAAI,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAA,0BAAU,EACxB,IAAI,CAAC,QAAQ,EAAE,IAAyC,CAC5C,CAAA;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;CACF;AAhDD,8BAgDC"}
@@ -0,0 +1,10 @@
1
+ import { DefaultEventFactory, IEvent } from '@mbc-cqrs-serverless/core';
2
+ import { SQSEvent } from 'aws-lambda';
3
+ import { TaskQueueEvent } from './task.queue.event';
4
+ export declare const DEFAULT_TASK_ACTION_QUEUE = "task-action-queue";
5
+ export interface ITaskQueueEventFactory<TEvent extends IEvent = any> {
6
+ transformTask(event: TaskQueueEvent): Promise<TEvent[]>;
7
+ }
8
+ export declare class EventFactoryAddedTask extends DefaultEventFactory {
9
+ transformSqs(event: SQSEvent): Promise<IEvent[]>;
10
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventFactoryAddedTask = exports.DEFAULT_TASK_ACTION_QUEUE = void 0;
4
+ const core_1 = require("@mbc-cqrs-serverless/core");
5
+ const task_queue_event_1 = require("./task.queue.event");
6
+ exports.DEFAULT_TASK_ACTION_QUEUE = 'task-action-queue';
7
+ class EventFactoryAddedTask extends core_1.DefaultEventFactory {
8
+ async transformSqs(event) {
9
+ const curEvents = await super.transformSqs(event);
10
+ const taskEvents = event.Records.map((record) => {
11
+ if (record.eventSourceARN.endsWith(exports.DEFAULT_TASK_ACTION_QUEUE)) {
12
+ return new task_queue_event_1.TaskQueueEvent().fromSqsRecord(record);
13
+ }
14
+ return undefined;
15
+ }).filter((event) => !!event);
16
+ return [...taskEvents, ...curEvents];
17
+ }
18
+ }
19
+ exports.EventFactoryAddedTask = EventFactoryAddedTask;
20
+ //# sourceMappingURL=task.queue.event-factory.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.queue.event-factory.interface.js","sourceRoot":"","sources":["../../src/event/task.queue.event-factory.interface.ts"],"names":[],"mappings":";;;AAAA,oDAAuE;AAGvE,yDAAmD;AAEtC,QAAA,yBAAyB,GAAG,mBAAmB,CAAA;AAM5D,MAAa,qBAAsB,SAAQ,0BAAmB;IAC5D,KAAK,CAAC,YAAY,CAAC,KAAe;QAChC,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9C,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,iCAAyB,CAAC,EAAE,CAAC;gBAC9D,OAAO,IAAI,iCAAc,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YACnD,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAE7B,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC,CAAA;IACtC,CAAC;CACF;AAZD,sDAYC"}
@@ -0,0 +1,18 @@
1
+ import { IEvent } from '@mbc-cqrs-serverless/core';
2
+ import { SQSMessageAttributes, SQSRecord, SQSRecordAttributes } from 'aws-lambda';
3
+ import { TaskEvent } from './task.event';
4
+ export declare class TaskQueueEvent implements IEvent, SQSRecord {
5
+ source: string;
6
+ messageId: string;
7
+ receiptHandle: string;
8
+ body: string;
9
+ attributes: SQSRecordAttributes;
10
+ messageAttributes: SQSMessageAttributes;
11
+ md5OfBody: string;
12
+ eventSource: string;
13
+ eventSourceARN: string;
14
+ awsRegion: string;
15
+ private _taskEvent?;
16
+ fromSqsRecord(record: SQSRecord): TaskQueueEvent;
17
+ get taskEvent(): TaskEvent;
18
+ }
@@ -0,0 +1,18 @@
1
+ import { IEventHandler } from '@mbc-cqrs-serverless/core';
2
+ import { OnModuleInit } from '@nestjs/common';
3
+ import { ConfigService } from '@nestjs/config';
4
+ import { ModuleRef } from '@nestjs/core';
5
+ import { TaskService } from '../task.service';
6
+ import { TaskQueueEvent } from './task.queue.event';
7
+ import { ITaskQueueEventFactory } from './task.queue.event-factory.interface';
8
+ export declare class TaskQueueEventHandler implements IEventHandler<TaskQueueEvent>, OnModuleInit {
9
+ private readonly configService;
10
+ private readonly moduleRef;
11
+ private readonly taskService;
12
+ private readonly eventFactory;
13
+ private readonly logger;
14
+ private eventBus;
15
+ constructor(configService: ConfigService, moduleRef: ModuleRef, taskService: TaskService, eventFactory: ITaskQueueEventFactory);
16
+ onModuleInit(): void;
17
+ execute(event: TaskQueueEvent): Promise<any>;
18
+ }
@@ -0,0 +1,66 @@
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 TaskQueueEventHandler_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.TaskQueueEventHandler = void 0;
17
+ const core_1 = require("@mbc-cqrs-serverless/core");
18
+ const common_1 = require("@nestjs/common");
19
+ const config_1 = require("@nestjs/config");
20
+ const core_2 = require("@nestjs/core");
21
+ const status_enum_1 = require("../enums/status.enum");
22
+ const task_module_definition_1 = require("../task.module-definition");
23
+ const task_service_1 = require("../task.service");
24
+ const task_queue_event_1 = require("./task.queue.event");
25
+ let TaskQueueEventHandler = TaskQueueEventHandler_1 = class TaskQueueEventHandler {
26
+ constructor(configService, moduleRef, taskService, eventFactory) {
27
+ this.configService = configService;
28
+ this.moduleRef = moduleRef;
29
+ this.taskService = taskService;
30
+ this.eventFactory = eventFactory;
31
+ this.logger = new common_1.Logger(TaskQueueEventHandler_1.name);
32
+ }
33
+ onModuleInit() {
34
+ if (!this.configService.get('EVENT_SOURCE_DISABLED')) {
35
+ this.eventBus = this.moduleRef.get(core_1.EventBus, { strict: false });
36
+ }
37
+ }
38
+ async execute(event) {
39
+ this.logger.debug('task queue event executing::', event);
40
+ const taskKey = event.taskEvent.taskKey;
41
+ this.logger.debug('task key: ', taskKey);
42
+ try {
43
+ await this.taskService.updateStatus(taskKey, status_enum_1.TaskStatusEnum.PROCESSING);
44
+ const events = await this.eventFactory.transformTask(event);
45
+ const result = await Promise.all(events.map((event) => this.eventBus.execute(event)));
46
+ await this.taskService.updateStatus(taskKey, status_enum_1.TaskStatusEnum.COMPLETED, {
47
+ result,
48
+ });
49
+ }
50
+ catch (error) {
51
+ this.logger.error(error);
52
+ await this.taskService.updateStatus(taskKey, status_enum_1.TaskStatusEnum.FAILED, {
53
+ error,
54
+ });
55
+ }
56
+ }
57
+ };
58
+ exports.TaskQueueEventHandler = TaskQueueEventHandler;
59
+ exports.TaskQueueEventHandler = TaskQueueEventHandler = TaskQueueEventHandler_1 = __decorate([
60
+ (0, core_1.EventHandler)(task_queue_event_1.TaskQueueEvent),
61
+ __param(3, (0, common_1.Inject)(task_module_definition_1.TASK_QUEUE_EVENT_FACTORY)),
62
+ __metadata("design:paramtypes", [config_1.ConfigService,
63
+ core_2.ModuleRef,
64
+ task_service_1.TaskService, Object])
65
+ ], TaskQueueEventHandler);
66
+ //# sourceMappingURL=task.queue.event.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.queue.event.handler.js","sourceRoot":"","sources":["../../src/event/task.queue.event.handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiF;AACjF,2CAA6D;AAC7D,2CAA8C;AAC9C,uCAAwC;AAExC,sDAAqD;AACrD,sEAAoE;AACpE,kDAA6C;AAC7C,yDAAmD;AAI5C,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAOhC,YACmB,aAA4B,EAC5B,SAAoB,EACpB,WAAwB,EAEzC,YAAqD;QAJpC,kBAAa,GAAb,aAAa,CAAe;QAC5B,cAAS,GAAT,SAAS,CAAW;QACpB,gBAAW,GAAX,WAAW,CAAa;QAExB,iBAAY,GAAZ,YAAY,CAAwB;QATtC,WAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAA;IAU7D,CAAC;IAEJ,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAU,uBAAuB,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAqB;QACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;QAExD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAA;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAExC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,4BAAc,CAAC,UAAU,CAAC,CAAA;YACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACpD,CAAA;YAED,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,4BAAc,CAAC,SAAS,EAAE;gBACrE,MAAM;aACP,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACxB,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,4BAAc,CAAC,MAAM,EAAE;gBAClE,KAAK;aACN,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF,CAAA;AA7CY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAY,EAAC,iCAAc,CAAC;IAYxB,WAAA,IAAA,eAAM,EAAC,iDAAwB,CAAC,CAAA;qCAHD,sBAAa;QACjB,gBAAS;QACP,0BAAW;GAVhC,qBAAqB,CA6CjC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskQueueEvent = void 0;
4
+ const task_event_1 = require("./task.event");
5
+ class TaskQueueEvent {
6
+ fromSqsRecord(record) {
7
+ Object.assign(this, record, {
8
+ source: record.eventSourceARN,
9
+ });
10
+ return this;
11
+ }
12
+ get taskEvent() {
13
+ if (!this._taskEvent) {
14
+ this._taskEvent = new task_event_1.TaskEvent(JSON.parse(this.body));
15
+ }
16
+ return this._taskEvent;
17
+ }
18
+ }
19
+ exports.TaskQueueEvent = TaskQueueEvent;
20
+ //# sourceMappingURL=task.queue.event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.queue.event.js","sourceRoot":"","sources":["../../src/event/task.queue.event.ts"],"names":[],"mappings":";;;AAOA,6CAAwC;AAExC,MAAa,cAAc;IAczB,aAAa,CAAC,MAAiB;QAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;YAC1B,MAAM,EAAE,MAAM,CAAC,cAAc;SAC9B,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,SAAS;QACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,IAAI,sBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACxD,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;CACF;AA5BD,wCA4BC"}
@@ -0,0 +1,7 @@
1
+ export * from './entity';
2
+ export * from './enums';
3
+ export * from './event';
4
+ export * from './task.controller';
5
+ export * from './task.module';
6
+ export * from './task.module-definition';
7
+ export * from './task.service';
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./entity"), exports);
18
+ __exportStar(require("./enums"), exports);
19
+ __exportStar(require("./event"), exports);
20
+ __exportStar(require("./task.controller"), exports);
21
+ __exportStar(require("./task.module"), exports);
22
+ __exportStar(require("./task.module-definition"), exports);
23
+ __exportStar(require("./task.service"), exports);
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAwB;AACxB,0CAAuB;AACvB,0CAAuB;AACvB,oDAAiC;AACjC,gDAA6B;AAC7B,2DAAwC;AACxC,iDAA8B"}
@@ -0,0 +1,11 @@
1
+ import { DetailDto, IInvoke } from '@mbc-cqrs-serverless/core';
2
+ import { CreateTaskDto } from './dto/create-task.dto';
3
+ import { TaskService } from './task.service';
4
+ export declare class TaskController {
5
+ private readonly tasksService;
6
+ private readonly logger;
7
+ constructor(tasksService: TaskService);
8
+ createTask(invokeContext: IInvoke, dto: CreateTaskDto): Promise<import("./entity").TaskEntity>;
9
+ getTask(detailDto: DetailDto): Promise<import("./entity").TaskEntity>;
10
+ listTaskByPk(pk: string): Promise<import("./entity").TaskListEntity>;
11
+ }
@@ -0,0 +1,70 @@
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 TaskController_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.TaskController = void 0;
17
+ const core_1 = require("@mbc-cqrs-serverless/core");
18
+ const common_1 = require("@nestjs/common");
19
+ const swagger_1 = require("@nestjs/swagger");
20
+ const create_task_dto_1 = require("./dto/create-task.dto");
21
+ const task_service_1 = require("./task.service");
22
+ let TaskController = TaskController_1 = class TaskController {
23
+ constructor(tasksService) {
24
+ this.tasksService = tasksService;
25
+ this.logger = new common_1.Logger(TaskController_1.name);
26
+ }
27
+ async createTask(invokeContext, dto) {
28
+ return await this.tasksService.createTask(dto, { invokeContext });
29
+ }
30
+ async getTask(detailDto) {
31
+ const item = await this.tasksService.getTask(detailDto);
32
+ if (!item) {
33
+ throw new common_1.NotFoundException();
34
+ }
35
+ this.logger.debug('item:', item);
36
+ return item;
37
+ }
38
+ async listTaskByPk(pk) {
39
+ return await this.tasksService.listItemsByPk(pk);
40
+ }
41
+ };
42
+ exports.TaskController = TaskController;
43
+ __decorate([
44
+ (0, common_1.Post)('/'),
45
+ __param(0, (0, core_1.INVOKE_CONTEXT)()),
46
+ __param(1, (0, common_1.Body)()),
47
+ __metadata("design:type", Function),
48
+ __metadata("design:paramtypes", [Object, create_task_dto_1.CreateTaskDto]),
49
+ __metadata("design:returntype", Promise)
50
+ ], TaskController.prototype, "createTask", null);
51
+ __decorate([
52
+ (0, common_1.Get)('/:pk/:sk'),
53
+ __param(0, (0, common_1.Param)()),
54
+ __metadata("design:type", Function),
55
+ __metadata("design:paramtypes", [core_1.DetailDto]),
56
+ __metadata("design:returntype", Promise)
57
+ ], TaskController.prototype, "getTask", null);
58
+ __decorate([
59
+ (0, common_1.Get)('/:pk'),
60
+ __param(0, (0, common_1.Param)('pk')),
61
+ __metadata("design:type", Function),
62
+ __metadata("design:paramtypes", [String]),
63
+ __metadata("design:returntype", Promise)
64
+ ], TaskController.prototype, "listTaskByPk", null);
65
+ exports.TaskController = TaskController = TaskController_1 = __decorate([
66
+ (0, swagger_1.ApiTags)('task'),
67
+ (0, common_1.Controller)('tasks'),
68
+ __metadata("design:paramtypes", [task_service_1.TaskService])
69
+ ], TaskController);
70
+ //# sourceMappingURL=task.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.controller.js","sourceRoot":"","sources":["../src/task.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAA8E;AAC9E,2CAQuB;AACvB,6CAAyC;AAEzC,2DAAqD;AACrD,iDAA4C;AAGrC,IAAM,cAAc,sBAApB,MAAM,cAAc;IAGzB,YAA6B,YAAyB;QAAzB,iBAAY,GAAZ,YAAY,CAAa;QAFrC,WAAM,GAAG,IAAI,eAAM,CAAC,gBAAc,CAAC,IAAI,CAAC,CAAA;IAEA,CAAC;IAGpD,AAAN,KAAK,CAAC,UAAU,CACI,aAAsB,EAChC,GAAkB;QAE1B,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,CAAC,CAAA;IACnE,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAU,SAAoB;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACvD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,0BAAiB,EAAE,CAAA;QAC/B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAc,EAAU;QACxC,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAClD,CAAC;CACF,CAAA;AA3BY,wCAAc;AAMnB;IADL,IAAA,aAAI,EAAC,GAAG,CAAC;IAEP,WAAA,IAAA,qBAAc,GAAE,CAAA;IAChB,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,+BAAa;;gDAG3B;AAGK;IADL,IAAA,YAAG,EAAC,UAAU,CAAC;IACD,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAY,gBAAS;;6CAO1C;AAGK;IADL,IAAA,YAAG,EAAC,MAAM,CAAC;IACQ,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;kDAE9B;yBA1BU,cAAc;IAF1B,IAAA,iBAAO,EAAC,MAAM,CAAC;IACf,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAIyB,0BAAW;GAH3C,cAAc,CA2B1B"}
@@ -0,0 +1,8 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { ITaskQueueEventFactory } from './event/task.queue.event-factory.interface';
3
+ export declare const TASK_QUEUE_EVENT_FACTORY = "TaskQueueEventFactoryInjectToken";
4
+ export interface TaskModuleOptions {
5
+ taskQueueEventFactory: Type<ITaskQueueEventFactory>;
6
+ enableController?: boolean;
7
+ }
8
+ export declare const ConfigurableModuleClass: import("@nestjs/common").ConfigurableModuleCls<TaskModuleOptions, "register", "create", {}>, MODULE_OPTIONS_TOKEN: string | symbol, OPTIONS_TYPE: TaskModuleOptions & Partial<{}>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.OPTIONS_TYPE = exports.MODULE_OPTIONS_TOKEN = exports.ConfigurableModuleClass = exports.TASK_QUEUE_EVENT_FACTORY = void 0;
5
+ const common_1 = require("@nestjs/common");
6
+ exports.TASK_QUEUE_EVENT_FACTORY = 'TaskQueueEventFactoryInjectToken';
7
+ _a = new common_1.ConfigurableModuleBuilder().build(), exports.ConfigurableModuleClass = _a.ConfigurableModuleClass, exports.MODULE_OPTIONS_TOKEN = _a.MODULE_OPTIONS_TOKEN, exports.OPTIONS_TYPE = _a.OPTIONS_TYPE;
8
+ //# sourceMappingURL=task.module-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.module-definition.js","sourceRoot":"","sources":["../src/task.module-definition.ts"],"names":[],"mappings":";;;;AAAA,2CAA0D;AAK7C,QAAA,wBAAwB,GAAG,kCAAkC,CAAA;AAO7D,KACX,IAAI,kCAAyB,EAAqB,CAAC,KAAK,EAAE,EAD7C,+BAAuB,+BAAE,4BAAoB,4BAAE,oBAAY,mBACd"}
@@ -0,0 +1,5 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { ConfigurableModuleClass, OPTIONS_TYPE } from './task.module-definition';
3
+ export declare class TaskModule extends ConfigurableModuleClass {
4
+ static register(options: typeof OPTIONS_TYPE): DynamicModule;
5
+ }
@@ -0,0 +1,46 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TaskModule = void 0;
10
+ const core_1 = require("@mbc-cqrs-serverless/core");
11
+ const common_1 = require("@nestjs/common");
12
+ const task_event_handler_1 = require("./event/task.event.handler");
13
+ const task_queue_event_handler_1 = require("./event/task.queue.event.handler");
14
+ const task_controller_1 = require("./task.controller");
15
+ const task_module_definition_1 = require("./task.module-definition");
16
+ const task_service_1 = require("./task.service");
17
+ let TaskModule = class TaskModule extends task_module_definition_1.ConfigurableModuleClass {
18
+ static register(options) {
19
+ const module = super.register(options);
20
+ if (!module.providers) {
21
+ module.providers = [];
22
+ }
23
+ module.providers.push({
24
+ provide: task_module_definition_1.TASK_QUEUE_EVENT_FACTORY,
25
+ useClass: options.taskQueueEventFactory,
26
+ });
27
+ if (options.enableController) {
28
+ if (!module.controllers) {
29
+ module.controllers = [];
30
+ }
31
+ module.controllers.push(task_controller_1.TaskController);
32
+ }
33
+ return {
34
+ ...module,
35
+ };
36
+ }
37
+ };
38
+ exports.TaskModule = TaskModule;
39
+ exports.TaskModule = TaskModule = __decorate([
40
+ (0, common_1.Module)({
41
+ imports: [core_1.DataStoreModule, core_1.QueueModule],
42
+ providers: [task_service_1.TaskService, task_event_handler_1.TaskEventHandler, task_queue_event_handler_1.TaskQueueEventHandler],
43
+ exports: [task_service_1.TaskService],
44
+ })
45
+ ], TaskModule);
46
+ //# sourceMappingURL=task.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.module.js","sourceRoot":"","sources":["../src/task.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAwE;AACxE,2CAAsD;AAEtD,mEAA6D;AAC7D,+EAAwE;AACxE,uDAAkD;AAClD,qEAIiC;AACjC,iDAA4C;AAOrC,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,gDAAuB;IACrD,MAAM,CAAC,QAAQ,CAAC,OAA4B;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAEtC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,SAAS,GAAG,EAAE,CAAA;QACvB,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YACpB,OAAO,EAAE,iDAAwB;YACjC,QAAQ,EAAE,OAAO,CAAC,qBAAqB;SACxC,CAAC,CAAA;QAEF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACxB,MAAM,CAAC,WAAW,GAAG,EAAE,CAAA;YACzB,CAAC;YACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,gCAAc,CAAC,CAAA;QACzC,CAAC;QAED,OAAO;YACL,GAAG,MAAM;SACV,CAAA;IACH,CAAC;CACF,CAAA;AAvBY,gCAAU;qBAAV,UAAU;IALtB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,sBAAe,EAAE,kBAAW,CAAC;QACvC,SAAS,EAAE,CAAC,0BAAW,EAAE,qCAAgB,EAAE,gDAAqB,CAAC;QACjE,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,UAAU,CAuBtB"}
@@ -0,0 +1,29 @@
1
+ import { DetailKey, DynamoDbService, IInvoke, SnsService } from '@mbc-cqrs-serverless/core';
2
+ import { CreateTaskDto } from './dto/create-task.dto';
3
+ import { TaskEntity } from './entity/task.entity';
4
+ import { TaskListEntity } from './entity/task-list.entity';
5
+ export declare class TaskService {
6
+ private readonly dynamoDbService;
7
+ private readonly snsService;
8
+ private readonly logger;
9
+ private readonly tableName;
10
+ constructor(dynamoDbService: DynamoDbService, snsService: SnsService);
11
+ createTask(dto: CreateTaskDto, opts: {
12
+ invokeContext: IInvoke;
13
+ }): Promise<TaskEntity>;
14
+ getTask(key: DetailKey): Promise<TaskEntity>;
15
+ updateStatus(key: DetailKey, status: string, attributes?: {
16
+ result?: any;
17
+ error?: any;
18
+ }, notifyId?: string): Promise<void>;
19
+ listItemsByPk(tenantCode: string, opts?: {
20
+ sk?: {
21
+ skExpession: string;
22
+ skAttributeValues: Record<string, string>;
23
+ skAttributeNames?: Record<string, string>;
24
+ };
25
+ startFromSk?: string;
26
+ limit?: number;
27
+ order?: 'asc' | 'desc';
28
+ }): Promise<TaskListEntity>;
29
+ }
@@ -0,0 +1,87 @@
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 TaskService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.TaskService = void 0;
14
+ const core_1 = require("@mbc-cqrs-serverless/core");
15
+ const common_1 = require("@nestjs/common");
16
+ const ulid_1 = require("ulid");
17
+ const task_entity_1 = require("./entity/task.entity");
18
+ const task_list_entity_1 = require("./entity/task-list.entity");
19
+ const status_enum_1 = require("./enums/status.enum");
20
+ let TaskService = TaskService_1 = class TaskService {
21
+ constructor(dynamoDbService, snsService) {
22
+ this.dynamoDbService = dynamoDbService;
23
+ this.snsService = snsService;
24
+ this.logger = new common_1.Logger(TaskService_1.name);
25
+ this.tableName = dynamoDbService.getTableName('tasks');
26
+ }
27
+ async createTask(dto, opts) {
28
+ const sourceIp = opts.invokeContext?.event?.requestContext?.http?.sourceIp;
29
+ const userContext = (0, core_1.getUserContext)(opts.invokeContext);
30
+ const taskCode = (0, ulid_1.ulid)();
31
+ const pk = `TASK${core_1.KEY_SEPARATOR}${dto.tenantCode}`;
32
+ const sk = `${dto.taskType}${core_1.KEY_SEPARATOR}${taskCode}`;
33
+ const item = {
34
+ id: `${pk}${core_1.KEY_SEPARATOR}${sk}`,
35
+ pk,
36
+ sk,
37
+ version: 0,
38
+ code: taskCode,
39
+ type: dto.taskType,
40
+ name: dto.name || dto.taskType,
41
+ tenantCode: dto.tenantCode,
42
+ status: status_enum_1.TaskStatusEnum.CREATED,
43
+ input: dto.input,
44
+ requestId: opts.invokeContext?.context?.awsRequestId,
45
+ createdAt: new Date(),
46
+ updatedAt: new Date(),
47
+ createdBy: userContext.userId,
48
+ updatedBy: userContext.userId,
49
+ createdIp: sourceIp,
50
+ updatedIp: sourceIp,
51
+ };
52
+ await this.dynamoDbService.putItem(this.tableName, item);
53
+ return new task_entity_1.TaskEntity(item);
54
+ }
55
+ async getTask(key) {
56
+ const item = await this.dynamoDbService.getItem(this.tableName, key);
57
+ return new task_entity_1.TaskEntity(item);
58
+ }
59
+ async updateStatus(key, status, attributes, notifyId) {
60
+ await this.dynamoDbService.updateItem(this.tableName, key, {
61
+ set: { status, attributes },
62
+ });
63
+ await this.snsService.publish({
64
+ action: 'task-status',
65
+ ...key,
66
+ table: this.tableName,
67
+ id: notifyId || `${key.pk}#${key.sk}`,
68
+ tenantCode: key.pk.substring(key.pk.indexOf('#') + 1),
69
+ content: { status, attributes },
70
+ });
71
+ }
72
+ async listItemsByPk(tenantCode, opts) {
73
+ const pk = `TASK${core_1.KEY_SEPARATOR}${tenantCode}`;
74
+ const { lastSk, items } = await this.dynamoDbService.listItemsByPk(this.tableName, pk, opts?.sk, opts?.startFromSk, opts?.limit, opts?.order);
75
+ return new task_list_entity_1.TaskListEntity({
76
+ lastSk,
77
+ items: items.map((item) => new task_entity_1.TaskEntity(item)),
78
+ });
79
+ }
80
+ };
81
+ exports.TaskService = TaskService;
82
+ exports.TaskService = TaskService = TaskService_1 = __decorate([
83
+ (0, common_1.Injectable)(),
84
+ __metadata("design:paramtypes", [core_1.DynamoDbService,
85
+ core_1.SnsService])
86
+ ], TaskService);
87
+ //# sourceMappingURL=task.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.service.js","sourceRoot":"","sources":["../src/task.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mbc-cqrs-serverless/task",
3
- "version": "0.1.11-beta.0",
3
+ "version": "0.1.12-beta.0",
4
4
  "description": "long-running task",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -26,7 +26,7 @@
26
26
  "access": "public"
27
27
  },
28
28
  "dependencies": {
29
- "@mbc-cqrs-serverless/core": "^0.1.11-beta.0"
29
+ "@mbc-cqrs-serverless/core": "^0.1.12-beta.0"
30
30
  },
31
- "gitHead": "870fd6950e38a93552e82b6b3f2dc58376c9e431"
31
+ "gitHead": "f8acc307691f23c61423dcd2895412f3fb078b14"
32
32
  }