ProjectGetter.coffee 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. mongojs = require("../../infrastructure/mongojs")
  2. db = mongojs.db
  3. ObjectId = mongojs.ObjectId
  4. async = require "async"
  5. Errors = require("../../errors")
  6. module.exports = ProjectGetter =
  7. EXCLUDE_DEPTH: 8
  8. _returnProjectIfPassed: (project_or_id, callback, continueCallback)->
  9. if project_or_id._id?
  10. callback null, project_or_id
  11. else
  12. try
  13. ObjectId(project_or_id.toString())
  14. catch e
  15. return continueCallback(new Errors.NotFoundError(e.message))
  16. continueCallback()
  17. getProjectWithoutDocLines: (project_or_id, callback=(error, project) ->) ->
  18. ProjectGetter._returnProjectIfPassed project_or_id, callback, (err)->
  19. return callback(err) if err?
  20. project_id = project_or_id
  21. excludes = {}
  22. for i in [1..ProjectGetter.EXCLUDE_DEPTH]
  23. excludes["rootFolder#{Array(i).join(".folder")}.docs.lines"] = 0
  24. db.projects.find _id: ObjectId(project_id.toString()), excludes, (error, projects = []) ->
  25. callback error, projects[0]
  26. getProjectWithOnlyFolders: (project_or_id, callback=(error, project) ->) ->
  27. ProjectGetter._returnProjectIfPassed project_or_id, callback, (err)->
  28. return callback(err) if err?
  29. project_id = project_or_id
  30. excludes = {}
  31. for i in [1..ProjectGetter.EXCLUDE_DEPTH]
  32. excludes["rootFolder#{Array(i).join(".folder")}.docs"] = 0
  33. excludes["rootFolder#{Array(i).join(".folder")}.fileRefs"] = 0
  34. db.projects.find _id: ObjectId(project_id.toString()), excludes, (error, projects = []) ->
  35. callback error, projects[0]
  36. getProject: (query, projection, callback = (error, project) ->) ->
  37. ProjectGetter._returnProjectIfPassed project_or_id, callback, (err)->
  38. if typeof query == "string"
  39. query = _id: ObjectId(query)
  40. else if query instanceof ObjectId
  41. query = _id: query
  42. db.projects.find query, projection, (err, project)->
  43. if err?
  44. logger.err err:err, query:query, projection:projection, "error getting project"
  45. return callback(err)
  46. callback(null, project?[0])
  47. populateProjectWithUsers: (project, callback=(error, project) ->) ->
  48. # eventually this should be in a UserGetter.getUser module
  49. getUser = (user_id, callback=(error, user) ->) ->
  50. unless user_id instanceof ObjectId
  51. user_id = ObjectId(user_id)
  52. db.users.find _id: user_id, (error, users = []) ->
  53. callback error, users[0]
  54. jobs = []
  55. jobs.push (callback) ->
  56. getUser project.owner_ref, (error, user) ->
  57. return callback(error) if error?
  58. if user?
  59. project.owner_ref = user
  60. callback null, project
  61. readOnly_refs = project.readOnly_refs
  62. project.readOnly_refs = []
  63. for readOnly_ref in readOnly_refs
  64. do (readOnly_ref) ->
  65. jobs.push (callback) ->
  66. getUser readOnly_ref, (error, user) ->
  67. return callback(error) if error?
  68. if user?
  69. project.readOnly_refs.push user
  70. callback null, project
  71. collaberator_refs = project.collaberator_refs
  72. project.collaberator_refs = []
  73. for collaberator_ref in collaberator_refs
  74. do (collaberator_ref) ->
  75. jobs.push (callback) ->
  76. getUser collaberator_ref, (error, user) ->
  77. return callback(error) if error?
  78. if user?
  79. project.collaberator_refs.push user
  80. callback null, project
  81. async.parallelLimit jobs, 3, (error) -> callback error, project