@mbc-cqrs-serverless/import
Version:
82 lines • 4.16 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var ImportStatusHandler_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ImportStatusHandler = void 0;
const client_sfn_1 = require("@aws-sdk/client-sfn");
const core_1 = require("@mbc-cqrs-serverless/core");
const common_1 = require("@nestjs/common");
const constant_1 = require("../constant");
const import_service_1 = require("../import.service");
const import_status_queue_event_1 = require("./import-status.queue.event");
const enum_1 = require("../enum");
let ImportStatusHandler = ImportStatusHandler_1 = class ImportStatusHandler {
constructor(importService, sfnService) {
this.importService = importService;
this.sfnService = sfnService;
this.logger = new common_1.Logger(ImportStatusHandler_1.name);
}
async execute(event) {
const notification = JSON.parse(event.body);
// 1. Filter for the specific event: a completed master CSV job.
const pk = notification.pk;
const status = notification.content?.status;
if (status !== enum_1.ImportStatusEnum.COMPLETED ||
!pk?.startsWith(`${constant_1.CSV_IMPORT_PK_PREFIX}${core_1.KEY_SEPARATOR}`)) {
return;
}
this.logger.log(`Received completed master CSV job event for: ${notification.id}`);
try {
// 2. Get the full import job entity from DynamoDB.
const importKey = { pk: notification.pk, sk: notification.sk };
const importJob = await this.importService.getImportByKey(importKey);
if (!importJob) {
this.logger.warn(`Could not find import job for key:`, importKey);
return;
}
// 3. Check if a taskToken was saved in its attributes.
const taskToken = importJob.attributes?.taskToken;
if (taskToken) {
this.logger.log(`Found task token. Resuming Step Function.`);
// 4. Send the success signal back to the waiting Step Function.
// The output can be the result summary from the import job itself.
await this.sendTaskSuccess(taskToken, importJob.result);
}
else {
this.logger.log('No task token found in import job attributes. Nothing to do.');
}
}
catch (error) {
this.logger.error('Error in ImportStatusHandler:', error);
throw error;
}
}
/**
* Sends a success signal to a waiting Step Function task.
* @param taskToken The unique token of the paused task.
* @param output The JSON output to send back to the state machine.
*/
async sendTaskSuccess(taskToken, output) {
this.logger.log(`Sending task success for token: ${taskToken}`);
return this.sfnService.client.send(new client_sfn_1.SendTaskSuccessCommand({
taskToken: taskToken,
output: JSON.stringify(output),
}));
}
};
exports.ImportStatusHandler = ImportStatusHandler;
exports.ImportStatusHandler = ImportStatusHandler = ImportStatusHandler_1 = __decorate([
(0, common_1.Injectable)(),
(0, core_1.EventHandler)(import_status_queue_event_1.ImportStatusQueueEvent),
__metadata("design:paramtypes", [import_service_1.ImportService,
core_1.StepFunctionService])
], ImportStatusHandler);
//# sourceMappingURL=import-status.queue.event.handler.js.map