From 0aa837e0a6d1073cfc6c30278686bb1c233f1031 Mon Sep 17 00:00:00 2001
From: Audrey Hamelers <hamelers@ebi.ac.uk>
Date: Mon, 4 Mar 2019 15:51:09 +0000
Subject: [PATCH] #239 duplicate checking improvement

---
 app/components/submission-wizard/SubmitPage.jsx     |  8 +++-----
 app/components/submission-wizard/operations.js      |  4 ++--
 .../xpub-model/entities/manuscript/data-access.js   |  1 -
 server/xpub-model/entities/manuscript/index.js      | 13 +++++++++----
 server/xpub-server/entities/manuscript/resolvers.js |  4 ++--
 .../entities/manuscript/typeDefs.graphqls           |  2 +-
 6 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/app/components/submission-wizard/SubmitPage.jsx b/app/components/submission-wizard/SubmitPage.jsx
index da78b6d46..950751284 100755
--- a/app/components/submission-wizard/SubmitPage.jsx
+++ b/app/components/submission-wizard/SubmitPage.jsx
@@ -13,12 +13,10 @@ const SubmitWithHeader = SubmissionHeader(SubmitWithMutations)
 
 const DupeCheckSubmitPage = ({ manuscript, ...props }) => {
   const { id, meta } = manuscript
-  const pmid =
-    meta.articleIds && meta.articleIds.find(id => id.pubIdType === 'pmid')
-      ? meta.articleIds.find(id => id.pubIdType === 'pmid').id
-      : null
+  const { title, articleIds: aids } = meta
+  const articleIds = aids.map(aid => aid.id)
   return (
-    <Query query={CHECK_DUPES} variables={{ id, pmid, title: meta.title }}>
+    <Query query={CHECK_DUPES} variables={{ id, articleIds, title }}>
       {({ data, loading }) => {
         if (loading || !data) {
           return (
diff --git a/app/components/submission-wizard/operations.js b/app/components/submission-wizard/operations.js
index bbfb29d48..a49070839 100644
--- a/app/components/submission-wizard/operations.js
+++ b/app/components/submission-wizard/operations.js
@@ -40,8 +40,8 @@ export const CREATE_MANUSCRIPT = gql`
 `
 
 export const CHECK_DUPES = gql`
-  query($id: ID!, $pmid: String, $title: String!) {
-    checkDuplicates(id: $id, pmid: $pmid, title: $title) {
+  query($id: ID!, $articleIds: [String], $title: String!) {
+    checkDuplicates(id: $id, articleIds: $articleIds, title: $title) {
       ...ManuscriptFragment
     }
   }
diff --git a/server/xpub-model/entities/manuscript/data-access.js b/server/xpub-model/entities/manuscript/data-access.js
index 046e3af14..5da28aae7 100644
--- a/server/xpub-model/entities/manuscript/data-access.js
+++ b/server/xpub-model/entities/manuscript/data-access.js
@@ -394,7 +394,6 @@ class Manuscript extends EpmcBaseModel {
         ]),
       )
       .orderBy('manuscript.updated', 'desc')
-      .debug()
     return manuscripts
   }
 
diff --git a/server/xpub-model/entities/manuscript/index.js b/server/xpub-model/entities/manuscript/index.js
index e4da17c1d..55d211643 100755
--- a/server/xpub-model/entities/manuscript/index.js
+++ b/server/xpub-model/entities/manuscript/index.js
@@ -90,13 +90,18 @@ const Manuscript = {
     }
   },
 
-  checkDuplicates: async (id, pmid, title, user) => {
+  checkDuplicates: async (id, articleIds, title, user) => {
     let manuscripts = []
-    if (pmid) {
-      const idMatches = await ManuscriptAccess.searchArticleIds(pmid, user)
+    if (articleIds.length > 0) {
+      const idMatches = []
+      const matchLists = articleIds.map(aid =>
+        ManuscriptAccess.searchArticleIds(aid, user),
+      )
+      await Promise.all(matchLists)
+      matchLists.forEach(list => idMatches.concat(list))
       manuscripts = manuscripts.concat(
         idMatches.reduce((other, each) => {
-          if (each.id !== id) {
+          if (each.id !== id && !manuscripts.some(m => m.id === each.id)) {
             other.push(each)
           }
           return other
diff --git a/server/xpub-server/entities/manuscript/resolvers.js b/server/xpub-server/entities/manuscript/resolvers.js
index 33739822f..fe9391de3 100644
--- a/server/xpub-server/entities/manuscript/resolvers.js
+++ b/server/xpub-server/entities/manuscript/resolvers.js
@@ -19,11 +19,11 @@ const resolvers = {
 
       return ManuscriptManager.all(user)
     },
-    async checkDuplicates(_, { id, pmid, title }, { user }) {
+    async checkDuplicates(_, { id, articleIds, title }, { user }) {
       if (!user) {
         throw new Error('You are not authenticated!')
       }
-      return ManuscriptManager.checkDuplicates(id, pmid, title, user)
+      return ManuscriptManager.checkDuplicates(id, articleIds, title, user)
     },
     async countByStatus(_, vars, { user }) {
       if (!user) {
diff --git a/server/xpub-server/entities/manuscript/typeDefs.graphqls b/server/xpub-server/entities/manuscript/typeDefs.graphqls
index 7d355d6e1..0b9275c55 100644
--- a/server/xpub-server/entities/manuscript/typeDefs.graphqls
+++ b/server/xpub-server/entities/manuscript/typeDefs.graphqls
@@ -23,7 +23,7 @@ extend type Query {
   manuscripts: [Manuscript]!
   adminManuscripts(external: Boolean): [Manuscript]!
   countByStatus: [Count]!
-  checkDuplicates(id: ID!, pmid: String, title: String!): [Manuscript]
+  checkDuplicates(id: ID!, articleIds: [String], title: String!): [Manuscript]
   searchArticleIds(id: String!): ManuscriptResult!
   findByStatus(query: String!, page: Int, pageSize: Int): ManuscriptSearchResult!
   searchManuscripts(query: String!, page: Int, pageSize: Int): ManuscriptSearchResult!
-- 
GitLab