From 0860a5e0b30a3681d4f7dab04d91b36733d69f79 Mon Sep 17 00:00:00 2001
From: Yogmatee Roochun <yroochun@ebi.ac.uk>
Date: Fri, 22 Feb 2019 14:24:26 +0000
Subject: [PATCH] issue 378 resolved

---
 server/utils/db.js                            | 23 +++++++++++++++----
 server/xmlValidation/index.js                 |  3 ++-
 .../xpub-model/entities/file/data-access.js   | 19 +++++++++++++++
 3 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/server/utils/db.js b/server/utils/db.js
index 5a5f5df76..8442e7f3d 100644
--- a/server/utils/db.js
+++ b/server/utils/db.js
@@ -3,10 +3,25 @@ const logger = require('@pubsweet/logger')
 
 const FileModel = rfr('server/xpub-model/entities/file/data-access')
 
-module.exports.createFiles = async function createFiles(filesArr) {
-  for (let i = 0; i < filesArr.length; i += 1) {
-    /* eslint-disable no-await-in-loop */
-    const filedb = await new FileModel(filesArr[i]).save({
+module.exports.createFiles = async function createFiles(
+  filesArr,
+  manuscriptId,
+) {
+  const existingFiles = await FileModel.selectByManIdConvertedFiles(
+    manuscriptId,
+  )
+  await upsertFileUrl('tempHTML', filesArr, existingFiles)
+  await upsertFileUrl('PMCfinal', filesArr, existingFiles)
+}
+
+async function upsertFileUrl(fileType, filesArr, existingFiles) {
+  const newFile = filesArr.find(file => file.type === fileType)
+  const existingFile = existingFiles.find(file => file.type === fileType)
+  if (existingFile) {
+    const filedb = await FileModel.updateFileUrl(existingFile.id, newFile.url)
+    logger.info(filedb)
+  } else {
+    const filedb = await new FileModel(newFile).save({
       insertMissing: true,
     })
     logger.info(filedb)
diff --git a/server/xmlValidation/index.js b/server/xmlValidation/index.js
index a05a7305a..fb7a5733a 100755
--- a/server/xmlValidation/index.js
+++ b/server/xmlValidation/index.js
@@ -132,11 +132,12 @@ module.exports.pushXML = async function pushXML(fileUrl, manuscriptId) {
             )
           }
           const dbFilesArr = filesArr.map(obj => {
+            obj.url = `/download/${uuid}${obj.extension}`
             delete obj.extension
             return obj
           })
 
-          await db.createFiles(dbFilesArr)
+          await db.createFiles(dbFilesArr, manuscriptId)
           await Manuscript.updatePdfDepositState(manuscriptId)
           await Manuscript.clearFormState(manuscriptId)
           logger.info('Uploading to Minio and the database has been completed.')
diff --git a/server/xpub-model/entities/file/data-access.js b/server/xpub-model/entities/file/data-access.js
index c54b02e15..df7542f64 100644
--- a/server/xpub-model/entities/file/data-access.js
+++ b/server/xpub-model/entities/file/data-access.js
@@ -74,6 +74,25 @@ class File extends EpmcBaseModel {
     return rows.map(rowToEntity)
   }
 
+  static async selectByManIdConvertedFiles(manId) {
+    const rows = await runQuery(
+      buildQuery
+        .select()
+        .from('file')
+        .where({ 'file.manuscript_id': manId })
+        .andWhere('file.type', 'in', ['tempHTML', 'PMCfinal'])
+        .whereNull('file.deleted'),
+    )
+    return rows.map(rowToEntity)
+  }
+
+  static async updateFileUrl(id, fileurl) {
+    const fileUpdated = await File.query()
+      .patch({ url: fileurl })
+      .where('id', id)
+    return fileUpdated
+  }
+
   static async selectAll() {
     const rows = await runQuery(
       buildQuery
-- 
GitLab