From 7a3856cf1d879c043895d70c32d8f11ff5df167a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Emarianfoo=E2=80=9C?= <13335743+marianfoo@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:15:09 +0100 Subject: [PATCH] fix: add error handling to avoid server crashes --- importer-service.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/importer-service.js b/importer-service.js index d30077e..1b5c08e 100644 --- a/importer-service.js +++ b/importer-service.js @@ -6,15 +6,18 @@ const Parser = require("./utils/Parser"); module.exports = class ImporterService extends cds.ApplicationService { init() { - -// module.exports = (srv) => { - this.on('UPDATE','Spreadsheet', async req => { - // srv.on('UPDATE','Spreadsheet', async req => { - // const db = cds.connect.to('db'); + this.on('UPDATE', 'Spreadsheet', async req => { + try { const entity = cds.entities()[req.params[0].entity]; let spreadsheetSheetsData = []; let columnNames = []; - const spreadSheet = XLSX.read(req.data.content.readableBuffer[0], { type: "buffer", cellNF: true, cellDates: true, cellText: true, cellFormula: true }); + const spreadSheet = XLSX.read(req.data.content.readableBuffer[0], { + type: "buffer", + cellNF: true, + cellDates: true, + cellText: true, + cellFormula: true + }); // Loop over the sheet names in the workbook for (const sheetName of Object.keys(spreadSheet.Sheets)) { @@ -28,8 +31,12 @@ module.exports = class ImporterService extends cds.ApplicationService { spreadsheetSheetsData = spreadsheetSheetsData.concat(currSheetData); columnNames = columnNames.concat(XLSX.utils.sheet_to_json(spreadSheet.Sheets[sheetName], { header: 1 })[0]); } - const data = Parser.parseSpreadsheetData(spreadsheetSheetsData,entity.elements); - await cds.db.run(INSERT(data).into(entity.name) ); + const data = Parser.parseSpreadsheetData(spreadsheetSheetsData, entity.elements); + await cds.db.run(INSERT(data).into(entity.name)); + + } catch (error) { + req.error(500, `Failed to process spreadsheet: ${error.message}`); + } }); return super.init(); }