UNPKG

@mbc-cqrs-serverless/import

Version:
125 lines 6.61 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 __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var ImportController_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImportController = void 0; const core_1 = require("@mbc-cqrs-serverless/core"); const common_1 = require("@nestjs/common"); const swagger_1 = require("@nestjs/swagger"); const create_csv_import_dto_1 = require("./dto/create-csv-import.dto"); const create_import_dto_1 = require("./dto/create-import.dto"); const create_zip_import_dto_1 = require("./dto/create-zip-import.dto"); const import_service_1 = require("./import.service"); let ImportController = ImportController_1 = class ImportController { constructor(importService) { this.importService = importService; this.logger = new common_1.Logger(ImportController_1.name); } /** * Endpoint for importing a single data record. * This is typically used for real-time or low-volume data synchronization. * The actual processing is asynchronous; this endpoint only validates the input * and queues the import task. */ async createImport(invokeContext, createImportDto) { this.logger.log(`Received single import request for table: ${createImportDto.tableName}`); return this.importService.createWithApi(createImportDto, { invokeContext }); } /** * Endpoint for initiating a CSV file import. * This endpoint accepts the location of a CSV file in S3 and allows the client * to specify the processing strategy ('DIRECT' for small files, 'STEP_FUNCTION' for large files). */ async createCsvImport(invokeContext, createCsvImportDto) { this.logger.log(`Received CSV import request for key: ${createCsvImportDto.key} with processing mode: ${createCsvImportDto.processingMode}`); // The service contains the routing logic to either process directly // or create the master job for the Step Function. return this.importService.handleCsvImport(createCsvImportDto, { invokeContext, }); } async createZipImport(invokeContext, createZipImportDto) { this.logger.log(`Received ZIP import request for key: ${createZipImportDto.key}`); return this.importService.createZipJob(createZipImportDto, { invokeContext, }); } }; exports.ImportController = ImportController; __decorate([ (0, common_1.Post)(), (0, swagger_1.ApiOperation)({ summary: 'Create a single import', description: 'Accepts a single data record, validates it using the configured ImportStrategy, and queues it for asynchronous processing.', }), (0, swagger_1.ApiBody)({ type: create_import_dto_1.CreateImportDto }), (0, swagger_1.ApiResponse)({ status: 202, description: 'The import task has been accepted and queued for processing.', }), (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED), (0, common_1.UsePipes)(new common_1.ValidationPipe({ transform: true, whitelist: true })), __param(0, (0, core_1.INVOKE_CONTEXT)()), __param(1, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, create_import_dto_1.CreateImportDto]), __metadata("design:returntype", Promise) ], ImportController.prototype, "createImport", null); __decorate([ (0, common_1.Post)('csv'), (0, swagger_1.ApiOperation)({ summary: 'Initiate a CSV file import', description: 'Accepts the S3 location of a CSV file and an execution strategy. It will either process the file directly or trigger a Step Function workflow.', }), (0, swagger_1.ApiBody)({ type: create_csv_import_dto_1.CreateCsvImportDto }), (0, swagger_1.ApiResponse)({ status: 200, description: 'For DIRECT mode, returns the created import entities. For STEP_FUNCTION mode, returns the master job entity.', }), (0, swagger_1.ApiResponse)({ status: 202, description: 'The import task has been accepted and queued for processing (for STEP_FUNCTION mode).', }), (0, common_1.UsePipes)(new common_1.ValidationPipe({ transform: true, whitelist: true })), __param(0, (0, core_1.INVOKE_CONTEXT)()), __param(1, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, create_csv_import_dto_1.CreateCsvImportDto]), __metadata("design:returntype", Promise) ], ImportController.prototype, "createCsvImport", null); __decorate([ (0, common_1.Post)('zip'), (0, swagger_1.ApiOperation)({ summary: 'Initiate a ZIP file import', description: 'Accepts the S3 location of a ZIP file containing multiple CSVs. This will trigger a sequential, orchestrated import process.', }), (0, swagger_1.ApiBody)({ type: create_zip_import_dto_1.CreateZipImportDto }), (0, swagger_1.ApiResponse)({ status: 202, description: 'The zip import task has been accepted and queued for processing.', }), (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED), (0, common_1.UsePipes)(new common_1.ValidationPipe({ transform: true, whitelist: true })), __param(0, (0, core_1.INVOKE_CONTEXT)()), __param(1, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, create_zip_import_dto_1.CreateZipImportDto]), __metadata("design:returntype", Promise) ], ImportController.prototype, "createZipImport", null); exports.ImportController = ImportController = ImportController_1 = __decorate([ (0, swagger_1.ApiTags)('Imports'), (0, common_1.Controller)('imports'), __metadata("design:paramtypes", [import_service_1.ImportService]) ], ImportController); //# sourceMappingURL=import.controller.js.map