From d9351e57bd8c2307796013eb6817a284ab7bcaea Mon Sep 17 00:00:00 2001
From: Sebastian Mihalache <sebastian.mihalache@gmail.con>
Date: Tue, 7 Aug 2018 15:55:56 +0300
Subject: [PATCH] feat(component-manuscript-manager): export package when EiC
 publishes

---
 .../src/routes/fragments/post.js              |  2 +-
 .../routes/fragmentsRecommendations/post.js   | 21 ++++++++++++++++++-
 packages/component-mts-package/src/MTS.js     | 10 ++++++---
 .../src/PackageManager.js                     |  9 +++++---
 4 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/packages/component-manuscript-manager/src/routes/fragments/post.js b/packages/component-manuscript-manager/src/routes/fragments/post.js
index 6150932b3..2ec4ab94a 100644
--- a/packages/component-manuscript-manager/src/routes/fragments/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragments/post.js
@@ -52,7 +52,7 @@ module.exports = models => async (req, res) => {
       },
     }
 
-    await MTS.sendPackage(packageFragment)
+    await MTS.sendPackage({ fragment: packageFragment })
 
     notifications.sendNotifications({
       fragment,
diff --git a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
index 376779842..69135f088 100644
--- a/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragmentsRecommendations/post.js
@@ -1,5 +1,6 @@
 const uuid = require('uuid')
-const { pick } = require('lodash')
+const { pick, get } = require('lodash')
+const config = require('config')
 
 const {
   services,
@@ -7,6 +8,10 @@ const {
   Collection,
 } = require('pubsweet-component-helper-service')
 
+const s3Config = get(config, 'pubsweet-component-aws-s3', {})
+const mtsConfig = get(config, 'mts-service', {})
+const MTSService = require('pubsweet-component-mts-package')
+
 const notifications = require('./notifications/notifications')
 
 module.exports = models => async (req, res) => {
@@ -70,6 +75,20 @@ module.exports = models => async (req, res) => {
       fragment.revision = pick(fragment, ['authors', 'files', 'metadata'])
     }
 
+    if (isEditorInChief && recommendation === 'publish') {
+      const { journal, xmlParser, ftp } = mtsConfig
+      const MTS = new MTSService(journal, xmlParser, s3Config, ftp)
+      const packageFragment = {
+        ...fragment,
+        metadata: {
+          ...fragment.metadata,
+          customId: collection.customId,
+        },
+      }
+
+      await MTS.sendPackage({ fragment: packageFragment, isEQA: true })
+    }
+
     notifications.sendNotifications({
       fragment,
       collection,
diff --git a/packages/component-mts-package/src/MTS.js b/packages/component-mts-package/src/MTS.js
index 0d52a235a..a8a942113 100644
--- a/packages/component-mts-package/src/MTS.js
+++ b/packages/component-mts-package/src/MTS.js
@@ -216,15 +216,19 @@ class MTS {
     return this.convertToXML(this.composeJson(fragment))
   }
 
-  sendPackage(fragment = {}) {
+  sendPackage({ fragment = {}, isEQA = false }) {
     const xmlFile = this.convertFragmentToXML(fragment)
 
     return PackageManager.createFilesPackage(this.s3Config)({
       fragment,
       xmlFile,
+      isEQA,
     }).then(() => {
-      const manuscriptName = get(xmlFile, 'name', '').replace('.xml', '')
-      const filename = `${manuscriptName}.zip`
+      const packageName = get(xmlFile, 'name', '').replace('.xml', '')
+      const filename = isEQA
+        ? `ACCEPTED_${packageName}.zip`
+        : `${packageName}.zip`
+
       return PackageManager.uploadFiles({
         filename,
         s3Config: this.s3Config,
diff --git a/packages/component-mts-package/src/PackageManager.js b/packages/component-mts-package/src/PackageManager.js
index 43d9386c5..2bbed4fbd 100644
--- a/packages/component-mts-package/src/PackageManager.js
+++ b/packages/component-mts-package/src/PackageManager.js
@@ -19,9 +19,12 @@ const createFilesPackage = (s3Config, archiver = nodeArchiver) => {
   const asyncGetObject = promisify(s3.getObject.bind(s3))
   const asyncListObjects = promisify(s3.listObjects.bind(s3))
 
-  return async ({ fragment, fileTypes, xmlFile }) => {
+  return async ({ fragment, fileTypes, xmlFile, isEQA = false }) => {
     const { id } = fragment
-    const manuscriptName = get(xmlFile, 'name', '').replace('.xml', '')
+    let packageName = get(xmlFile, 'name', '').replace('.xml', '')
+    if (isEQA) {
+      packageName = `ACCEPTED_${packageName}`
+    }
     try {
       const params = {
         Bucket: s3Config.bucket,
@@ -39,7 +42,7 @@ const createFilesPackage = (s3Config, archiver = nodeArchiver) => {
         )
 
         if (s3Files) {
-          const packageOutput = fs.createWriteStream(`${manuscriptName}.zip`)
+          const packageOutput = fs.createWriteStream(`${packageName}.zip`)
           const archive = archiver('zip')
 
           archive.pipe(packageOutput)
-- 
GitLab