@e-invoice-eu/server
Version:
REST API for generating EN16931 conforming electronic invoices
112 lines • 4.67 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); }
};
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 {
constructor(mappingService, logger) {
this.mappingService = mappingService;
this.logger = logger;
}
transform(format, files) {
const dataFile = files.spreadsheet;
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[0].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.',
},
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: '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