From d5839437fd97c10f784a71646fbbdb45bc5bc1f4 Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 24 Aug 2017 17:48:47 +0200 Subject: [PATCH] Add in UserStub model and support in collaborators view --- .../Collaborators/CollaboratorsHandler.coffee | 3 ++- .../app/coffee/Features/User/UserGetter.coffee | 12 +++++++++++- .../app/coffee/infrastructure/mongojs.coffee | 2 +- services/web/app/coffee/models/UserStub.coffee | 17 +++++++++++++++++ .../CollaboratorsHandlerTests.coffee | 12 ++++++------ 5 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 services/web/app/coffee/models/UserStub.coffee diff --git a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee index e974698b18..9de0935783 100644 --- a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee +++ b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee @@ -30,13 +30,14 @@ module.exports = CollaboratorsHandler = return callback(error) if error? return callback null, members.map (m) -> m.id + USER_PROJECTION: { _id: 1, email: 1 } getMembersWithPrivilegeLevels: (project_id, callback = (error, members) ->) -> CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members = []) -> return callback(error) if error? result = [] async.mapLimit members, 3, (member, cb) -> - UserGetter.getUser member.id, (error, user) -> + UserGetter.getUserOrUserStubById member.id, CollaboratorsHandler.USER_PROJECTION, (error, user) -> return cb(error) if error? if user? result.push { user: user, privilegeLevel: member.privilegeLevel } diff --git a/services/web/app/coffee/Features/User/UserGetter.coffee b/services/web/app/coffee/Features/User/UserGetter.coffee index 1f6e5b594e..306fbc7a10 100644 --- a/services/web/app/coffee/Features/User/UserGetter.coffee +++ b/services/web/app/coffee/Features/User/UserGetter.coffee @@ -27,9 +27,19 @@ module.exports = UserGetter = db.users.find { _id: { $in: user_ids} }, projection, callback + getUserOrUserStubById: (user_id, projection, callback = (error, user) ->) -> + try + query = _id: ObjectId(user_id.toString()) + catch e + return callback(new Error(e)) + db.users.findOne query, projection, (error, user) -> + return callback(error) if error? + return callback(null, user) if user? + db.userstubs.findOne query, projection, callback [ 'getUser', - 'getUsers' + 'getUsers', + 'getUserOrUserStubById' ].map (method) -> metrics.timeAsyncMethod UserGetter, method, 'mongo.UserGetter', logger diff --git a/services/web/app/coffee/infrastructure/mongojs.coffee b/services/web/app/coffee/infrastructure/mongojs.coffee index 15eb560a67..f1ed213435 100644 --- a/services/web/app/coffee/infrastructure/mongojs.coffee +++ b/services/web/app/coffee/infrastructure/mongojs.coffee @@ -1,6 +1,6 @@ Settings = require "settings-sharelatex" mongojs = require "mongojs" -db = mongojs(Settings.mongo.url, ["projects", "users"]) +db = mongojs(Settings.mongo.url, ["projects", "users", "userstubs"]) module.exports = db: db ObjectId: mongojs.ObjectId diff --git a/services/web/app/coffee/models/UserStub.coffee b/services/web/app/coffee/models/UserStub.coffee new file mode 100644 index 0000000000..c37a7dfb30 --- /dev/null +++ b/services/web/app/coffee/models/UserStub.coffee @@ -0,0 +1,17 @@ +Settings = require "settings-sharelatex" +mongoose = require('mongoose') +Schema = mongoose.Schema +ObjectId = Schema.ObjectId + +UserStubSchema = new Schema + email : { type : String, default : '' } + first_name : { type : String, default : '' } + last_name : { type : String, default : '' } + overleaf : { id: { type: Number } } + +conn = mongoose.createConnection(Settings.mongo.url, server: poolSize: 10) + +UserStub = conn.model('UserStub', UserStubSchema) + +model = mongoose.model 'UserStub', UserStubSchema +exports.UserStub = UserStub diff --git a/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee b/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee index ff6ca6de67..9ba099f60b 100644 --- a/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee +++ b/services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee @@ -80,12 +80,12 @@ describe "CollaboratorsHandler", -> { id: "read-write-ref-2", privilegeLevel: "readAndWrite" } { id: "doesnt-exist", privilegeLevel: "readAndWrite" } ]) - @UserGetter.getUser = sinon.stub() - @UserGetter.getUser.withArgs("read-only-ref-1").yields(null, { _id: "read-only-ref-1" }) - @UserGetter.getUser.withArgs("read-only-ref-2").yields(null, { _id: "read-only-ref-2" }) - @UserGetter.getUser.withArgs("read-write-ref-1").yields(null, { _id: "read-write-ref-1" }) - @UserGetter.getUser.withArgs("read-write-ref-2").yields(null, { _id: "read-write-ref-2" }) - @UserGetter.getUser.withArgs("doesnt-exist").yields(null, null) + @UserGetter.getUserOrUserStubById = sinon.stub() + @UserGetter.getUserOrUserStubById.withArgs("read-only-ref-1").yields(null, { _id: "read-only-ref-1" }) + @UserGetter.getUserOrUserStubById.withArgs("read-only-ref-2").yields(null, { _id: "read-only-ref-2" }) + @UserGetter.getUserOrUserStubById.withArgs("read-write-ref-1").yields(null, { _id: "read-write-ref-1" }) + @UserGetter.getUserOrUserStubById.withArgs("read-write-ref-2").yields(null, { _id: "read-write-ref-2" }) + @UserGetter.getUserOrUserStubById.withArgs("doesnt-exist").yields(null, null) @CollaboratorHandler.getMembersWithPrivilegeLevels @project_id, @callback it "should return an array of members with their privilege levels", ->