ProjectGetter.coffee 2.3 KB

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