From e67afb22506111ff80c3b12c822d03b9f7143144 Mon Sep 17 00:00:00 2001 From: Audrey Hamelers <hamelers@ebi.ac.uk> Date: Tue, 22 Jan 2019 17:13:55 +0000 Subject: [PATCH] WIP: working with journals. #190, #159, #194 --- app/components/PubMedSearch.jsx | 6 ++--- app/components/dashboard/DashboardList.jsx | 2 +- app/components/dashboard/operations.js | 5 ++++ app/components/submission-wizard/Citation.jsx | 4 ++-- .../submission-wizard/CreatePage.jsx | 11 ++++++--- .../submission-wizard/operations.js | 8 +++++++ .../entities/journal/data-access.js | 16 +++++++++++++ .../entities/manuscript/data-access.js | 6 ++--- .../entities/manuscript/helpers/transform.js | 23 +++++++++++++++++++ .../xpub-model/entities/manuscript/index.js | 18 ++++++++------- .../entities/manuscript/resolvers.js | 1 - .../entities/manuscript/typeDefs.graphqls | 1 + 12 files changed, 80 insertions(+), 21 deletions(-) diff --git a/app/components/PubMedSearch.jsx b/app/components/PubMedSearch.jsx index c92222707..b4d36c1b5 100755 --- a/app/components/PubMedSearch.jsx +++ b/app/components/PubMedSearch.jsx @@ -143,7 +143,7 @@ class PubMedSearch extends React.Component { const indexedby = xml.match(/<IndexingSourceName(.*)<\/IndexingSourceName>/g) console.log(indexedby) */ const date = new Date(result.sortpubdate) - const metadata = { + const citationData = { title: result.title, articleIds: [ { @@ -157,9 +157,9 @@ class PubMedSearch extends React.Component { date, }, ], - unmatchedJournal: result.source, + nlmId: result.nlmuniqueid, } - this.props.citationData(metadata) + this.props.citationData(citationData) } } render() { diff --git a/app/components/dashboard/DashboardList.jsx b/app/components/dashboard/DashboardList.jsx index 3fbb90e97..eae4e0837 100644 --- a/app/components/dashboard/DashboardList.jsx +++ b/app/components/dashboard/DashboardList.jsx @@ -281,7 +281,7 @@ const DashboardList = ({ <span>{manuscript.id}</span> {pmid && <span>PMID: {pmid.id}</span>} <span> - JOURNAL: {journal ? journal.journalTitle : unmatchedJournal} + JOURNAL: {journal ? journal.meta.nlmta : unmatchedJournal} </span> {releaseDelay && ( <span> diff --git a/app/components/dashboard/operations.js b/app/components/dashboard/operations.js index e1773ac5f..300b972fb 100644 --- a/app/components/dashboard/operations.js +++ b/app/components/dashboard/operations.js @@ -50,6 +50,11 @@ const DashboardFragment = gql` status updated formState + journal { + meta { + nlmta + } + } meta { title articleIds { diff --git a/app/components/submission-wizard/Citation.jsx b/app/components/submission-wizard/Citation.jsx index 987a3f74b..8cd791ec9 100755 --- a/app/components/submission-wizard/Citation.jsx +++ b/app/components/submission-wizard/Citation.jsx @@ -9,14 +9,14 @@ const Small = styled.span` ` const Citation = props => { - const { articleIds, title, journalMeta, unmatchedJournal } = props.metadata + const { title, articleIds, unmatchedJournal } = props.metadata return ( <p> <HTMLString string={title} /> <Small> <span> <HTMLString - string={journalMeta ? journalMeta.title : unmatchedJournal} + string={props.journal ? props.journal.meta.nlmta : unmatchedJournal} /> </span> {articleIds && articleIds.length > 0 && ( diff --git a/app/components/submission-wizard/CreatePage.jsx b/app/components/submission-wizard/CreatePage.jsx index 3efab7ccb..41c2e2269 100755 --- a/app/components/submission-wizard/CreatePage.jsx +++ b/app/components/submission-wizard/CreatePage.jsx @@ -148,7 +148,7 @@ class Created extends React.Component { render() { const currentUser = this.context const { currentStep, status, error, checked } = this.state - const { id: mId, meta, files: allfiles } = this.props.manuscript + const { id: mId, meta, journal, files: allfiles } = this.props.manuscript const { notes } = meta const files = allfiles ? allfiles.filter( @@ -161,6 +161,11 @@ class Created extends React.Component { return ( <Mutation mutation={UPDATE_MANUSCRIPT}> {(updateManuscript, { data }) => { + const changeCitation = async meta => { + await updateManuscript({ + variables: { data: { id: mId, meta } }, + }) + } const updateEmbargo = async releaseDelay => { await updateManuscript({ variables: { data: { id: mId, meta: { releaseDelay } } }, @@ -208,7 +213,7 @@ class Created extends React.Component { <React.Fragment> <H2>Citation</H2> <PubMedSearch - citationData={this.createNewManuscriptVersion} + citationData={changeCitation} metadata={meta} /> </React.Fragment> @@ -218,7 +223,7 @@ class Created extends React.Component { Citation selected </H2> <Confirm> - <Citation metadata={meta} /> + <Citation journal={journal} metadata={meta} /> <Icon color="currentColor" size={5}> check </Icon> diff --git a/app/components/submission-wizard/operations.js b/app/components/submission-wizard/operations.js index f88e59e75..c52a14982 100644 --- a/app/components/submission-wizard/operations.js +++ b/app/components/submission-wizard/operations.js @@ -14,6 +14,14 @@ export const GET_MANUSCRIPT = gql` id status formState + journal { + journalTitle + meta { + nlmta + pmcStatus + pubmedStatus + } + } meta { title articleIds { diff --git a/server/xpub-model/entities/journal/data-access.js b/server/xpub-model/entities/journal/data-access.js index bf3773cf9..6ef633f05 100644 --- a/server/xpub-model/entities/journal/data-access.js +++ b/server/xpub-model/entities/journal/data-access.js @@ -27,6 +27,8 @@ class Journal extends EpmcBaseModel { 'meta,nlmuniqueid': { type: ['string', 'null'] }, 'meta,pmcStatus': { type: 'boolean' }, 'meta,pubmedStatus': { type: 'boolean' }, + 'meta,firstYear': { type: 'string' }, + 'meta,endYear': { type: 'string' }, }, } } @@ -58,6 +60,20 @@ class Journal extends EpmcBaseModel { return rowToEntity(rows[0]) } + static async getIdByNlmId(nlmId) { + const row = await runQuery( + buildQuery + .select('journal.id') + .from('journal') + .where('meta,nlmuniqueid', nlmId) + .first(), + ) + if (!row) { + throw new Error('journal not found') + } + return row.id + } + static async selectAll() { const rows = await runQuery(buildQuery.select().from('journal')) return rows.map(rowToEntity) diff --git a/server/xpub-model/entities/manuscript/data-access.js b/server/xpub-model/entities/manuscript/data-access.js index 55af7439f..07a188bfb 100644 --- a/server/xpub-model/entities/manuscript/data-access.js +++ b/server/xpub-model/entities/manuscript/data-access.js @@ -213,7 +213,7 @@ class Manuscript extends EpmcBaseModel { manuscripts = await Manuscript.query() .select('manuscript.*') .where('manuscript.id', id) - .eager('[teams.users, notes, files]') + .eager('[journal, teams.users, notes, files]') } else { manuscripts = await Manuscript.query().where('id', id) } @@ -237,7 +237,7 @@ class Manuscript extends EpmcBaseModel { const manuscripts = await Manuscript.query() .distinct('manuscript.id') .select('manuscript.*') - .eager('[teams.users, claiming]') + .eager('[teams.users, claiming, journal]') .whereIn('status', status) logger.debug('manuscripts: ', manuscripts) return manuscripts @@ -270,7 +270,7 @@ class Manuscript extends EpmcBaseModel { .leftJoin('team', 'team.manuscript_id', 'manuscript.id') .groupBy('manuscript.id', 'team.user_id', 'team.role_name') .where('team.user_id', user) - .eager('[teams.users]') + .eager('[teams.users, journal]') return manuscripts } diff --git a/server/xpub-model/entities/manuscript/helpers/transform.js b/server/xpub-model/entities/manuscript/helpers/transform.js index 32d655dc2..8ee0cf7f0 100644 --- a/server/xpub-model/entities/manuscript/helpers/transform.js +++ b/server/xpub-model/entities/manuscript/helpers/transform.js @@ -28,12 +28,32 @@ const dManuscriptUpdate = (data, userId) => { if (data.claimedBy) { properties.claimedBy = data.claimedBy } + if (data.journalId) { + properties.journalId = data.journalId + } if (userId) { properties.updatedBy = userId } return new Manuscript(properties) } +const gJournal = model => { + const journal = { + journalTitle: model.journalTitle, + meta: { + publisherName: model['meta,publisherName'], + issn: model['meta,issn'], + nlmta: model['meta,nlmta'], + nlmuniqueid: model['meta,nlmuniqueid'], + pmcStatus: model['meta,pmcStatus'], + pubmedStatus: model['meta,pubmedStatus'], + firstYear: model['meta,firstYear'], + endYear: model['meta,endYear'], + }, + } + return journal +} + // Transform from Database model to GraphQL data const gManuscript = model => { const manuscript = {} @@ -41,6 +61,9 @@ const gManuscript = model => { manuscript.updated = model.updated manuscript.status = model.status manuscript.formState = model.formState + if (model.journal) { + manuscript.journal = gJournal(model.journal) + } manuscript.meta = {} if (model['meta,title']) { manuscript.meta.title = model['meta,title'] diff --git a/server/xpub-model/entities/manuscript/index.js b/server/xpub-model/entities/manuscript/index.js index f0bd12fcb..dfa41dbef 100755 --- a/server/xpub-model/entities/manuscript/index.js +++ b/server/xpub-model/entities/manuscript/index.js @@ -9,7 +9,7 @@ const FileAccess = require('../file/data-access') const NoteAccess = require('../note/data-access') const ReviewAccess = require('../review/data-access') const Team = require('../team/data-access') -const UserAccess = require('../user/data-access') +const Journal = require('../journal/data-access') const { dManuscriptUpdate, gManuscript } = require('./helpers/transform') const mergeObjects = (...inputs) => @@ -134,18 +134,20 @@ const Manuscript = { return savedMan }, - update: async (input, userId, eager = false) => { + update: async (input, userId) => { const originalMan = await ManuscriptAccess.selectById(input.id) if (!originalMan) { throw new Error('Manuscript not found') } - - const manuscriptUpdate = dManuscriptUpdate(input, userId) - lodash.assign(originalMan, manuscriptUpdate) - const updatedMan = await originalMan.save() - if (eager) { - updatedMan.claiming = await UserAccess.findById(userId) + const newInput = input + if (input.meta.nlmId) { + input.journalId = await Journal.getIdByNlmId(input.meta.nlmId) + delete newInput.meta.nlmId } + const manuscriptUpdate = dManuscriptUpdate(newInput, userId) + lodash.assign(originalMan, manuscriptUpdate) + await originalMan.save() + const updatedMan = await ManuscriptAccess.selectById(input.id, true) return gManuscript(updatedMan) }, diff --git a/server/xpub-server/entities/manuscript/resolvers.js b/server/xpub-server/entities/manuscript/resolvers.js index 98e891f3b..2edd1c7f6 100644 --- a/server/xpub-server/entities/manuscript/resolvers.js +++ b/server/xpub-server/entities/manuscript/resolvers.js @@ -80,7 +80,6 @@ const resolvers = { const updatedMan = await ManuscriptManager.update( { id, claimedBy: user }, user, - true, ) return updatedMan }, diff --git a/server/xpub-server/entities/manuscript/typeDefs.graphqls b/server/xpub-server/entities/manuscript/typeDefs.graphqls index eb5374a60..54d9d236d 100644 --- a/server/xpub-server/entities/manuscript/typeDefs.graphqls +++ b/server/xpub-server/entities/manuscript/typeDefs.graphqls @@ -39,6 +39,7 @@ input ManuscriptMetaInput { fundingGroup: [FundingGroupInput] releaseDelay: String unmatchedJournal: String + nlmId: String } input ArticleIdInput { -- GitLab