UNPKG

@mbc-cqrs-serverless/import

Version:
94 lines 5.07 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 ZipImportSfnEventHandler_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.ZipImportSfnEventHandler = void 0; const core_1 = require("@mbc-cqrs-serverless/core"); const common_1 = require("@nestjs/common"); const enum_1 = require("../enum"); const import_service_1 = require("../import.service"); const zip_import_sfn_event_1 = require("./zip-import.sfn.event"); let ZipImportSfnEventHandler = ZipImportSfnEventHandler_1 = class ZipImportSfnEventHandler { constructor(importService) { this.importService = importService; this.logger = new common_1.Logger(ZipImportSfnEventHandler_1.name); } async execute(event) { const stateName = event.context.State.Name; this.logger.log(`Executing state: ${stateName} for Zip SFN`); if (stateName === 'trigger_single_csv_and_wait') { return this.triggerSingleCsvJob(event); } if (stateName === 'finalize_zip_job') { return this.finalizeZipMasterJob(event); } this.logger.warn(`Unknown state name in ZipImportSfnEventHandler: ${stateName}`); } /** * Handles the trigger_single_csv_and_wait state from the orchestrator. * It extracts the tableName from the filename and starts a new CSV import job, * passing along the taskToken so the orchestrator can be notified upon completion. */ async triggerSingleCsvJob(event) { const s3Key = event.input?.s3Key || event.input; const { taskToken } = event; const { masterJobKey, parameters } = event.context.Execution.Input; this.logger.log(`Triggering CSV job for file: ${s3Key}`); // Use a regex to extract the table name from the filename. // Convention: yyyymmddhhMMss-{table name}.csv const match = s3Key.match(/\d{14}-(.+)\.csv$/); if (!match || !match[1]) { throw new Error(`Could not parse tableName from filename: ${s3Key}. Expected format: yyyymmddhhMMss-{tableName}.csv`); } const tableName = match[1]; const dto = { processingMode: enum_1.ProcessingMode.STEP_FUNCTION, bucket: parameters.bucket, key: s3Key, tenantCode: parameters.tenantCode, tableName: tableName, }; await this.importService.createCsvJobWithTaskToken(dto, taskToken, masterJobKey); this.logger.log(`Successfully created CSV job for ${tableName} with task token.`); } /** * Handles the final state of the orchestrator. * It aggregates the results from all processed CSV files and sets the final * status on the original ZIP_MASTER_JOB. */ async finalizeZipMasterJob(event) { const resultsFromMapState = event.input?.processingResults || event.input; // This will be an array of results const { masterJobKey } = event.context.Execution.Input; this.logger.log(`Finalizing ZIP master job: ${masterJobKey.pk}#${masterJobKey.sk}`); this.logger.debug('Aggregated results:', resultsFromMapState); // Aggregate the results from each CSV file's processing. const finalSummary = resultsFromMapState.reduce((acc, result) => { const res = result?.result || result || {}; acc.totalRows += res.total || res.totalRows || 0; acc.processedRows += res.succeeded || res.processedRows || 0; acc.failedRows += res.failed || res.failedRows || 0; return acc; }, { totalRows: 0, processedRows: 0, failedRows: 0 }); const finalStatus = enum_1.ImportStatusEnum.COMPLETED; await this.importService.updateStatus(masterJobKey, finalStatus, { result: finalSummary, }); this.logger.log(`Successfully finalized ZIP master job ${masterJobKey.pk}#${masterJobKey.sk} with status ${finalStatus}`); } }; exports.ZipImportSfnEventHandler = ZipImportSfnEventHandler; exports.ZipImportSfnEventHandler = ZipImportSfnEventHandler = ZipImportSfnEventHandler_1 = __decorate([ (0, common_1.Injectable)(), (0, core_1.EventHandler)(zip_import_sfn_event_1.ZipImportSfnEvent), __metadata("design:paramtypes", [import_service_1.ImportService]) ], ZipImportSfnEventHandler); //# sourceMappingURL=zip-import.sfn.event.handler.js.map