diff --git a/server/model-manuscript/src/graphql.js b/server/model-manuscript/src/graphql.js index 37e9ae3fdb33a04352c9348836e66661183e098d..9ee042fe075a094368d5c92e8fdccec58bec7e60 100644 --- a/server/model-manuscript/src/graphql.js +++ b/server/model-manuscript/src/graphql.js @@ -147,18 +147,13 @@ const resolvers = { const update = merge({}, manuscript, data) return ctx.connectors.Manuscript.update(id, update, ctx) }, - async submitManuscript(_, { id, input }, ctx) { - const data = JSON.parse(input) - + async makeDecision(_, { id, decision }, ctx) { const manuscript = await ctx.connectors.Manuscript.fetchOne(id, ctx) - const update = merge({}, manuscript, data) - // eslint-disable-next-line - const previousVersion = await new ctx.connectors.Manuscript.model( - update, - ).createNewVersion() + manuscript.decision = decision - const manuscriptVersion = await previousVersion.save() - return manuscriptVersion + manuscript.status = decision + + return manuscript.save() }, }, Query: { @@ -167,7 +162,7 @@ const resolvers = { const manuscript = await Manuscript.query() .findById(id) - .eager('channels') + .eager('[teams, channels, reviews]') if (!manuscript.meta) { manuscript.meta = {} @@ -188,9 +183,6 @@ const resolvers = { object_id: manuscript.id, }) - // TODO: Do this with eager loading relations - manuscript.teams = await manuscript.getTeams() - manuscript.reviews = await manuscript.getReviews() manuscript.manuscriptVersions = await manuscript.getManuscriptVersions() // manuscript.channel = await ctx.connectors.Channel.model.find( // manuscript.channelId, @@ -199,7 +191,7 @@ const resolvers = { }, async manuscripts(_, { where }, ctx) { return ctx.connectors.Manuscript.fetchAll(where, ctx, { - eager: '[teams]', + eager: '[teams, reviews]', }) }, async paginatedManuscripts(_, { sort, offset, limit, filter }, ctx) { @@ -244,7 +236,12 @@ const resolvers = { // change our queries if the submission form changes. We still want to store it as JSONB // so that we can easily search through the information within. Manuscript: { - submission(parent, args, ctx) { + submission(parent) { + return JSON.stringify(parent.submission) + }, + }, + ManuscriptVersion: { + submission(parent) { return JSON.stringify(parent.submission) }, }, @@ -278,7 +275,7 @@ const typeDefs = ` extend type Mutation { createManuscript(input: ManuscriptInput): Manuscript! updateManuscript(id: ID!, input: String): Manuscript! - submitManuscript(id: ID!, input: String): Manuscript! + makeDecision(id: ID!, decision: String): Manuscript! deleteManuscript(id: ID!): ID! reviewerResponse(currentUserId: ID, action: String, teamId: ID! ): Team assignTeamEditor(id: ID!, input: String): [Team] diff --git a/server/model-manuscript/src/manuscript.js b/server/model-manuscript/src/manuscript.js index 68ab21f2ff4f0359cc9afbd808ce5ae3054aad6a..1377871c62d482d9972ed925790aa47cc44f84ad 100644 --- a/server/model-manuscript/src/manuscript.js +++ b/server/model-manuscript/src/manuscript.js @@ -75,8 +75,12 @@ class Manuscript extends BaseModel { const { File } = require('@pubsweet/models') const id = this.parentId || this.id - const manuscripts = await Manuscript.findByField('parent_id', id) - const firstManuscript = await Manuscript.findOneByField('id', id) + const manuscripts = await Manuscript.query() + .where('parent_id', id) + .eager('[teams, teams.members, reviews]') + const firstManuscript = await Manuscript.query() + .findById(id) + .eager('[teams, teams.members, reviews]') manuscripts.push(firstManuscript) const manuscriptVersionsArray = manuscripts.filter( @@ -92,8 +96,6 @@ class Manuscript extends BaseModel { await Promise.all( manuscriptVersions.map(async manuscript => { - manuscript.reviews = await manuscript.getReviews() - manuscript.teams = await manuscript.getTeams() manuscript.files = await File.findByObject({ object: 'Manuscript', object_id: manuscript.id, @@ -108,8 +110,10 @@ class Manuscript extends BaseModel { async createNewVersion() { const { Team, File } = require('@pubsweet/models') - const manuscriptReviews = await this.getReviews() - const manuscriptTeams = await this.getTeams() + const manuscriptReviews = (await this.$query().eager('reviews')).reviews + const manuscriptTeams = ( + await this.$query().eager('[teams, teams.members]') + ).teams const teams = manuscriptTeams.filter( team => team.role === 'author' || @@ -163,7 +167,7 @@ class Manuscript extends BaseModel { } static get relationMappings() { - const { Channel, User, Team } = require('@pubsweet/models') + const { Channel, User, Team, Review } = require('@pubsweet/models') return { submitter: { @@ -194,6 +198,22 @@ class Manuscript extends BaseModel { to: 'teams.objectId', }, }, + reviews: { + relation: BaseModel.HasManyRelation, + modelClass: Review, + join: { + from: 'manuscripts.id', + to: 'reviews.manuscriptId', + }, + }, + parent: { + relation: BaseModel.HasOneRelation, + modelClass: Manuscript, + join: { + from: 'manuscripts.id', + to: 'manuscripts.parentId', + }, + }, } }