UNPKG

@mbc-cqrs-serverless/import

Version:
82 lines 4.16 kB
"use strict"; 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