Refactor getCollaborators http method to use CollaboratorsHandler

This commit is contained in:
James Allen
2016-03-07 12:02:48 +00:00
parent 1a689aa1fd
commit 6d93076d51
5 changed files with 63 additions and 123 deletions
@@ -8,13 +8,12 @@ mimelib = require("mimelib")
module.exports = CollaboratorsController =
getCollaborators: (req, res, next = (error) ->) ->
ProjectGetter.getProject req.params.Project_id, { owner_ref: true, collaberator_refs: true, readOnly_refs: true}, (error, project) ->
project_id = req.params.Project_id
CollaboratorsHandler.getMembersWithPrivilegeLevels project_id, (error, members) ->
return next(error) if error?
ProjectGetter.populateProjectWithUsers project, (error, project) ->
CollaboratorsController._formatCollaborators members, (error, collaborators) ->
return next(error) if error?
CollaboratorsController._formatCollaborators project, (error, collaborators) ->
return next(error) if error?
res.send(JSON.stringify(collaborators))
res.json(collaborators)
addUserToProject: (req, res, next) ->
project_id = req.params.Project_id
@@ -59,7 +58,7 @@ module.exports = CollaboratorsController =
EditorRealTimeController.emitToRoom(project_id, 'userRemovedFromProject', user_id)
callback()
_formatCollaborators: (project, callback = (error, collaborators) ->) ->
_formatCollaborators: (members, callback = (error, collaborators) ->) ->
collaborators = []
pushCollaborator = (user, permissions, owner) ->
@@ -71,16 +70,14 @@ module.exports = CollaboratorsController =
permissions: permissions
owner: owner
}
if project.owner_ref?
pushCollaborator(project.owner_ref, ["read", "write", "admin"], true)
if project.collaberator_refs? and project.collaberator_refs.length > 0
for user in project.collaberator_refs
for member in members
{user, privilegeLevel} = member
if privilegeLevel == "admin"
pushCollaborator(user, ["read", "write", "admin"], true)
else if privilegeLevel == "readAndWrite"
pushCollaborator(user, ["read", "write"], false)
if project.readOnly_refs? and project.readOnly_refs.length > 0
for user in project.readOnly_refs
else
pushCollaborator(user, ["read"], false)
callback null, collaborators
@@ -10,10 +10,11 @@ async = require "async"
module.exports = CollaboratorsHandler =
getMemberIdsWithPrivilegeLevels: (project_id, callback = (error, members) ->) ->
Project.findOne { _id: project_id }, { collaberator_refs: 1, readOnly_refs: 1 }, (error, project) ->
Project.findOne { _id: project_id }, { owner_ref: 1, collaberator_refs: 1, readOnly_refs: 1 }, (error, project) ->
return callback(error) if error?
return callback null, null if !project?
members = []
members.push { id: project.owner_ref.toString(), privilegeLevel: "admin" }
for member_id in project.readOnly_refs or []
members.push { id: member_id, privilegeLevel: "readOnly" }
for member_id in project.collaberator_refs or []
@@ -34,6 +35,11 @@ module.exports = CollaboratorsHandler =
CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members) ->
return callback(error) if error?
return callback null, (members or []).length
getCollaboratorCount: (project_id, callback = (error, count) ->) ->
CollaboratorsHandler.getMemberCount project_id, (error, count) ->
return callback(error) if error?
return callback null, count - 1 # Don't count project owner
isUserMemberOfProject: (user_id, project_id, callback = (error, isMember, privilegeLevel) ->) ->
CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members) ->
@@ -3,7 +3,6 @@ db = mongojs.db
ObjectId = mongojs.ObjectId
async = require "async"
Project = require("../../models/Project").Project
CollaboratorsHandler = require "../Collaborators/CollaboratorsHandler"
module.exports = ProjectGetter =
EXCLUDE_DEPTH: 8
@@ -31,6 +30,7 @@ module.exports = ProjectGetter =
db.projects.findOne query, projection, callback
findAllUsersProjects: (user_id, fields, callback = (error, ownedProjects, readAndWriteProjects, readOnlyProjects) ->) ->
CollaboratorsHandler = require "../Collaborators/CollaboratorsHandler"
Project.find {owner_ref: user_id}, fields, (error, projects) ->
return callback(error) if error?
CollaboratorsHandler.getProjectsUserIsMemberOf user_id, fields, (error, readAndWriteProjects, readOnlyProjects) ->