ProjectGetter.coffee 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. mongojs = require("../../infrastructure/mongojs")
  2. db = mongojs.db
  3. ObjectId = mongojs.ObjectId
  4. async = require "async"
  5. Project = require("../../models/Project").Project
  6. module.exports = ProjectGetter =
  7. EXCLUDE_DEPTH: 8
  8. getProjectWithoutDocLines: (project_id, callback=(error, project) ->) ->
  9. excludes = {}
  10. for i in [1..@EXCLUDE_DEPTH]
  11. excludes["rootFolder#{Array(i).join(".folder")}.docs.lines"] = 0
  12. db.projects.find _id: ObjectId(project_id.toString()), excludes, (error, projects = []) ->
  13. callback error, projects[0]
  14. getProjectWithOnlyFolders: (project_id, callback=(error, project) ->) ->
  15. excludes = {}
  16. for i in [1..@EXCLUDE_DEPTH]
  17. excludes["rootFolder#{Array(i).join(".folder")}.docs"] = 0
  18. excludes["rootFolder#{Array(i).join(".folder")}.fileRefs"] = 0
  19. db.projects.find _id: ObjectId(project_id.toString()), excludes, (error, projects = []) ->
  20. callback error, projects[0]
  21. getProject: (query, projection, callback = (error, project) ->) ->
  22. if typeof query == "string"
  23. query = _id: ObjectId(query)
  24. else if query instanceof ObjectId
  25. query = _id: query
  26. db.projects.findOne query, projection, callback
  27. findAllUsersProjects: (user_id, fields, callback = (error, ownedProjects, readAndWriteProjects, readOnlyProjects) ->) ->
  28. CollaboratorsHandler = require "../Collaborators/CollaboratorsHandler"
  29. Project.find {owner_ref: user_id}, fields, (error, projects) ->
  30. return callback(error) if error?
  31. CollaboratorsHandler.getProjectsUserIsMemberOf user_id, fields, (error, readAndWriteProjects, readOnlyProjects) ->
  32. return callback(error) if error?
  33. callback null, projects, readAndWriteProjects, readOnlyProjects
  34. populateProjectWithUsers: (project, callback=(error, project) ->) ->
  35. # eventually this should be in a UserGetter.getUser module
  36. getUser = (user_id, callback=(error, user) ->) ->
  37. unless user_id instanceof ObjectId
  38. user_id = ObjectId(user_id)
  39. db.users.find _id: user_id, (error, users = []) ->
  40. callback error, users[0]
  41. jobs = []
  42. jobs.push (callback) ->
  43. getUser project.owner_ref, (error, user) ->
  44. return callback(error) if error?
  45. if user?
  46. project.owner_ref = user
  47. callback null, project
  48. readOnly_refs = project.readOnly_refs
  49. project.readOnly_refs = []
  50. for readOnly_ref in readOnly_refs
  51. do (readOnly_ref) ->
  52. jobs.push (callback) ->
  53. getUser readOnly_ref, (error, user) ->
  54. return callback(error) if error?
  55. if user?
  56. project.readOnly_refs.push user
  57. callback null, project
  58. collaberator_refs = project.collaberator_refs
  59. project.collaberator_refs = []
  60. for collaberator_ref in collaberator_refs
  61. do (collaberator_ref) ->
  62. jobs.push (callback) ->
  63. getUser collaberator_ref, (error, user) ->
  64. return callback(error) if error?
  65. if user?
  66. project.collaberator_refs.push user
  67. callback null, project
  68. async.parallelLimit jobs, 3, (error) -> callback error, project