UNPKG

@e-invoice-eu/server

Version:

REST API for generating EN16931 conforming electronic invoices

125 lines 5.25 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); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MappingController = void 0; const openapi = require("@nestjs/swagger"); const common_1 = require("@nestjs/common"); const platform_express_1 = require("@nestjs/platform-express"); const swagger_1 = require("@nestjs/swagger"); const _2019_1 = require("ajv/dist/2019"); const mapping_service_1 = require("./mapping.service"); let MappingController = class MappingController { mappingService; logger; constructor(mappingService, logger) { this.mappingService = mappingService; this.logger = logger; } transform(format, files) { if (files.spreadsheet && files.data) { throw new common_1.BadRequestException('The parameters "spreadsheet" and data" are mutually exclusive.'); } const dataFile = files.spreadsheet ? files.spreadsheet[0] : files.data?.[0]; if (!dataFile) { throw new common_1.BadRequestException('No invoice file uploaded'); } const mappingFile = files.mapping?.[0]; if (!mappingFile) { throw new common_1.BadRequestException('No mapping file uploaded'); } try { return this.mappingService.transform(format, mappingFile.buffer.toString(), dataFile.buffer); } catch (error) { if (error instanceof _2019_1.ValidationError) { throw new common_1.BadRequestException({ message: 'Transformation failed.', details: error, }); } else { this.logger.error(`unknown error: ${error.message}\n${error.stack}`); throw new common_1.InternalServerErrorException(); } } } }; exports.MappingController = MappingController; __decorate([ (0, common_1.Post)('transform/:format'), (0, swagger_1.ApiConsumes)('multipart/form-data'), (0, swagger_1.ApiBody)({ description: 'The spreadsheet to be transformed.', required: true, schema: { type: 'object', properties: { spreadsheet: { type: 'string', format: 'binary', nullable: true, description: 'The spreadsheet to be transformed.', }, data: { type: 'string', format: 'binary', deprecated: true, nullable: true, description: 'Will be removed in 2026! An alias for "spreadsheet". Use that instead!', }, mapping: { type: 'string', format: 'binary', description: 'The mapping file in YAML or JSON format.', }, }, }, }), (0, swagger_1.ApiResponse)({ status: 201, description: 'Transformation successful. The output is an invoice' + ' document that can be used as input for the' + ' `/api/invoice/generate` endpoint.', links: { generateInvoice: { operationRef: './invoice/generate', parameters: { invoice: '$response.body', }, }, }, }), (0, swagger_1.ApiResponse)({ status: 400, description: 'Bad request with error details', }), (0, common_1.UseInterceptors)((0, platform_express_1.FileFieldsInterceptor)([ { name: 'spreadsheet', maxCount: 1 }, { name: 'data', maxCount: 1 }, { name: 'mapping', maxCount: 1 }, ])), openapi.ApiResponse({ status: 201, type: Object }), __param(0, (0, common_1.Param)('format')), __param(1, (0, common_1.UploadedFiles)()), __metadata("design:type", Function), __metadata("design:paramtypes", [String, Object]), __metadata("design:returntype", Object) ], MappingController.prototype, "transform", null); exports.MappingController = MappingController = __decorate([ (0, swagger_1.ApiTags)('mapping'), (0, common_1.Controller)('mapping'), __metadata("design:paramtypes", [mapping_service_1.MappingService, common_1.Logger]) ], MappingController); //# sourceMappingURL=mapping.controller.js.map