diff --git a/server/model-file/src/file.js b/server/model-file/src/file.js index 64284826f7414791e1487bea8c05a5d25462abc3..de10f74af9ab6973e24f20e8ea98d661f3581e2f 100644 --- a/server/model-file/src/file.js +++ b/server/model-file/src/file.js @@ -1,5 +1,4 @@ const BaseModel = require('@pubsweet/base-model') -const logger = require('@pubsweet/logger') class File extends BaseModel { static get tableName() { @@ -11,6 +10,29 @@ class File extends BaseModel { this.type = 'file' } + static get relationMappings() { + const { Manuscript, ReviewComment } = require('@pubsweet/models') + + return { + manuscript: { + relation: BaseModel.BelongsToOneRelation, + modelClass: Manuscript, + join: { + from: 'manuscripts.id', + to: 'files.manuscript_id', + }, + }, + reviewComment: { + relation: BaseModel.BelongsToOneRelation, + modelClass: ReviewComment, + join: { + from: 'review_comments.id', + to: 'files.review_comments_id', + }, + }, + } + } + static get schema() { return { properties: { @@ -20,25 +42,11 @@ class File extends BaseModel { fileType: { type: ['string', 'null'] }, filename: { type: ['string', 'null'] }, size: { type: ['integer', 'null'] }, - object: { type: ['string', 'null'] }, - objectId: { type: 'string', format: 'uuid' }, + reviewCommentId: { type: ['string', 'null'], format: 'uuid' }, + manuscriptId: { type: ['string', 'null'], format: 'uuid' }, }, } } - - static async findByObject({ object, object_id }) { - logger.debug('Finding Files by Object') - - const results = await this.query() - .where('object', object) - .andWhere('object_id', object_id) - - return results - } - - // async $beforeDelete() { - // await Team.deleteAssociated(this.data.type, this.id) - // } } File.type = 'file' diff --git a/server/model-file/src/index.js b/server/model-file/src/index.js index 5f1d108b1e4e4ec0e9e547db5bdbb08af74de6a6..3146f811a5304a8da93c489f57f81acad29efbd6 100644 --- a/server/model-file/src/index.js +++ b/server/model-file/src/index.js @@ -1,10 +1,8 @@ const resolvers = require('./resolvers') const typeDefs = require('./typeDefs') -const model = require('./file') module.exports = { - model, - modelName: 'File', + models: [{ modelName: 'File', model: require('./file') }], resolvers, typeDefs, } diff --git a/server/model-file/src/migrations/1537450834-files.sql b/server/model-file/src/migrations/1537450834-files.sql deleted file mode 100644 index c18083f7b9455aefcadbabe42d3821d1052f5d24..0000000000000000000000000000000000000000 --- a/server/model-file/src/migrations/1537450834-files.sql +++ /dev/null @@ -1,14 +0,0 @@ -CREATE TABLE files ( - id UUID PRIMARY KEY, - created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT current_timestamp, - updated TIMESTAMP WITH TIME ZONE, - object TEXT, - object_id UUID, - label TEXT, - file_type TEXT, - filename TEXT, - url TEXT, - mime_type TEXT, - size INTEGER, - type TEXT NOT NULL -); \ No newline at end of file diff --git a/server/model-file/src/migrations/1596838897-files.sql b/server/model-file/src/migrations/1596838897-files.sql new file mode 100644 index 0000000000000000000000000000000000000000..f823bc1ce840b4300e346776bf163aff24fdf889 --- /dev/null +++ b/server/model-file/src/migrations/1596838897-files.sql @@ -0,0 +1,24 @@ +CREATE TABLE files ( + id UUID PRIMARY KEY, + created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT current_timestamp, + updated TIMESTAMP WITH TIME ZONE, + -- object_type TEXT, + -- object_id UUID, + label TEXT, + file_type TEXT, + filename TEXT, + url TEXT, + mime_type TEXT, + size INTEGER, + type TEXT NOT NULL, + -- Things that can have files + manuscript_id UUID REFERENCES manuscripts(id) ON DELETE CASCADE, + review_comment_id UUID REFERENCES review_comments(id) ON DELETE CASCADE, + + constraint exactly_one_file_owner check( + ( + (manuscript_id is not null)::integer + + (review_comment_id is not null)::integer + ) = 1 + ) +); \ No newline at end of file diff --git a/server/model-file/src/resolvers.js b/server/model-file/src/resolvers.js index da8ea91c7c9c0b3e9a1423ac232df849defd7a10..aa7af76dba0aad48f1ab53e039945b3f69ff2c75 100644 --- a/server/model-file/src/resolvers.js +++ b/server/model-file/src/resolvers.js @@ -32,6 +32,7 @@ const resolvers = { const path = await upload(file) meta.url = `/static/${path}` const data = await new File(meta).save() + return data }, }, diff --git a/server/model-file/src/typeDefs.js b/server/model-file/src/typeDefs.js index 34050c96a91107418bba4e9e5951163a8bc5dc72..d9d84614fc758b9025cb5b5423fbe8a5b0c85967 100644 --- a/server/model-file/src/typeDefs.js +++ b/server/model-file/src/typeDefs.js @@ -8,8 +8,8 @@ const typeDefs = ` fileType: String filename: String mimeType: String - object: String - objectId: ID! + manuscriptId: ID + reviewCommentId: ID label: String size: Int } @@ -18,8 +18,8 @@ const typeDefs = ` id: ID! created: DateTime! updated: DateTime - object: String - objectId: ID! + manuscriptId: ID + reviewCommentId: ID label: String fileType: String filename: String