diff --git a/packages/component-manuscript-manager/src/routes/fragments/post.js b/packages/component-manuscript-manager/src/routes/fragments/post.js index 046d92be556828113fa9a5b3b63375acbf75aef2..97ad2389943da68a469015f21cf483f465cdd1ff 100644 --- a/packages/component-manuscript-manager/src/routes/fragments/post.js +++ b/packages/component-manuscript-manager/src/routes/fragments/post.js @@ -66,7 +66,8 @@ module.exports = models => async (req, res) => { customId: collection.customId, }, } - MTS.sendPackage(packageFragment) + + await MTS.sendPackage(packageFragment) return res.status(200).json(fragment) } catch (e) { diff --git a/packages/component-mts-package/src/MTS.js b/packages/component-mts-package/src/MTS.js index 0686bd52e65fb7ea5310585f140bded09e8a6384..6d1b108eaf5c2c3420747e0658af9710c0775749 100644 --- a/packages/component-mts-package/src/MTS.js +++ b/packages/component-mts-package/src/MTS.js @@ -1,7 +1,7 @@ const convert = require('xml-js') const { set, get } = require('lodash') -const createFilesPackage = require('./PackageManager') +const PackageManager = require('./PackageManager') const mts = require('./mts-json-template') const { defaultConfig, @@ -88,11 +88,7 @@ class MTS { 'article.front.article-meta.article-categories', articleType, ) - set( - jsonTemplate, - 'article.front.article-meta.abstract', - this.parseHtml(metadata.abstract), - ) + set(jsonTemplate, 'article.front.article-meta.abstract', metadata.abstract) return jsonTemplate } @@ -211,9 +207,18 @@ class MTS { sendPackage(fragment = {}) { const xmlFile = this.convertFragmentToXML(fragment) - return createFilesPackage(this.s3Config, this.ftpConfig)({ + + return PackageManager.createFilesPackage(this.s3Config, this.ftpConfig)({ fragment, xmlFile, + }).then(() => { + const manuscriptName = get(xmlFile, 'name', '').replace('.xml', '') + const filename = `${manuscriptName}.zip` + return PackageManager.uploadFiles({ + filename, + s3Config: this.s3Config, + config: this.ftpConfig, + }) }) } } diff --git a/packages/component-mts-package/src/PackageManager.js b/packages/component-mts-package/src/PackageManager.js index 76880ecb153d1a37b499a699bbbc0e6919ad8367..ee338dbfb34193d0ad5bb2c5c3daeaeac5f1ef4a 100644 --- a/packages/component-mts-package/src/PackageManager.js +++ b/packages/component-mts-package/src/PackageManager.js @@ -58,14 +58,7 @@ const createFilesPackage = (s3Config, ftpConfig, archiver = nodeArchiver) => { throw err }) archive.on('end', err => { - const filename = `${manuscriptName}.zip` if (err) throw err - uploadFiles({ - s3, - filename, - Bucket: s3Config.bucket, - config: ftpConfig, - }) }) archive.finalize() } @@ -88,32 +81,39 @@ const readFile = filename => }) }) -const uploadFiles = async ({ s3, filename, Bucket, config }) => { +const fileError = filename => err => { + logger.error(err) + deleteFile(filename) + throw err +} + +const uploadFiles = async ({ filename, s3Config, config }) => { const data = await readFile(filename) + AWS.config.update({ + secretAccessKey: s3Config.secretAccessKey, + accessKeyId: s3Config.accessKeyId, + region: s3Config.region, + }) + const s3 = new AWS.S3() + const params = { - Bucket, + Bucket: s3Config.bucket, Body: data, Key: `mts/${filename}`, } - s3.upload(params, async err => { - await uploadFTP({ filename, config }) - .then(res => { - logger.info(`Successfully uploaded ${filename} to FTP`) - }) - .catch(err => { - logger.error(err) - deleteFile(filename) - throw err - }) - deleteFile(filename) + const asyncUploadS3 = promisify(s3.upload.bind(s3)) - if (err) { - throw err - } else { + return asyncUploadS3(params) + .then(() => { logger.info(`Successfully uploaded ${filename} to S3`) - } - }) + return uploadFTP({ filename, config }) + }) + .then(() => { + logger.info(`Successfully uploaded ${filename} to FTP`) + deleteFile(filename) + }) + .catch(fileError(filename)) } const deleteFile = filename => { @@ -136,4 +136,7 @@ const uploadFTP = ({ filename, config }) => { return ftpDeploy.deploy(configs) } -module.exports = createFilesPackage +module.exports = { + createFilesPackage, + uploadFiles, +}