From 800ccfb3274cf46eb1cab8a1ea78a56196842976 Mon Sep 17 00:00:00 2001
From: Bogdan Cochior <bogdan.cochior@thinslices.com>
Date: Fri, 27 Jul 2018 14:39:25 +0300
Subject: [PATCH] feat(mts): add submission package in the flow

---
 .../src/routes/fragments/post.js              | 17 +++++
 packages/component-mts-package/src/MTS.js     |  8 +--
 .../src/{AWS.js => PackageManager.js}         |  4 +-
 packages/component-mts-package/src/output.xml | 68 -------------------
 packages/xpub-faraday/config/default.js       | 11 +++
 5 files changed, 35 insertions(+), 73 deletions(-)
 rename packages/component-mts-package/src/{AWS.js => PackageManager.js} (98%)
 delete mode 100644 packages/component-mts-package/src/output.xml

diff --git a/packages/component-manuscript-manager/src/routes/fragments/post.js b/packages/component-manuscript-manager/src/routes/fragments/post.js
index b54399b0c..046d92be5 100644
--- a/packages/component-manuscript-manager/src/routes/fragments/post.js
+++ b/packages/component-manuscript-manager/src/routes/fragments/post.js
@@ -1,3 +1,5 @@
+const config = require('config')
+const { get } = require('lodash')
 const {
   Email,
   Fragment,
@@ -5,6 +7,10 @@ const {
   authsome: authsomeHelper,
 } = 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')
+
 module.exports = models => async (req, res) => {
   const { collectionId, fragmentId } = req.params
   let collection, fragment
@@ -51,6 +57,17 @@ module.exports = models => async (req, res) => {
     collection.status = 'submitted'
     collection.save()
 
+    const { journal, xmlParser, ftp } = mtsConfig
+    const MTS = new MTSService(journal, xmlParser, s3Config, ftp)
+    const packageFragment = {
+      ...fragment,
+      metadata: {
+        ...fragment.metadata,
+        customId: collection.customId,
+      },
+    }
+    MTS.sendPackage(packageFragment)
+
     return res.status(200).json(fragment)
   } catch (e) {
     const notFoundError = await services.handleNotFoundError(e, 'Item')
diff --git a/packages/component-mts-package/src/MTS.js b/packages/component-mts-package/src/MTS.js
index 436b5b92e..0686bd52e 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('./AWS')
+const createFilesPackage = require('./PackageManager')
 const mts = require('./mts-json-template')
 const {
   defaultConfig,
@@ -91,7 +91,7 @@ class MTS {
     set(
       jsonTemplate,
       'article.front.article-meta.abstract',
-      this.parseHtml(metadata.title),
+      this.parseHtml(metadata.abstract),
     )
 
     return jsonTemplate
@@ -209,9 +209,9 @@ class MTS {
     return this.convertToXML(this.composeJson(fragment))
   }
 
-  async createMTSPackage(fragment = {}) {
+  sendPackage(fragment = {}) {
     const xmlFile = this.convertFragmentToXML(fragment)
-    await createFilesPackage(this.s3Config, this.ftpConfig)({
+    return createFilesPackage(this.s3Config, this.ftpConfig)({
       fragment,
       xmlFile,
     })
diff --git a/packages/component-mts-package/src/AWS.js b/packages/component-mts-package/src/PackageManager.js
similarity index 98%
rename from packages/component-mts-package/src/AWS.js
rename to packages/component-mts-package/src/PackageManager.js
index 2ea9b7f0a..76880ecb1 100644
--- a/packages/component-mts-package/src/AWS.js
+++ b/packages/component-mts-package/src/PackageManager.js
@@ -2,9 +2,9 @@ const fs = require('fs')
 const AWS = require('aws-sdk')
 const { get } = require('lodash')
 const { promisify } = require('util')
+const FtpDeploy = require('ftp-deploy')
 const nodeArchiver = require('archiver')
 const logger = require('@pubsweet/logger')
-const FtpDeploy = require('ftp-deploy')
 
 const filterByType = (fileTypes = []) => ({ Metadata: { filetype } }) =>
   fileTypes.length > 0 ? fileTypes.includes(filetype) : true
@@ -102,6 +102,8 @@ const uploadFiles = async ({ s3, filename, Bucket, config }) => {
       })
       .catch(err => {
         logger.error(err)
+        deleteFile(filename)
+        throw err
       })
 
     deleteFile(filename)
diff --git a/packages/component-mts-package/src/output.xml b/packages/component-mts-package/src/output.xml
deleted file mode 100644
index ea3de542f..000000000
--- a/packages/component-mts-package/src/output.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE article SYSTEM "JATS-archivearticle1-mathml3.dtd">
-<article dtd-version="1.1d1" article-type="Research Article">
-  <front>
-    <journal-meta>
-      <journal-id journal-id-type="publisher">research</journal-id>
-      <journal-id journal-id-type="email">faraday@hindawi.com</journal-id>
-      <journal-title-group>
-        <journal-title>Bioinorganic Chemistry and Applications</journal-title>
-      </journal-title-group>
-      <issn pub-type="ppub">2474-7394</issn>
-      <issn pub-type="epub"></issn>
-    </journal-meta>
-    <article-meta>
-      <article-id pub-id-type="publisher-id">RESEARCH-F-7654321</article-id>
-      <article-id pub-id-type="manuscript">RESEARCH-F-7654321</article-id>
-      <article-categories>
-        <subj-group subj-group-type="Article Type">
-          <subject>clinical-study</subject>
-        </subj-group>
-      </article-categories>
-      <title-group>
-        <article-title>
-          <p>Harry Kane</p>
-        </article-title>
-      </title-group>
-      <contrib-group>
-        <contrib contrib-type="author" corresp="yes">
-          <role content-type="1"></role>
-          <name>
-            <surname>Author</surname>
-            <given-names>Manuscriptunson</given-names>
-            <prefix>mr</prefix>
-          </name>
-          <email>hindawi+auth@thinslices.com</email>
-          <xref ref-type="aff" rid="aff1"></xref>
-        </contrib>
-        <contrib contrib-type="author" corresp="no">
-          <role content-type="1"></role>
-          <name>
-            <surname>Gareth 4thplace</surname>
-            <given-names>Southgate</given-names>
-            <prefix>Dr.</prefix>
-          </name>
-          <email>hindawi+coauthor@thinslices.com</email>
-          <xref ref-type="aff" rid="aff2"></xref>
-        </contrib>
-        <aff id="aff1">
-          <country>Hindawi</country>
-        </aff>
-        <aff id="aff2">
-          <country>UK</country>
-        </aff>
-      </contrib-group>
-      <history>
-        <date date-type="received">
-          <day>5</day>
-          <month>6</month>
-          <year>2018</year>
-        </date>
-      </history>
-      <abstract>
-        <p>Golden boot, golden boy.</p>
-      </abstract>
-      <funding-group></funding-group>
-    </article-meta>
-  </front>
-</article>
\ No newline at end of file
diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js
index 22d48a7d7..bbd8cb5f3 100644
--- a/packages/xpub-faraday/config/default.js
+++ b/packages/xpub-faraday/config/default.js
@@ -71,6 +71,17 @@ module.exports = {
     bucket: process.env.AWS_S3_BUCKET,
     validations: path.resolve(__dirname, 'upload-validations.js'),
   },
+  'mts-service': {
+    ftp: {
+      user: 'dlpuser@dlptest.com',
+      password: '3D6XZV9MKdhM5fF',
+      host: 'ftp.dlptest.com',
+      port: 21,
+      localRoot: `./`,
+      remoteRoot: '/',
+      exclude: ['*.js'],
+    },
+  },
   'invite-reset-password': {
     url: process.env.PUBSWEET_INVITE_PASSWORD_RESET_URL || '/invite',
   },
-- 
GitLab