@mbc-cqrs-serverless/import
Version:
125 lines • 6.61 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 __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