Skip to content
Snippets Groups Projects
Commit d141afe9 authored by Bogdan Cochior's avatar Bogdan Cochior
Browse files

feat(mts): refactor MTS integration and err handling

parent 800ccfb3
No related branches found
No related tags found
2 merge requests!21Sprint #16 features,!15MTS integration
......@@ -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) {
......
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,
})
})
}
}
......
......@@ -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,
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment