From 42f53cd32e880d17be8a156e0d15f66fd553a3d1 Mon Sep 17 00:00:00 2001 From: Onja Date: Wed, 11 Oct 2023 15:32:44 +0300 Subject: [PATCH] Refactor file.js to generate and save the parsed CSV file using the correct destination path and emit the generated file name on parse.end --- src/models/file.js | 10 ++++++++-- src/subscribers/ioSubscriber.js | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/models/file.js b/src/models/file.js index 3d6e5d7..8396f2e 100644 --- a/src/models/file.js +++ b/src/models/file.js @@ -22,7 +22,7 @@ const dest = path.join(basedir, 'public/csv'); function generateFilePath(filename) { return { filepath: path.join(dest, `${filename}-${Date.now()}.csv`), - generatedpath: path.join('csv', `${filename}-generated-${Date.now()}.csv`), + generatedpath: path.join(dest, `${filename}-generated-${Date.now()}.csv`), }; } @@ -122,6 +122,8 @@ class File { // create a parse method which read the file and return a stream parse(columns) { const stream = new PassThrough(); + const fileStream = fs.createWriteStream(this.generatedpath); + stream.pipe(fileStream); // check if columns is valid if (!columns || !columns.length) { @@ -174,11 +176,15 @@ class File { .on('error', (err) => { // Emit a parse.error event with the error emitter.emit('parse.error', { url: this.url, filepath: this.filepath, error: err.message }); + + fileStream.end(); + fs.unlink(this.generatedpath, () => {}); }) .on('end', () => { // Emit a parse.end event with the url and filepath - emitter.emit('parse.end', { url: this.url, filepath: this.filepath, count: count - 1 }); stream.end(); + fileStream.end(); + emitter.emit('parse.end', { url: this.url, filepath: this.filepath, count: count - 1, generated: path.basename(this.generatedpath) }); }); return stream; diff --git a/src/subscribers/ioSubscriber.js b/src/subscribers/ioSubscriber.js index ab26d1a..f41d0dc 100644 --- a/src/subscribers/ioSubscriber.js +++ b/src/subscribers/ioSubscriber.js @@ -31,8 +31,8 @@ const configure = (socket) => { }); // Create a new listener for the parse.end event - emitter.on('parse.end', ({ filepath, columns, count }) => { - socket.emit('parse.end', { message: 'Traitement terminé' }); + emitter.on('parse.end', ({ filepath, columns, count, generated }) => { + socket.emit('parse.end', { message: 'Traitement terminé', generated }); }); // Create a new listener for the parse.error event